채팅 시스템 고도화 — 통합 구현 진행 (TPM)

TPM이 도메인 간(스키마→BE→FE) 조율·게이트를 기록·갱신하는 문서. 도메인 내 wave 지휘는 senior-be/senior-fe.

통합 DAG (도메인 간 의존)

flowchart LR
    subgraph Infra["인프라 (DB)"]
        BE01[BE-01 마이그레이션 V42~V46]
    end
    subgraph BE["BE 도메인"]
        BEwave[BE-02~12 wave1~5]
    end
    subgraph FE["FE 도메인"]
        FEtype[FE-01~08 타입·훅·프리미티브]
        FEscreen[FE-09~15 화면·와이어업]
    end
    BE01 --> BEwave
    BEwave -->|API dev 반영| FEscreen
    FEtype -.->|BE API 계약 TDD로 선착수| FEscreen
  • 최선행 게이트: BE-01 마이그레이션(V42~V46) — MySQL implementer + infra-reviewer 통과까지 BE 도메인 wave 착수 금지.
  • Kafka/Redis 신규 인프라 없음 — TDD 확정(in-process @TransactionalEventListener 이벤트, Simple Broker in-memory). 기존 Redis는 relay로 쓰지 않음.
  • FE 선착수 허용: FE wave12(FE-0108 타입/훅/프리미티브)는 인프라 비의존 + BE API 계약(TDD 응답 DTO 표)만으로 착수 가능 → BE와 병렬. FE wave3(FE-09~14 화면)은 대응 BE 엔드포인트가 dev에 있어야 실검증 가능 → 도메인 간 게이트.

도메인 간 게이트

게이트선행후행조건
G1 스키마→BEBE-01 (V42~V46)BE-02~12 전체infra-reviewer APPROVED/COMMENT + 로컬 MySQL 적용 exit 0
G2 BE-API→FE화면(chat)BE-05,12 (읽음·방목록·인증) dev 머지FE-09,10엔드포인트 dev 반영
G3 BE-API→FE화면(community)BE-08,09 dev 머지FE-11,12엔드포인트 dev 반영
G4 BE-API→FE화면(invitation)BE-06 dev 머지FE-13엔드포인트 dev 반영
G5 BE-API→FE화면(goods chat)BE-11 dev 머지FE-14엔드포인트 dev 반영

계약 정합 확인

계약 축BE 근거FE/DB 근거상태
API 응답 DTO (RoomResponse/CommunityResponse/InvitationResponse/RoomUnreadResponse/CommunityMemberResponse)TDD “응답 DTO 필드 스키마”FE-02/03 타입 정의정합 (senior-pm PASS)
도메인 모델 ↔ 테이블TDD 인터페이스 시그니처design-db 자가 점검 표정합
이벤트 계약in-process DomainEvent (Community Created/MemberJoined/MemberLeft, MessageSentEvent)Kafka 토픽 없음정합 (신규 토픽 0)
인증Authorization: Bearer JWT 통일, X-User-Id 제거FE 소켓 CONNECT 헤더정합
마이그레이션 번호설계 V38~V42 (V37 latest 전제)origin/dev 실제 V41 latest불일치 → V42~V46로 TPM 조정

마이그레이션 번호 충돌 (해결)

  • 설계·티켓 전제: “최신 V37 → BE-01은 V38~V42”.
  • 실제 origin/dev(0e06989e, 베이스): LimitedDrop PR 205가 V38~V41 선점.
  • 조정: BE-01을 V42~V46으로 시프트 (스키마 내용 불변, 파일 번호만 이동). 운영 제약 #1(origin/dev 베이스·번호 충돌 방지) 준수.
    • V42 rooms expand / V43 room_participants expand / V44 room_invitations / V45 communities / V46 community_members.

진행 상황 (도메인 × wave × 티켓)

상태: 대기 / 진행 / 완료 / 실패

인프라 (DB)

티켓wave상태근거
BE-01 마이그레이션 (V42~V46)infra-w1#207 dev 머지됨 → 중복 버전 결함 → 재번호 fix 진행Flyway V1V46 검증 exit 0 + infra-reviewer APPROVED + PR #207 머지(origin/dev 5cc87423). 그러나 병렬 머지 #206(V42_alerts)·#208(V43_regions)와 V42/V43 중복 → Flyway 부팅 불가. fix/BE-01-migration-renumber에서 V47V51 재번호 진행

BE

