MMX Beta Project Documents 계획, 근거, 댓글이 같은 기록으로 남는 작업 저장소

TEXT_CHAT_E2E_2026-05-25

  • 상위 Task: VOICE_CHAT_ROOM_수다방
  • 작성자: Codex PM
  • 검증일: 2026-05-25
  • 검증 환경: Flutter Web on Windows Chrome, http://localhost:8101, API https://api.playmmx.com
  • 비검증 환경: Android native, Windows desktop native, Agora voice

1. 검증 목적

수다방 중 음성 기능을 제외한 텍스트 채팅 MVP가 실제 Flutter 클라이언트와 운영 API 조합에서 동작하는지 확인한다.

2. 검증 결과 요약

통과:

  • 방 목록 조회
  • 기존 방 입장
  • 공개 방 생성 및 생성자 자동 입장
  • 비밀번호 방 생성 및 생성자 자동 입장
  • 비밀번호 오답 차단
  • 비밀번호 정답 입장
  • 메시지 전송
  • 양방향 메시지 동기화
  • 재입장 후 기존 메시지 조회

발견 이슈:

  • TEXT_CHAT_UI_01: 내가 보낸 메시지가 왼쪽 정렬되어 상대 메시지와 구분이 약함.
  • TEXT_CHAT_STATE_01: 브라우저 새로고침 시 초기 화면으로 돌아감.
  • TEXT_CHAT_PARTICIPANT_02: 앱바 뒤로가기 사용 시 leave API가 호출되지 않아 인원 수가 감소하지 않음.
  • TEXT_CHAT_LOBBY_SYNC_01: 한 세션 퇴장 후 다른 세션의 로비 인원 표시가 즉시 일치하지 않음.

3. 대표님과 진행한 수동 테스트 로그

  1. Codex smoke room이 로비에 표시됨.
  2. 기존 방 입장 성공.
  3. 시스템 메시지 표시 확인:
    • [codexsmoke] 방 생성 메시지
    • [마이닉] 입장 메시지
  4. 테스트 메시지 1 전송 성공.
  5. 새로고침 시 초기 화면으로 돌아감.
  6. 같은 닉네임으로 재입장 시 기존 메시지 유지 확인.
  7. 두 번째 테스트 메시지 전송 성공.
  8. 앱 안 뒤로가기 후 로비 복귀 시 기존 방 인원이 줄지 않는 현상 확인.
  9. 테스트방-수동1 생성 성공, 생성 후 자동 입장 확인.
  10. 생성자 뒤로가기 후 로비에 방이 계속 보이고 인원이 유지되는 현상 확인.
  11. 테스트방-비번1 생성 성공.
  12. 다른 브라우저에서 닉네임 둘리로 로비 입장.
  13. 비밀번호 1111 오답 시 입장 차단 확인.
  14. 비밀번호 0038 정답 시 입장 성공, 인원 2/8 확인.
  15. 둘리 테스트 메시지가 양쪽 브라우저에 동기화됨.
  16. 둘리 퇴장 후 로비 인원이 세션별로 다르게 보임.

4. 즉시 조치

2026-05-25 20:08 KST 기준 아래 패치를 진행했다.

  • 방 화면의 앱바 뒤로가기 버튼이 leaveRoom을 호출하도록 변경.
  • 시스템/상대/내 메시지 스타일을 분리하고, 내 메시지를 오른쪽 정렬로 표시.
  • 로비에 5초 자동 갱신을 추가해 다른 세션의 인원 변경을 주기적으로 반영.

5. 남은 확인

패치 후 재검증 필요:

  • 앱바 뒤로가기 후 로비 인원이 감소하는지
  • 생성자 퇴장 시 방 종료 정책에 따라 로비에서 방이 사라지는지
  • 둘리 퇴장 후 양쪽 로비 인원이 5초 안에 동일해지는지
  • 내가 보낸 메시지가 오른쪽 정렬로 표시되는지

아직 미검증:

  • Android 실제 기기 실행
  • Windows desktop native 실행
  • 브라우저 새로고침 후 닉네임/방 복구
  • Agora 음성

6. 자동 검증

2026-05-25 20:16 KST 기준 실행 결과:

  • /snap/bin/flutter analyze 통과.
  • /snap/bin/flutter test 통과, 14개 테스트 성공.
  • /home/sglee/.local/bin/uv run pytest tests -q API 기준 통과, 69개 테스트 성공, 1개 warning.

추가한 회귀 테스트:

  • flutter/mmx_player/test/voice_chat_room_screen_test.dart
    • 방 화면의 앱바 뒤로가기 버튼이 leaveRoom을 호출하고 로비로 복귀하는지 검증한다.

주의:

  • 자동 테스트는 API mock/단위 검증과 Flutter widget 검증이다.
  • 운영 API와 브라우저를 붙인 재수동 검증은 아직 다시 수행하지 않았다.

7. 자동 퇴장 보강

2026-05-25 추가 조치:

  • 명시적 "방 나가기"와 앱바 뒤로가기는 HTTP leaveRoom을 호출한다.
  • Flutter Web 탭 닫기/새로고침은 pagehide, beforeunload 이벤트에서 navigator.sendBeacon으로 leave API를 호출한다.
  • Native app 종료는 lifecycle detached에서 best-effort leave를 호출한다.

검증:

  • /snap/bin/flutter analyze 통과.
  • /snap/bin/flutter test 통과, 14개 테스트 성공.
  • /snap/bin/flutter build web 통과.

주의:

  • 탭 닫기/앱 종료 시 네트워크 전송은 브라우저/OS가 중단할 수 있다.
  • 따라서 이 패치는 즉시 가능한 best-effort 보강이며, 완전한 presence 정합성은 heartbeat/TTL 설계로 닫아야 한다.

댓글