스토리 파일을 뜯어보며 스토리북의 스토리 이해하기
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가 적용된 상태를 시각적으로 보여줍니다.