티켓wave상태
BE-02 공통 enum·VOw1완료·머지됨 — PR #217 dev 머지(origin/dev e1f267e9). 테스트 32건 GREEN. 리뷰 APPROVED
BE-03a room context 확장w2완료·머지됨 — dev 머지(#232 등). origin/dev 15d825c3 계열 반영
BE-03b room participant 확장w2완료·머지됨 — dev 머지(#231 등)
BE-04 실시간 WS/STOMPw2완료·머지됨 — PR #234 dev 머지(origin/dev 15d825c3). SecurityConfig /ws·/communities 포함
BE-05 읽음 커서·안읽은 수w3완료·머지됨 — dev 머지(origin/dev 88ad2004 계열)
BE-06 게스트 초대w3완료·머지됨 — dev 머지. host=활성 MEMBER 첫 참여자(joinedAt 최소) 판정
BE-07 게스트 만료·방출w3완료·머지됨 — dev 머지. requireHost=requester가 MEMBER 타입(BE-06와 판정 불일치 — 후속 미결)
BE-08 community 도메인w3완료·머지됨 — dev 머지. CommunityCreatedEvent(hostUserId) 발행, roomId 현재 항상 null(BE-09가 채움)
BE-12 방목록·인증 통일w3완료·머지됨 — dev 머지. /rooms/** authenticated, RoomApiController/MessageApiController JWT 전환
BE-09 context-room-community 연동w4완료·머지됨 — PR #270 dev 머지(origin/dev a701840b). RoomContextDomainService provision/join/leave
BE-10 재연결 backfillw4완료·머지됨 — dev 머지. findAfter + GET /messages/backfill
BE-11 goods 거래 채팅w5진행 — feat/BE-11-goods-trade-chat, 베이스 a701840b. 동기 provision(이벤트 아님), self-chat 가드, ProductWithStockResponse.ownerId 추가, 마이그레이션 불요. implementer 실행 중

후속 미결 (main 트래킹)

항목내용
BE-13 host 모델 통일rooms.host_user_id expand-contract 마이그레이션 + BE-06(first-joined MEMBER)/BE-07(any MEMBER) host 검증 일원화. wave4/5 범위 밖으로 분리.

FE

티켓wave상태
FE-01 테마 토큰w1완료 · #219 dev 머지됨 (고아 스토어 삭제 fix 후 재리뷰 통과). origin/dev=2b778587
FE-02 chat 타입w1완료 · #215 dev 머지됨 (COMMENT)
FE-03 community 타입w1완료 · #216 dev 머지됨 (SportCategory 12값 정렬+exhaustiveness+테스트명 nit fix). 새 origin/dev=0e558611
FE-04 themed UI 프리미티브w2완료 · dev 머지됨
FE-05 chat REST 훅w2완료 · dev 머지됨
FE-06 chat socket 훅w2완료 · dev 머지됨 (@stomp/stompjs 7.3.0)
FE-07 community REST 훅w2완료 · dev 머지됨
FE-08 invitation REST 훅w2완료 · dev 머지됨. wave2 전부 반영 origin/dev=88ad2004
FE-09 방목록 화면w3완료 · #265 dev 머지됨 (COMMENT). dev=262fcb63
FE-10 실시간 채팅 화면w3완료 · #268 dev 머지됨 (COMMENT). 갭: 내 방 참여정보 엔드포인트 → BE 후속 트래킹
FE-11 community 목록·생성w3완료 · #264 dev 머지됨 (p3 radiogroup fix 후)
FE-12 community 상세·멤버십w3완료 · #267 dev 머지됨 (p3 프로필에러 게이팅+NaN 경계 fix 후)
FE-13 게스트 초대 화면w3완료 · #266 dev 머지됨 (p3 루트 테마배경 fix 후)
FE-14 상품 상세 채팅 CTAw3완료 · #263 dev 머지됨 (COMMENT, ownerId 지적 p4 재분류). 새 origin/dev=50754c39. BE ownerId는 BE-11 후속
FE-15 앱 와이어업·플래그w4PR #272. 본작업 완료(feature-flags·useTotalUnread·_layout 라우트·(tabs) 토큰화+전역배지+동아리 탭 게이팅, 530 tests 회귀0) → 후속 게이팅 진행: 화면 진입점 플래그(굿즈 CTA chat.goods.enabled OFF·초대함 버튼 chat.community.enabled)+useChatSocket 중복 파서 통합(회귀 위험 판단). 정정: 머지된 화면 파일 편집은 동시성 충돌 없음(단독 후속)

wave3 공유 파일 충돌 점검 (완료 — 충돌 없음)

  • 기존 공유 파일 수정: FE-09→api/types.ts(RoomResponse optional 3필드 additive), FE-14→api/goods.ts(+7줄). 두 파일 모두 타 wave3 브랜치와 교집합 ∅ → 순차 머지 충돌 없음, 머지 순서 자유. dev는 88ad2004 이후 두 파일 무변경 → 클린 머지.
  • app/rooms/__tests__·app/communities/__tests__는 디렉토리만 공유, 각 티켓이 다른 테스트 파일 생성 → 같은 파일 충돌 없음.

차단 요인

  • G1 (BE 도메인 wave) 차단 — dev Flyway 중복 버전 결함. #207 머지 시점(origin/dev 5cc87423) 기준 V42/V43이 병렬 머지된 #206(V42__create_alerts)·#208(V43__create_regions)와 중복. Flyway는 중복 버전에서 부팅을 거부하므로 BE Testcontainers 통합 테스트가 컨텍스트 로드부터 실패. 원인: BE-01을 0e06989e(V41 latest)에서 분기했으나 머지 전 #206·#208이 V42/V43 선점 — 번호는 머지 시점 기준으로 잡혀야 함(재발 사고).
    • 해결 진행: fix/BE-01-migration-renumber에서 채팅 5개 마이그레이션을 V47~V51(alerts·regions 위 연속 블록, 설계 S1S5 순서 유지)로 재번호 + 기존 V42/V43/V44/V45/V46 채팅 파일 삭제. Flyway V1V51 clean 검증 후 fix PR → main 머지 요청.
    • 영향: BE-02~12 전체(12개)는 이 fix가 dev에 머지되기 전 착수 금지(Testcontainers Flyway 실패). FE는 무관(Flyway 미사용) — 병렬 진행.
    • 주의: 장기 dev DB가 이미 V42/V43 채팅 마이그레이션을 적용했다면 재번호 시 checksum 불일치 — 이번 세션 미배포 전제라 Testcontainers 신규 DB는 무영향. 실 dev DB 적용 여부 확인 필요.
  • 세션 내 모든 wave-close 머지는 code-reviewer APPROVED/COMMENT 후 main에 PR 보고 → main이 squash 머지(self-merge 가드 회피).

Document History

날짜변경
2026-07-04최초 작성 — 통합 DAG·게이트·계약 정합. BE-01 V-번호 충돌(설계 V38 ↔ origin/dev V41) V42~V46 시프트 해결. infra-w1 착수.