Skip to content

현재 사용법 (2026-09-10, 6fbaee7f): 불편·기능 신고·첨부·답변 확인 · 기능 마스터. 아래는 작성 당시의 변경 설명이며 현재 전체 동작·재측정 결과를 뜻하지 않습니다.

콘솔 탭 딥링크 진입 시 데이터가 로드되지 않던 초기화 버그 수정 ​

한 줄 요약 ​

시스템 관리 콘솔에서 #cs-reports 같은 탭 주소로 직접 진입하거나 새로고침하면 목록이 0건("접수된 리포트가 없어요.")으로 표시되던 것을, 진입한 탭의 데이터가 바로 로드되게 합니다.

여는 한 줄 ​

근본 원인은 필터가 아니라 초기화 경로입니다: 탭 데이터 로더가 탭 클릭 경로(switchTab)에만 연결되어 있고, 주소 해시로 복원되는 경로(init·popstate)에는 두 개 탭만 특례로 연결되어 있었습니다.

배경 / 지금 동작 ​

콘솔(system-admin)은 단일 페이지 앱으로, 주소 해시(#cs-reports)가 활성 탭을 가리킵니다. 탭 상태를 만드는 경로가 세 가지입니다.

  1. LNB 탭 클릭 → switchTab(tabId) — 탭을 바꾸고 그 탭의 데이터 로더(loadCsReports 등 9개 분기)를 호출합니다.
  2. 주소로 직접 진입·새로고침 → init() → restoreFromHash() — activeTab만 복원하고, 데이터 로더는 integrations·sheet-templates 두 탭만 특례로 호출했습니다.
  3. 브라우저 뒤로/앞으로 → popstate → restoreFromHash() — 데이터 로더를 전혀 호출하지 않았습니다.

그래서 #cs-reports로 새로고침하면 CS 리포트 탭이 열리지만 목록 요청이 발생하지 않아, Alpine 초기값(csrItems: [], csrTotal: 0)이 그대로 "0건"으로 표시됐습니다. 상태 필터를 아무 값으로나 바꾸면 @change가 로더를 처음으로 호출해 그제서야 데이터가 나타났습니다 — 이것이 "열림 전체 필터가 0건, 모든 상태로 바꾸면 10건"(2026-09-09 프로드 리포트)으로 관찰되어 필터 버그처럼 보인 이유입니다.

프로드 실측으로 필터 가설을 배제했습니다: 프로드 콘솔 API를 확장 필터(status=received,triaged,in_progress)로 직접 호출하면 11건이 정상 반환됐고, 문제의 화면에서는 목록 요청 자체가 발생하지 않았습니다.

개념 다이어그램 ​

변경 전

변경 후

개념 흐름별 변경 ​

1. 탭 데이터 로더를 하나의 메서드로 추출합니다 ​

switchTab 안에 있던 탭별 로더 분기 전체(organizations·attendance 기본 날짜·cs-reports·secom-sync·integrations·sheet-templates·national-holidays·platform-staff·endpoints)를 loadTabData(tabId)로 추출했습니다. switchTab은 탭 상태 변경(활성 탭·에러 리셋·해시 push) 후 이 메서드를 호출합니다. 동작은 동일합니다.

2. 해시 진입·새로고침이 같은 로더를 부릅니다 ​

init()이 restoreFromHash() 뒤에 두 탭 특례 대신 loadTabData(this.activeTab)을 호출합니다. organizations는 바로 위에서 이미 로드되므로 중복 호출을 피해 제외합니다.

3. 브라우저 뒤로/앞으로도 로드합니다 ​

popstate 핸들러가 restoreFromHash()로 탭이 바뀌었을 때 loadTabData를 호출합니다. 탭이 그대로인 해시 변화(조직 상세 딥링크)는 기존대로 restoreFromHash 안의 selectOrg가 처리합니다.

검증 ​

  • 로컬 라이브: 로그인 → #cs-reports 직접 진입·새로고침 → 목록 요청(status=received,triaged,in_progress) 발생 + 2건 렌더. 수정 전 동일 시나리오에서는 요청 0건·"0건" 표시(프로드에서도 동일 재현).
  • popstate: 조직 관리로 이동 후 브라우저 뒤로가기 → CS 리포트 목록 재로드 확인.
  • pnpm lint:check && pnpm build 그린.