Skip to content

feat(chat): Polly TTS 음성 캐싱 및 DynamoDB 최적화 refs #8#10

Merged
DDINGJOO merged 1 commit into
mainfrom
feature/7/8/9/polly-voice-caching
Jan 7, 2026
Merged

feat(chat): Polly TTS 음성 캐싱 및 DynamoDB 최적화 refs #8#10
DDINGJOO merged 1 commit into
mainfrom
feature/7/8/9/polly-voice-caching

Conversation

@DDINGJOO

@DDINGJOO DDINGJOO commented Jan 7, 2026

Copy link
Copy Markdown
Contributor

목적

변경 요약

핵심 변경

  • 메시지별 음성 S3 키 캐싱 (maleVoiceKey, femaleVoiceKey)
  • GSI2 추가로 messageId 직접 조회
  • BCrypt 비밀번호 해싱
  • DynamoDbClient Singleton 패턴

주요 파일/모듈

  • ChatMessage.java - gsi2pk, gsi2sk, voiceKey 필드 추가
  • ChatMessageRepository.java - GSI2 조회, 페이지네이션
  • ChatRoomRepository.java - updateLastMessageAt (N+1 해결)
  • ChatVoiceHandler.java - 캐싱 로직
  • PollyService.java - 캐싱 로직
  • template.yaml - GSI2, DynamoDB 권한

수용 기준 검증

  • 메시지별 음성 데이터(S3 키)를 DynamoDB에 저장
  • 남성/여성 음성 각각 캐싱 (maleVoiceKey, femaleVoiceKey)
  • 캐시 히트 시 Polly 호출 없이 S3 Pre-signed URL 반환
  • API 요청 형식 변경 (text → messageId, roomId)
  • 응답에 캐시 여부(cached) 포함
  • 빌드/린트 통과

브레이킹/마이그레이션

API 변경 (프론트엔드 수정 필요)

POST /chat/voice/synthesize

[기존] { "text": "Hello", "voice": "FEMALE" }
[변경] { "messageId": "xxx", "roomId": "yyy", "voice": "FEMALE" }

스키마 변경

  • DynamoDB GSI2 추가 (GSI2PK, GSI2SK)
  • ChatMessage에 maleVoiceKey, femaleVoiceKey 필드 추가
  • 기존 데이터 호환성 유지 (nullable 필드)

테스트

  • 빌드 통과
  • 배포 후 음성 캐싱 동작 확인
  • 캐시 히트/미스 로그 확인

참조

Closes #9
Closes #8
refs #7

## 주요 변경사항

### 음성 캐싱 기능
- 메시지별 음성 S3 키 저장 (maleVoiceKey, femaleVoiceKey)
- 캐시 히트 시 Polly 호출 없이 S3 URL 반환
- API 요청 변경: text → messageId, roomId

### DynamoDB 최적화
- GSI2 추가: messageId로 직접 조회 (풀스캔 방지)
- findByUserId 페이지네이션 추가 (OOM 방지)
- updateLastMessageAt: UpdateExpression으로 N+1 해결

### 보안 강화
- 채팅방 비밀번호 BCrypt 해싱

### 성능 개선
- DynamoDbClient Singleton 패턴 (Cold Start 최적화)

Closes #9
@github-actions github-actions Bot added backend Backend code changes layer:entity Entity/Domain layer layer:repository Repository/DAO layer layer:service Service layer labels Jan 7, 2026
@DDINGJOO DDINGJOO merged commit 98a2dc2 into main Jan 7, 2026
1 check passed
hye-inA pushed a commit that referenced this pull request Jan 23, 2026
…ly-voice-caching

feat(chat): Polly TTS 음성 캐싱 및 DynamoDB 최적화 refs #8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend Backend code changes layer:entity Entity/Domain layer layer:repository Repository/DAO layer layer:service Service layer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[TASK] 음성 캐싱 로직 구현 [STORY] Polly TTS 음성 캐싱으로 비용/성능 최적화

1 participant