← DEVLOG
기술 노트2020.07.075 min read

Storybook 으로 컴포넌트 문서화 — 설치·Knobs·Actions·Docs 한 번에

React 컴포넌트 개별 문서화 도구 Storybook 도입기 — 설치부터 핵심 애드온(Knobs, Actions, Docs) 까지 통합 정리.

storybookcomponentdocumentationreact

이 글은 2020년 7월 작성한 Storybook 학습 시리즈 4편을 통합한 아카이브본입니다. 현재 (v8+) 에서는 Controls 가 Knobs 를 대체했고, Docs 는 기본 내장되었습니다.

Storybook 이란?

Storybook 은 React·Vue·Angular 등 다양한 UI 프레임워크를 지원하는 컴포넌트 단위의 개발·문서화 환경 입니다. 애플리케이션 전체를 띄우지 않고 개별 컴포넌트를 격리된 환경에서 다양한 상태로 렌더링해볼 수 있습니다.

디자이너·개발자·기획자가 같은 컴포넌트를 다양한 시나리오로 공유하는 용도로 자주 쓰입니다.

1. 설치와 첫 스토리

npx -p @storybook/cli sb init

stories/ 디렉토리가 자동 생성되며 예제 컴포넌트의 스토리 파일이 함께 들어옵니다. 실행:

npm run storybook

기본 포트 localhost:6006 에서 Storybook UI 가 열립니다.

스토리 작성 기본

import React from 'react';
import Button from './Button';

export default {
  title: 'Components/Button',
  component: Button,
};

export const Primary = () => <Button label="Primary" />;
export const Secondary = () => <Button label="Secondary" />;
  • title — Storybook UI 좌측 트리의 그룹/이름
  • 각 export 는 독립된 스토리로 등록
  • 하나의 스토리 파일에 여러 variant 를 나열

2. Knobs 애드온 — 런타임 props 조작

Knobs 는 Storybook UI 에서 props 값을 동적으로 변경할 수 있게 해주는 애드온입니다. 디자이너·기획자가 개발자 도움 없이 "버튼 텍스트를 바꿔보고 싶다", "색상을 바꿔보고 싶다" 를 즉시 시도할 수 있습니다.

설치

npm install --save-dev @storybook/addon-knobs

.storybook/main.js 에 등록:

module.exports = {
  addons: ['@storybook/addon-knobs'],
};

사용

import { text, boolean, number } from '@storybook/addon-knobs';

export const Configurable = () => (
  <Button label={text('Label', 'Click me')} disabled={boolean('Disabled', false)} size={number('Size', 16)} />
);

Storybook UI 하단에 입력 필드가 자동 생성되어 실시간으로 props 가 반영됩니다.

3. Actions 애드온 — 이벤트 로깅

버튼 클릭 같은 이벤트 핸들러가 실제로 호출되는지 확인하는 용도입니다.

import { action } from '@storybook/addon-actions';

export const Clickable = () => <Button onClick={action('button-clicked')} label="Click" />;

버튼을 클릭하면 Storybook UI 의 Actions 패널에 button-clicked 이벤트가 로그로 남고, 전달된 인자까지 확인할 수 있습니다.

4. Docs 애드온 — 자동 문서 생성

컴포넌트의 props 타입·설명·사용 예시를 자동 추출 하여 문서 페이지를 만들어줍니다.

설치

npm install --save-dev @storybook/addon-docs

TypeScript 를 쓰면 props 타입이 자동 인식되어 문서 테이블로 렌더됩니다. JSDoc 주석을 달면 각 prop 의 설명까지 포함됩니다.

생성 결과

  • Canvas 탭: 각 스토리의 시각적 렌더링
  • Docs 탭: props 표, 코드 스니펫, 설명 문서 자동 구성

디자이너·PM 과 설계 합의점으로 쓰기에 적합합니다.

학습 회고

Storybook 도입의 가장 큰 이득은 컴포넌트 개발의 맥락을 분리 할 수 있다는 점이었습니다. 특정 상태를 재현하기 위해 애플리케이션 전체를 돌리지 않아도 되고, 엣지 케이스(빈 상태·에러·로딩)를 한 번에 모아볼 수 있었습니다.

디자인 QA 와 협업할 때도 효과가 컸습니다. "이 변형을 봐줘" 라고 링크 하나만 보내면 되기 때문에 말로 설명하는 것보다 의사소통 비용이 낮아졌습니다.

현재 Storybook v8 이상에서는 Knobs 대신 Controls, Docs 는 기본 내장되는 등 API 가 많이 정리되었습니다. 하지만 "컴포넌트를 격리해서 모든 variant 를 눈으로 확인한다" 는 핵심 가치는 그대로입니다.

방명록

이 글에 대한 한 줄을 남겨주세요

0 / 140

불러오는 중...