본문으로 건너뛰기
Hooney
English

엔진과 모듈 · 제품에서 사용 중

grids

대량의 데이터를 화면에 보이는 칸만 그려 다루는 표입니다. 정렬과 필터는 검증된 라이브러리(TanStack Table)에 맡기고, 스크롤과 고정 영역 계산은 직접 설계했습니다.

2가로와 세로 두 방향 모두 보이는 칸만 그리도록 직접 계산

기간
2026.02 ~ 현재
소속
Firstage
역할
설계와 구현 (1인)
grids Storybook의 CRM 예제. 1만 명 중 조건에 맞는 1,189명을 담당자별로 묶었고, 펼친 그룹에 이름, 회사, 이메일, 상태, 요금제, MRR이 보인다.

핵심 가치

정렬하거나 필터를 바꾸고 스크롤해도 고른 행이 바뀌지 않아, 일괄 작업이 고른 기록에만 적용됩니다.

성과

  • 보이는 칸만 그리는 가로세로 스크롤, 행과 열 고정, 묶음과 트리, 피벗 집계, 칸 편집, 서버에서 나눠 불러오기를 한 표에서 제공
  • 사내 운영 대시보드의 CSV 내보내기에 사용
  • 선택, 열 너비와 순서, 키보드 조작이 한 상태를 함께 써서 서로 어긋나지 않음
  • 칸 위치 계산을 화면과 분리해 따로 테스트

기술 스택

  • TanStack Table
  • React
  • TypeScript

배경

기록이 많은 운영 화면에서는 화면에 그려지지 않은 행까지 선택하고, 열의 순서와 크기를 바꿀 수 있어야 합니다. 이때 정렬이나 필터, 스크롤 때문에 선택 대상이 바뀌면 대량 작업이 엉뚱한 기록에 적용됩니다. 기록과 필드의 논리 ID를 화면 좌표와 떼어 두는 그리드가 필요해서, 사내 운영 화면에 쓸 목적으로 만들었습니다.

결정과 구현

  • TanStack Table은 정렬과 필터 데이터 모델을 맡고, 양축 가상화와 고정 영역의 좌표 계산은 직접 설계했습니다.
  • 행 ID와 화면 좌표를 분리해 정렬, 필터, 스크롤이 선택 대상을 바꾸지 않게 했습니다. 선택한 ID는 숨겨진 대상까지 포함해 정렬과 필터 뒤에도 남기 때문에, 대량 작업 전에는 호스트가 그 대상을 확인하도록 계약에 적었습니다.
  • 선택, 열 크기, 열 순서, 키보드 조작은 같은 코어 상태를 공유합니다. 코어는 React에 의존하지 않아서 기하 계산을 React 밖에서 검증합니다.
  • 명령 막대와 키보드 동작은 같은 명령 레지스트리를 씁니다.

현재 상태

사내 Dashboard에서 샘플 데이터로 그리드를 직접 써 보는 화면과 운영용 CSV 내보내기가 이 패키지를 씁니다. 아직 베타이며, 실제 운영 데이터를 그리드로 다루는 화면, kuery와 함께 Dashboard에 연결하는 작업, 서버 전체를 대상으로 한 선택 범위와 여러 셀 붙여넣기가 남아 있습니다.

1,000행 표를 521번째 행까지 내린 화면. 첫 행과 첫 열은 고정된 채 남아 있다.
앞의 두 행과 두 열을 고정한 표를 가로와 세로로 스크롤한 화면. 고정 영역은 그대로 있고 4 ~ 7열과 19 ~ 25행이 보인다.
담당자와 요금제로 피벗한 표. 요금제마다 MRR과 거래 수가 있고 맨 아래에 합계 행이 있다.