GLOBAL 대시보드 본인 노출·정산 배지 중복 렌더링 수정
목차
두 가지 버그 한 커밋에 정리
GLOBAL 권한 대시보드에서 본인 Row 가 하위 파트너 목록에 끼어 노출되던 이슈 + 정산 목록에서 상태 배지가 중복 렌더링되던 이슈 두 개를 한 번에 처리함. 둘 다 파트너 계층 분기 로직이 어설퍼서 발생한 거라 묶어서 봄.
증상
- GLOBAL 계정으로 대시보드 진입 시 본인이 하위 파트너 목록에 같이 노출됨
- 정산 목록에서 동일 Row 에 상태 배지 두 개가 겹쳐 표시 (홀딩 + 확정)
- 콘솔 에러는 없음. 화면 데이터만 이상함
원인
| 항목 | 기존 | 수정 |
|---|---|---|
| GLOBAL 대시보드 | 본인 포함 | 본인 제외 |
| 배지 렌더링 | 다중 가능 | 단일 강제 |
| 분기 키 | 권한 단일 | 권한 + 상태 복합 |
쿼리 분기에서 GLOBAL 케이스를 별도 처리하지 않았던 게 1번 원인. 하위 파트너 조회 SQL 이 본인 제외 절을 빼먹고 있어서 GLOBAL 자기 자신까지 결과에 포함됨.
배지 중복은 더 단순함. 상태값이 홀딩 → 확정으로 바뀌는 흐름에서 템플릿 조건 분기가 상호배타가 아니었음. 둘 다 참인 구간이 잠깐 생기면서 같이 그려짐.
수정
SQL 한 줄 추가:
AND p.partner_level <> 'GLOBAL'
배지는 상태 우선순위 매핑 도입. 확정이 있으면 홀딩은 그리지 않음:
if (status == CONFIRMED) → 확정 배지
else if (status == PENDING) → 홀딩 배지
else → 없음
회고
- GLOBAL 같은 특수 권한은 "계층 N단계" 일반화에 묻히기 쉬움. 분기 케이스 표를 따로 두는 게 안전
- 시각 요소는 처음부터 mutually exclusive 인지 명시해야 함. 상태 enum 늘어나면 누락 잘 발생
- 두 버그 다 사용자 신고 전에 QA 가 못 잡음. 권한 × 상태 매트릭스 시나리오가 테스트에서 통째로 빠져있었던 게 진짜 문제
다음 스프린트엔 권한별 시나리오 테이블을 따로 빼서 회귀 테스트로 묶을 예정. 결제 플랫폼 쪽은 상태 머신이 워낙 많아서, 한 번 표로 정리해두면 두고두고 써먹을 듯.
다음
댓글 0
첫 댓글 달아줘.