docs(dm): WebSocket 저장소 전환 검증을 기록한다

This commit is contained in:
2026-06-18 18:26:16 +09:00
parent dd7a6465c1
commit 379284ca4f

View File

@@ -559,7 +559,7 @@
- 2026-06-18: `DmChatSocketClientTest`를 먼저 추가하고 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketClientTest" --max-workers=1` 실행 시 `DmChatSocketClient` 미정의 컴파일 오류로 RED를 확인했다. 이후 `DmChatSocketClient.kt`를 추가해 `https`/`http` base URL의 WebSocket scheme 변환, `Authorization: Bearer ...` handshake header, 명시적 `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` 송신, parser 기반 수신 event callback, 알 수 없는 type/잘못된 JSON 무시, close 정리를 구현했다. 구현 직후 URL scheme 검증 2건이 RED로 남아 OkHttp `Request.url` 정규화 특성을 반영해 원본 WebSocket URL을 request tag로 보존하도록 조정했고, 재실행 결과 `DmChatSocketClientTest` PASS를 확인했다. `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1`도 PASS했다. `ktlintCheck`에서는 기존 `.editorconfig``disabled_rules` deprecation warning이 출력됐지만 실패는 없었다.
- 2026-06-18: 코드 리뷰로 `DmChatSocketClient.kt``DmChatSocketClientTest.kt`를 재검토했다. WebSocket endpoint scheme 변환, bearer header, 명시적 `JOIN_ROOM`/`LEAVE_ROOM`/`SEND_TEXT`/`PING` 송신, 현재 socket guard, close 정리, parser event 전달이 Task 9.2 범위와 일치함을 확인했고 추가 결함은 발견하지 못했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatSocketClientTest" --max-workers=1`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.*" --max-workers=1`, `./gradlew :app:compileDebugKotlin --max-workers=1`, `./gradlew :app:ktlintCheck --max-workers=1` PASS를 확인했다.
- [ ] **Task 9.3: Repository와 DI를 WebSocket 클라이언트 기준으로 전환**
- [x] **Task 9.3: Repository와 DI를 WebSocket 클라이언트 기준으로 전환**
- Files:
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatRepository.kt`
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt`
@@ -573,8 +573,11 @@
- 검증:
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRepositoryTest" --max-workers=1`
- Expected: REST create/open/messages는 기존처럼 동작하고, WebSocket connect/send/close 위임과 bearer header 생성 테스트가 PASS.
- 검증 기록:
- 2026-06-18: `DmChatRepository``AppDI``DmChatSocketClient` 기준으로 전환하고 REST `createOrGetRoom`/`openRoom`/`getMessages` 경로는 유지됨을 확인했다. 대상 실행으로 `DmChatRepositoryTest`, `DmChatSocketClientTest`, `DmChatRoomActivitySourceTest`, `DmChatRoomViewModelTest`가 PASS했고, `./gradlew :app:compileDebugKotlin --max-workers=1` 및 style 정리 후 `./gradlew :app:ktlintCheck --max-workers=1`도 PASS했다. `ktlintCheck`에는 기존 `.editorconfig``disabled_rules` deprecation warning만 남았다.
- 2026-06-18: Phase 9 코드 리뷰로 `DmChatRepository`, `AppDI`, `DmChatRoomViewModel`, `DmChatRoomActivity`의 WebSocket 전환 diff를 재검토했다. `DmChatRepositoryTest`, `DmChatSocketClientTest`, `DmChatRoomActivitySourceTest`, `DmChatRoomViewModelTest`, `compileDebugKotlin`, `ktlintCheck`, `git diff --check`는 PASS했다. 다만 `DmChatRoomViewModel``JOINED` 수신 전 `isRealtimeConnected=true`로 처리하고, 전송 제어가 아직 단일 `isSending` 기준이라 Phase 9 이후 정책인 `requestId` 단위 독립 pending과 완전히 맞지 않는 보완 필요 사항을 발견했다. 해당 보완은 Phase 10의 ViewModel WebSocket 세션/전송 전환 범위에서 처리한다.
- [ ] **Task 9.4: 제거 endpoint API 정의 삭제**
- [x] **Task 9.4: 제거 endpoint API 정의 삭제**
- Files:
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatApi.kt`
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm/data/DmChatModels.kt`
@@ -587,6 +590,9 @@
- 검증:
- Run: `rg "messages/text|events/disconnect|SendDmTextMessageRequest|SendDmChatMessageResponse|disconnectRealtime\\(" app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm`
- Expected: WebSocket 전환 후 유지가 필요한 과거 검증 로그를 제외하고 main/test 코드의 신규 경로에서 결과 없음.
- 검증 기록:
- 2026-06-18: `messages/text|events/disconnect|SendDmTextMessageRequest|SendDmChatMessageResponse|disconnectRealtime\(` 검색 결과 출력이 없음을 확인했다. 대상 실행으로 `DmChatRepositoryTest`, `DmChatSocketClientTest`, `DmChatRoomActivitySourceTest`, `DmChatRoomViewModelTest`가 PASS했고, `./gradlew :app:compileDebugKotlin --max-workers=1` 및 style 정리 후 `./gradlew :app:ktlintCheck --max-workers=1`도 PASS했다. `ktlintCheck`에는 기존 `.editorconfig``disabled_rules` deprecation warning만 남았다.
- 2026-06-18: Phase 9 재검증으로 `rg "messages/text|events/disconnect|SendDmTextMessageRequest|SendDmChatMessageResponse|disconnectRealtime\\(" app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/dm app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/dm` 결과 없음, `git diff --check` PASS를 확인했다. 최초 Gradle 실행은 sandbox의 `~/.gradle` lock 파일 접근 제한으로 실패했으나, 승인된 Gradle 실행에서 `DmChatRepositoryTest`, `DmChatSocketClientTest`, `DmChatRoomActivitySourceTest`, `DmChatRoomViewModelTest`, `compileDebugKotlin`, `ktlintCheck`가 PASS했다.
### Phase 10: ViewModel WebSocket 세션/수신/전송 전환