스토리 파일을 뜯어보며 스토리북의 스토리 이해하기
Storybook
🎯 이 문서를 읽고 난 후의 상태
- 스토리북에서 말하는
스토리
가 무엇인지 안다. 스토 리
의 구조를 안다.
🤔 가이드 문서와는 조금 다른 접근
스토리북 가이드가 정말 잘 작성되어 있는 것은 맞다.
하지만 그냥 따라가기만 해서는 재미가 없다고 생각한다.
그리고 나같이 미숙한 사람에게는 이해가 쉽지 않기도 하고 말이다.
그래서 템플릿 코드에 있는 스토리를 한번 분석해보면서 스토리를 이해하고자 한다.
📝 디렉토리 구조 파악

디렉토리를 열어보니 다음과 같은 디렉토리 구조를 갖고 있었다.
아무래도, stories
는 스토리북의 템플릿 데이터를 모아놓은 곳 같았다.
찾아보니 .css
나 .jsx
등은 어디까지나 템플릿 구성을 위한 것이고, 실상은 Button.stories.js
와 같은 .stories.
파일이 중요하다고 한다.
그리고, 스토리북이 알아서 .stories.
파일을 찾아서 보여주기에, 이게 어디에 있든 상관은 없다고 한다.
다만 추후 배포나, 관리의 측면에서 스토리들은 굳이 배포할 필요가 없기에, 따로 모아놓는 것이다.
이게 관리가 더 편하기도 하고..
🤔 스토리란 무엇인가?
본격적으로 스토리를 분석하기 전에, 스토리가 무엇인지부터 이해하고 넘어가야할 듯 하다.
A story captures the rendered state of a UI component.
스토리북 공식 문서에서는 스토리를 위와 같이 정의하고 있다.
이와 관련해서 GPT에게 물어봤을 때 다음과 같은 답변을 받을 수 있었다.
🤖 GPT의 답변
Storybook에서 스토리는 특정 컴포넌트의 단일 상태를 설명하는 예제입니다. 스토리는 사용자가 개별 UI 컴포넌트의 다양한 상태를 시각적으로 확인하고, 테스트하며, 문서화할 수 있도록 합니다. 스토리는 각 컴포넌트가 다양한 props를 통해 어떻게 동작하고 렌더링되는지 보여주는 일종의 "샘플"이라고 볼 수 있습니다.
스토리의 기본 개념
- 독립적인 예제: 스토리는 컴포넌트를 독립적으로 렌더링하여 특정 상태나 props 조합에서 컴포넌트가 어떻게 보이고 동작하는지를 확인할 수 있습니다.
- 테스트 및 문서화: Storybook은 스토리를 기반으로 컴포넌트의 다양한 상태를 문서화하고 UI 테스트를 진행할 수 있는 환경을 제공합니다.
- 인터랙션: 사용자는 Storybook의 컨트롤 패널을 통해 props를 변경하고, 다양한 상태에서 컴포넌트가 어떻게 변하는지를 실시간으로 확인할 수 있습니다.
스토리의 구성 방식
스토리는 .stories.js
, .stories.jsx
, .stories.ts
, .stories.tsx
등의 파일 내에서 정의됩니다. 각 스토리는 컴포넌트를 특정 상태로 설정하여 렌더링하는 함수나 객체로 작성됩니다.
스토리의 기본 예시
// Button.stories.js
import React from 'react';
import { Button } from './Button';
export default {
title: 'Button', // Storybook의 탐색 트리에 표시되는 제목
component: Button, // 렌더링할 컴포넌트
};
export const Primary = () => <Button label="Primary Button" primary />;
export const Secondary = () => <Button label="Secondary Button" />;
위 코드에서 Primary
와 Secondary
는 각각 Button
컴포넌트의 스토리입니다. Storybook에서는 이를 개별적으로 확인할 수 있으며, 각기 다른 props가 적용된 상태를 시각적으로 보여줍니다.