Day 5: 종합 실습 및 현지 운영 가이드
1. 학습 목표
Day 5는 월~목 내용을 실제 현지 운영 절차로 고정하는 날입니다. 학습자는 발화 테스트를 수행하고, 로그를 수집하고, 원인을 분류하고, 개선 요청서를 작성하는 전체 루프를 직접 수행해야 합니다.
이 장을 읽은 후에는 다음 산출물을 만들 수 있어야 합니다.
- E2E 테스트 결과표
- STT/딕셔너리/Cloud/기능/API/TTS 원인 분류표
- Cloud LLM 테스트 결과표
- 개선 요청서
- 현지 운영 체크리스트
- 릴리즈 회귀 테스트 세트
참조:
- E2E Test And Log Analysis Runbook
- Operational Examples
- 현지 운영 검증 루프
- 필드 이슈 원인 분류 매트릭스
- 릴리즈 스모크 테스트
- 이슈 리포트 품질 기준
2. 본문 개요
마지막 장에서는 월~목 내용을 실제 운영 절차로 고정합니다.
이제부터는 설명보다 실제 로그를 보고 판단하는 연습을 합니다.
운영에서 중요한 것은 문제를 빨리 단정하는 것이 아니라,
발화 원문부터 STT, 딕셔너리, 토큰, Cloud, Validator, Device API, TTS까지
어느 단계에서 기대와 실제가 달라졌는지를 근거로 찾는 것입니다.
3. 현지 운영 기본 루프
1. 테스트 범위 확정
2. 앱/DB/브랜치/기기 상태 기록
3. 발화 세트 실행
4. logcat 수집
5. STT raw/processed 기록
6. token/Cloud/API/TTS 기록
7. 기대 결과와 실제 결과 비교
8. 원인 분류
9. 개선 필요 여부 판단
10. 담당 영역 지정
11. 개선 요청서 작성
12. 수정 후 regression 재검증
3-1. 말레이시아 현지 운영 기준
이 문서에서 말하는 “현지 운영”은 말레이시아 현지 운영팀이 SQE/필드 테스트, Cloud LLM 검증, Custom RAG 점검, 이슈 리포트를 수행하는 기준을 의미합니다.
| 운영 항목 | 말레이시아 기준 |
|---|---|
| 언어 | 영어를 기본 검증 언어로 두고, 현지 사용 표현은 별도 regression set으로 관리 |
| 제품 기능 | 한국 사양과 동일한 기능이라도 말레이시아 출시 모델/API 지원 여부를 먼저 확인 |
| Cloud prompt | 국내 prompt 구조는 유지하되 현지 서비스/FAQ/RAG 문서는 분리 |
| RAG | 현지 고객센터, 보증, 앱 사용법, 국가별 제한 기능은 Malaysia Custom RAG 문서 기준 |
| 날씨/위치 | 위치 기반 답변은 기기/Cloud에 전달된 location context와 실제 테스트 위치를 함께 기록 |
| 로그 | 모든 이슈는 STT raw, processed, token, Cloud response, Device API, TTS를 한 표에 기록 |
| 회귀 테스트 | 한국어/영어 공통 기능 + 말레이시아 현지 표현 negative case를 같이 실행 |
| 개선 요청 | “증상”보다 “어느 단계에서 기대와 실제가 달라졌는지”를 먼저 작성 |
말레이시아 운영에서 별도 관리해야 하는 테스트 세트:
1. 현지 지명/도시명: Kuala Lumpur, Selangor, Johor Bahru 등
2. 현지 건물/주거 표현: condo, apartment, office, tower, mall 등
3. 현지 서비스 질문: service center, warranty, app setup, region support
4. 현지 환경 질문: haze, PM 2.5, air quality, weather in KL
5. 제품 기능 영어 발화: schedule, security mode, all time mode, home lock, air quality map
현지 발화 유형별 1차 판단:
| 발화 유형 | 우선 경로 | 수정 후보 |
|---|---|---|
| 제품 기능 실행 | On-device token 또는 Cloud Case 2 | dictionary, prompt rewrite, FunctionCallHandler |
| 현지 서비스/보증/앱 질문 | Case 1 + Malaysia Custom RAG | RAG 문서, prompt grounding |
| 현지 최신 환경/정책 질문 | Web Search 필요 여부 판단 | Web/RAG 정책, 불확실성 안내 |
| 외부 앱/미지원 기능 | Case 4 또는 지원 불가 안내 | unsupported list, 제품 사양 |
| 지명/건물명/공간명 충돌 | dictionary negative + RAG 분리 | 공간명 규칙, 현지 표현 regression |
4. 테스트 전 체크리스트
앱 버전:
DB 버전:
브랜치/커밋:
기기 시리얼:
언어 설정:
네트워크 연결:
Cloud 서버 환경:
맵 존재 여부:
등록 공간 수:
청정 가능 공간 수:
현재 기기 상태:
errorcode:
음성인식 enable:
프라이버시/홈잠금/음소거:
5. logcat 수집 기준
필수 로그 키워드:
STT raw
STT processed
processVoiceCmd
Processing with on-device LLM
DICTIONARY_MATCH
parsedLlamaResponse
Cutted parsedLlamaResponse
LLMResponseParser
UNDERSTANDING ERROR TO CLOUD
REQ size
send json
API Response
rewriteQuery
ApiCallValidator
FunctionCallHandler
DeviceCommunicator
mappingTtsTextAndDeviceApi
ttsText
resetState
determineMultiTurn
skipResume
6. 회귀 테스트 세트
스케줄
스케줄 등록해줘
청정 스케줄 등록해줘
전체 청정 스케줄 등록해줘
등록된 스케줄 보여줘
Register the schedule
How many schedules are set
판정:
일반 스케줄 요청은 지원 불가 안내
고정청정은 action=1
전체청정은 action=2
조회는 get=True
공기질 맵
공기질 맵 그려줘
공기질 맵 히스토리 보여줘
Please create the air quality map
Please show me the air quality map history
판정:
생성/히스토리/지도 요청이 각각 사양에 맞게 안내되어야 합니다.
공간/맵
공간이 몇 개 있어?
How many spaces are set?
Tell me the space number
Can you confirm how many rooms are in the map?
저쪽방 청정해줘
판정:
맵 없음, 공간 없음, 공간 있음 케이스가 구분되어야 합니다.
없는 공간명이 임의 공간으로 실행되면 안 됩니다.
보안모드
보안모드 켜줘
집 지켜줘
Security mode on
판정:
Safe Care 가입 여부, 맵/공간/스테이션 조건, 이동 가능 에러가 반영되어야 합니다.
날씨/시간
오늘 날씨 어때
내일 날씨 알려줘
How is the weather today?
지금 몇 시야
What time is it?
판정:
날씨는 현재 위치/최저/최고/습도 정보가 반영되어야 합니다.
시간은 로컬/Cloud 위임 정책에 맞게 응답해야 합니다.
홈 잠금/올타임/나이트모드
홈 잠금 켜줘
홈 잠금 상태 알려줘
Tell me about the all time mode
Turn on all time mode
All time mode status
나이트모드 켜줘
판정:
설명/상태조회/설정이 분리되어야 합니다.
7. 실습 운영 방식
실습은 3개 역할로 나누어 진행합니다.
| 역할 | 책임 |
|---|---|
| Tester | 발화 실행, 재현 횟수 기록 |
| Log Analyst | logcat에서 STT/token/API/TTS 추출 |
| Issue Owner | 원인 분류, 개선 요청서 작성 |
각 케이스는 아래 순서로 진행합니다.
1. 발화 전 기대 토큰/기대 동작 선언
2. 발화 3회 수행
3. 로그 캡처
4. 실제 토큰과 기대 토큰 비교
5. Cloud/API/TTS 여부 확인
6. 원인 분류
7. 개선 필요 여부 판단
8. 리포트 작성
8. 개선 요청서 작성 기준
운영 예제:
릴리즈 직전 스모크 테스트
1. 앱 버전/DB 버전 기록
2. 한국어 10개 + 영어 10개 핵심 발화 실행
3. 각 발화 3회 반복
4. STT raw/token/TTS만 먼저 빠르게 판정
5. 실패 케이스만 full log 분석
6. 실패가 dictionary인지 Cloud인지 API인지 분류
7. 수정 후 동일 발화와 주변 negative case 재검증
필드 이슈 접수 후 30분 내 1차 판단
1. 발화 원문과 기기 환경 확보
2. STT raw가 발화와 맞는지 확인
3. parsed token이 기대와 맞는지 확인
4. Cloud fallback 여부 확인
5. errorcode/ApiCallValidator 여부 확인
6. 원인 후보를 1개 또는 2개로 좁혀 담당 영역 지정
리포트 품질 기준:
- 재현 조건이 없으면 분석 대상이 아니라 정보 부족 상태로 분류합니다.
- STT raw가 없으면 STT/딕셔너리/Cloud 중 어느 영역인지 확정하지 않습니다.
- 기대 token과 실제 token이 없으면 dictionary 수정 요청으로 접수하지 않습니다.
- Cloud response 원문이 없으면 Cloud prompt/RAG 수정 요청으로 접수하지 않습니다.
- Device API input/output이 없으면 SoC/API 문제로 확정하지 않습니다.
- TTS 문구만 다르면 기능 실패가 아니라 resource/spec mismatch로 분리합니다.
- 말레이시아 현지 정책 관련 이슈는 근거 문서 또는 RAG 문서 버전을 같이 기록합니다.
제목:
요약:
발화 원문:
언어:
환경:
앱/DB 버전:
기대 결과:
실제 결과:
STT raw:
STT processed:
기대 토큰:
실제 토큰:
딕셔너리 매칭 로그:
Cloud response:
ApiCallValidator:
Device API input/output:
TTS:
화면 전환:
재현 횟수:
원인 분류:
개선 요청:
첨부 로그:
9. 최종 점검 기준
아래 질문에 답할 수 있어야 합니다.
1. 이 문제는 STT 문제인가, 딕셔너리 문제인가, Cloud 문제인가?
2. 토큰이 맞는데 왜 기능이 실행되지 않았는가?
3. Cloud Case 2가 맞아도 최종 기능이 실패한 이유는 무엇인가?
4. Device API 호출이 없으면 어느 파일을 봐야 하는가?
5. TTS만 틀렸을 때 수정 후보는 어디인가?
10. 최종 산출물
1. 10개 이상 발화 테스트 결과표
2. 3개 이상 이슈 분석 리포트
3. Cloud LLM 테스트 결과표 1건
4. 릴리즈 회귀 테스트 세트
5. 현지 운영 체크리스트
6. 개선 요청서 템플릿 작성본
11. 운영 FAQ
반복 질문은 아래 기준으로 정리합니다.
| 질문 | 기준 답변 |
|---|---|
| Cloud가 기능을 실행하나요? | 일반적으로 실행하지 않습니다. Case 2/rewrite_query로 온디바이스 재진입합니다. |
| STT raw가 틀리면 dictionary를 수정하나요? | 반복 재현되고 기능 라우팅에 직접 영향을 줄 때만 제한적으로 검토합니다. |
| 말레이시아 RAG는 제품 기능 실행에도 쓰나요? | 아닙니다. 제품 설명/정책/FAQ 근거 답변에 쓰고, 기능 실행은 On-device 경로입니다. |
| Case 2가 나오면 성공인가요? | 아닙니다. rewrite_query가 온디바이스에서 기대 token으로 매칭되어야 합니다. |
| token이 맞는데 실행이 안 되면 실패인가요? | errorcode나 기기 상태 때문에 정상 차단된 것일 수 있습니다. |
| 현지 운영팀이 이슈를 올릴 때 최소 첨부는 무엇인가요? | 발화 원문, 언어, STT raw/processed, token, Cloud response, API input/output, TTS, 재현 조건입니다. |