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(