Storybook은 UI 컴포넌트를 앱과 떨어진 작업장에서 상태별로 렌더해 보고, 문서화하고, 상호작용을 테스트하는 도구다. 공용 컴포넌트를 모아 디자인 시스템을 만들 때 많이 쓴다.
- 화면: 왼쪽 사이드바(카테고리 → 컴포넌트 → 스토리), 위쪽 툴바(줌, 배경, 뷰포트, 간격 측정), 아래쪽 애드온 패널(Controls, Actions, Interactions)
- 스토리: 컴포넌트의 상태 하나를 보여 주는 예시. 버튼의 기본·비활성·로딩이 각각 스토리다
CSF (Component Story Format)
const meta = { component: Button, tags: ['autodocs'],
argTypes: { onClick: { action: 'clicked' } } } satisfies Meta<typeof Button>
export default meta // 메타데이터 하나
export const Primary: StoryObj<typeof meta> = { // named export 하나 = 스토리 하나
args: { label: '저장', variant: 'primary' },
play: async ({ canvas, userEvent }) => { // 상호작용 시나리오
await userEvent.click(canvas.getByRole('button'))
},
}- 메타에 title을 주지 않으면 스토리 파일의 경로로 사이드바 위치가 정해진다
args: 스토리에 넘길 props. Controls 패널에서 바꿔 볼 수 있다.argTypes로 위젯 종류를 정한다- Actions: 이벤트 핸들러 호출을 패널에 기록한다
play: 렌더 뒤 사용자 동작을 실행하는 테스트. 문법이 React Testing Library와 같다tags: ['autodocs']로 문서 페이지를 자동 생성하고,parameters.layout으로 배치를 정한다- 확장: 접근성 검사(Accessibility, a11y), 시각 회귀(Visual Regression, Chromatic), MSW로 API 모킹 연동
props만으로 그려지는 presentational 컴포넌트가 스토리로 만들기 가장 쉽다.