[LG CNS AM INSPIRE] 3기 여섯 번째 멘토링

HongEh·2025년 12월 30일

[LG CNS AM INSPIRE]

목록 보기
6/7
post-thumbnail

6번째 멘토링 정리

1. 멘토링 목표

이번 멘토링의 핵심 목표는 HAI(HistoryAI) 프로젝트에서 지금까지 구현한 기능들을 하나하나 단위 테스트(Unit Test)로 검증하는 단계로 전환하는 것이었다.

특히, 단위 테스트는 단순한 연습이 아니라,

  • HistoryAI에서 이미 만들어 둔 모듈들(TTS, 음성 처리, AI 응답 흐름 등)을
  • 실제 서비스 관점에서 안전하게 조합하기 위한 기반 작업이라는 점을 강조했다.

또한, TTS_RVC 음성변환은 단순한 음성 실험용이 아니라,

🎯 HistoryAI에서 ‘인물 AI와 대화할 때 실제로 사용될 핵심 기능’

이라는 맥락에서 다시 정리했다.


2. 이제는 단위 테스트가 필요한 시점

2.1 HistoryAI(HAI) 관점에서의 필요성

현재 HistoryAI(HAI)는 단순한 데모 수준을 넘어, 여러 기능이 유기적으로 결합된 서비스 형태로 확장되고 있다.

지금까지 구현된 주요 기능 흐름은 다음과 같다.

  • 사용자 입력
  • 인물 AI의 응답 생성
  • 텍스트 결과 출력
  • 음성 출력 및 인물화 (TTS + RVC)
  • 지도 기반 정보 제공
  • 토론 기능
  • 주요 사건 및 전쟁 정보 제공

문제는 기능이 많아질수록 전체 시스템을 한 번에 실행해 검증하는 방식이 점점 비효율적이 된다는 점이다.

[기존 방식]
HistoryAI 전체 실행
 → 에러 발생
 → 어떤 기능에서 문제가 발생했는지 추적이 어려움

[개선 방식]
HAI 내부 기능을 모듈 단위로 분리
 → 각 기능을 단위 테스트로 검증
 → 검증된 기능들을 안정적으로 조합

따라서 이번 멘토링에서는 단순히 "기능이 동작하는지"를 확인하는 단계를 넘어,

✔️ "HistoryAI에서 지금까지 만든 기능들을 하나씩 신뢰 가능한 상태로 만들자"

라는 관점에서 단위 테스트의 필요성을 정리했다.


3. 단위 테스트 기준 정리

이번 멘토링에서는 HistoryAI에 맞는 현실적인 단위 테스트 기준을 다음과 같이 정리했다.

3.1 테스트 단위 예시

HistoryAI는 여러 기능 모듈이 결합된 서비스이기 때문에, 단위 테스트 역시 서비스 기능 기준으로 나누어 설계한다.

  • 인물 AI 응답 생성

    • 사용자 입력에 대해 응답이 정상적으로 생성되는가?
    • 응답 결과가 빈 문자열이 아닌가?
    • 선택한 인물 컨텍스트가 응답에 반영되는가?
  • 지도 기능

    • 사건/전쟁에 대해 위치 정보(위도·경도)가 정상적으로 반환되는가?
    • 지도에 표시할 데이터 구조(JSON 등)가 올바른 형식인가?
    • 존재하지 않는 장소 입력 시 예외 처리가 되는가?
  • 토론 기능

    • 두 개 이상의 인물 AI 응답이 순서대로 생성되는가?
    • 각 인물의 관점이 서로 다르게 유지되는가?
    • 토론 턴 수가 제한 조건을 초과하지 않는가?
  • 주요 사건 / 전쟁 정보 기능

    • 특정 인물 또는 시대 입력 시 사건 목록이 정상적으로 반환되는가?
    • 사건 정보에 연도, 장소, 설명이 포함되는가?
    • 데이터가 없을 경우 적절한 안내 메시지가 반환되는가?
  • 음성 출력 및 인물화 (TTS + RVC)

    • 텍스트 응답이 음성 출력 단계로 정상 전달되는가?
    • 최종 음성 파일이 재생 가능한 상태로 생성되는가?

3.2 핵심 원칙

핵심 원칙

  • 외부 API, 모델 호출 구간을 명확히 분리하여 테스트한다
  • 파일 기반 작업은 반드시 존재 여부 · 크기 · 포맷을 함께 검증한다
  • 실패 상황에서는 단순한 print 출력이 아닌, 원인을 바로 알 수 있는 에러 메시지를 남긴다

4. TTS_RVC 음성변환 전체 구조 (HistoryAI 적용 관점)

4.1 HistoryAI에서의 역할

TTS_RVC 음성변환은 단순히 텍스트를 읽어주는 기능이 아니라,

  • 사용자가 질문하면
  • 역사 인물 AI가 답변하고
  • 그 답변을 해당 인물의 목소리로 들려주는 핵심 인터랙션 요소이다.

즉, HistoryAI에서의 위치는 다음과 같다.

[사용자 질문]
     ↓
[인물 AI 답변 (텍스트)]
     ↓
[TTS_RVC 음성변환]
     ↓
[역사 인물의 목소리로 출력]

5. TTS 단계 설명 (HistoryAI 내부 모듈)

5.1 역할

  • HistoryAI에서 생성된 인물 AI의 텍스트 응답
  • 기본 음성(wav)으로 변환

이 단계에서는 아직 특정 인물의 목소리가 아니라,

📌 "말의 내용이 정확히 들리는 음성"을 만드는 것이 목적이다.

5.2 HistoryAI 기준 단위 테스트 포인트

- 인물 AI 응답 텍스트가 정상적으로 전달되는가?
- 텍스트 길이가 0이 아닌가?
- wav 파일이 정상적으로 생성되는가?
- HistoryAI 파이프라인에서 다음 단계로 넘길 수 있는 형식인가?

6. RVC 음성 변환 단계 설명 (인물 AI 음성화)

6.1 HistoryAI에서 RVC의 의미

RVC는 HistoryAI에서 인물 AI를 ‘캐릭터로 완성’시키는 단계이다.

  • TTS 음성의 발음·억양은 유지
  • 역사 인물의 화자 특성(목소리)만 입힘

즉,

🧠 "AI가 말하는 것" → "그 인물이 말하는 것처럼 느끼게 하는 기술"


✍️ 마무리

이번 6번째 멘토링은 기능 구현 단계에서 검증 단계로 넘어가는 전환점이었다.

다음 단계에서는 이 단위 테스트들이 모여 안정적인 전체 서비스 파이프라인을 구성하게 될 것이다.

profile
화이팅

0개의 댓글