현록

스토리북이란?

Storybooklink icon은 UI 컴포넌트를 애플리케이션 화면과 분리해서 개발하고 확인할 수 있게 해주는 도구다.
React, Vue, Svelte, Angular처럼 여러 프레임워크와 함께 사용할 수 있고, 컴포넌트의 상태를 stories라는 작은 예제로 나누어 관리한다.

2022년에 이 글을 처음 쓸 때는 설치 이슈를 만난 경험을 중심으로 짧게 적었는데, 2026년 기준으로는 설치 흐름과 테스트 도구가 많이 정리되었다.
현재 npm registry 기준 Storybook 최신 버전은 10.4.6이다.

왜 사용하나요?

프론트엔드 컴포넌트는 보통 여러 상태를 가진다.

  • 버튼의 기본 상태, hover 상태, disabled 상태
  • 입력폼의 빈 값, 오류 값, 성공 값
  • 카드 컴포넌트의 긴 제목, 이미지 없음, 로딩 상태

애플리케이션 화면 안에서 이 모든 상태를 매번 재현하기는 번거롭다.
Storybook은 컴포넌트를 독립된 예제 단위로 띄워주기 때문에 UI 상태를 빠르게 확인하고 공유하기 쉽다.

설치하기

기존 프로젝트에 Storybook을 추가할 때는 공식 설치 명령을 사용하면 된다.

npm create storybook@latest

프로젝트의 프레임워크를 감지해서 필요한 패키지와 설정 파일을 만들어준다.
설치가 끝나면 보통 다음 명령으로 Storybook 개발 서버를 실행한다.

npm run storybook

story란 무엇인가요?

story는 컴포넌트를 특정 props와 상태로 렌더링한 예제다.
예를 들어 버튼 컴포넌트가 있다면 기본 버튼, 강조 버튼, 비활성 버튼을 각각 story로 만들 수 있다.

import type { Meta, StoryObj } from '@storybook/react'
import { Button } from './Button'

const meta = {
  component: Button,
} satisfies Meta<typeof Button>

export default meta

type Story = StoryObj<typeof meta>

export const Primary: Story = {
  args: {
    children: '저장',
    variant: 'primary',
  },
}

export const Disabled: Story = {
  args: {
    children: '저장',
    disabled: true,
  },
}

이런 식으로 컴포넌트 상태를 문서처럼 남겨두면 디자이너, 기획자, 다른 개발자가 실제 화면에 들어가기 전에도 UI를 확인할 수 있다.

문서화와 테스트

Storybook은 단순히 컴포넌트 모음집만 만드는 도구가 아니다.
stories를 기준으로 컴포넌트 문서를 생성하고, 상호작용 테스트나 접근성 점검 같은 품질 확인 흐름과도 연결할 수 있다.

특히 디자인 시스템이나 공통 컴포넌트가 많은 프로젝트라면 효과가 크다.
컴포넌트가 어떤 props를 받고, 어떤 상태를 가져야 하며, 어떤 UI 회귀가 발생했는지 팀이 같은 화면에서 이야기할 수 있기 때문이다.

언제 도입하면 좋을까요?

다음 상황이라면 Storybook 도입을 고려해볼 만하다.

  • 공통 컴포넌트를 여러 화면에서 재사용한다.
  • 컴포넌트 상태가 많아 실제 페이지에서 모두 확인하기 어렵다.
  • 디자인 시스템이나 UI 가이드를 코드와 함께 관리하고 싶다.
  • UI 변경이 의도한 범위 안에서만 일어났는지 테스트하고 싶다.

반대로 아주 작은 프로젝트에서 컴포넌트 수가 적고 상태도 단순하다면, 처음부터 Storybook을 붙이는 것이 오히려 부담일 수 있다.
공통 컴포넌트가 늘어나고 화면 재현 비용이 커질 때 도입해도 늦지 않다.

참고 자료

관련 포스트
npm outdated와 npm update 차이 thumbnail
npm outdated와 npm update 차이
npm outdated와 npm update의 차이를 초보자 기준으로 정리합니다. Current, Wanted, Latest의 의미와 semver 범위 안에서 업데이트되는 방식, package-lock.json 변화까지 함께 봅니다.
npm install -g와 npx 차이 thumbnail
npm install -g와 npx 차이
npm install -g와 npx의 차이를 초보자 기준으로 정리합니다. 전역 설치, 로컬 설치, 일회성 실행, 프로젝트 scripts에 넣는 기준까지 함께 봅니다.
package.json에서 ^와 ~ 차이 thumbnail
package.json에서 ^와 ~ 차이
package.json 의존성 버전 앞에 붙는 ^와 ~의 차이를 초보자 기준으로 정리합니다. semantic versioning, 버전 범위, 0.x 예외, package-lock.json과의 관계까지 함께 봅니다.
npx와 npm exec 차이 thumbnail
npx와 npm exec 차이
npx와 npm exec가 어떤 명령어인지 초보자 기준으로 정리합니다. 로컬 패키지 실행, 원격 패키지 임시 실행, --package 옵션, -- 인자 전달 차이까지 함께 봅니다.
package.json scripts와 npm run 정리 thumbnail
package.json scripts와 npm run 정리
package.json의 scripts와 npm run 명령어를 초보자 기준으로 정리합니다. npm run dev, npm start, npm test, node_modules/.bin, -- 인자 전달 방식까지 함께 봅니다.
dependencies와 devDependencies 차이 thumbnail
dependencies와 devDependencies 차이
package.json의 dependencies와 devDependencies 차이를 초보자 기준으로 정리합니다. npm install과 npm install -D, 배포 환경 설치, package-lock.json과의 관계까지 함께 봅니다.
npm ci란? thumbnail
npm ci란?
npm ci는 CI, 테스트, 배포처럼 같은 의존성 트리를 반복해서 설치해야 하는 환경에 어울리는 clean install 명령어입니다. package-lock.json 조건, npm install과의 차이, .npmrc 플래그 주의점을 정리합니다.
.npmrc 파일이란? thumbnail
.npmrc 파일이란?
storybook을 사용해보려고 하다 마주한 이슈의 해결법을 알아보다가 등장한 .npmrc라는 파일에 대해 공부해보았다. .npmrc 파일이란? .npmrc 파일은 npm에 대한 config 파일이다. (npm에 대한 rc 파일) 프로젝트별 registry, install 옵션, 인증 토큰처럼 npm CLI가 읽는 설정을 관리할 때 사용한다.
TTV와 TTI란? thumbnail
TTV와 TTI란?
TTV는 Time to View이며, 사용자가 화면을 보는 시점을 의미한다. TTI는 Time to Interact이며, 사용자가 웹에서 특정 동작을 수행할 수 있는 시점을 의미한다.
Maria DB 외부 접속 설정하기 thumbnail
Maria DB 외부 접속 설정하기
안녕하세요. 오늘은 Maria DB 초기 세팅 시, 외부에서 접속이 안될 때 매뉴얼을 작성해보겠습니다. dotenv 패키지를 통해서 환경변수로 관리한다면, 별도의 추가 작업을 할 일이 없으실 겁니다.
package-lock.json 파일의 역할 thumbnail
package-lock.json 파일의 역할
안녕하세요. 오늘은 node 환경의 개발자라면 한번쯤 궁금했을만한 package-lock.json의 역할에 대해 알아보겠습니다. 우리는 node 환경에서 개발을 할 때 다양한 패키지들을 설치하여 활용하곤 합니다. 우리가 설치하는 패키지 또한 다른 npm 패키지를 활용하여 만든 패키지들이고 이들 또한 설치를 하게 됩니다. 이렇게 직간접적으로 설치된 패키지들은 대부분 호환성을 "^1.1.5"와 같이 표현하여, 범위로 지정해두고 있습니다.
Linux 환경 배포 자동화 체험해보기 thumbnail
Linux 환경 배포 자동화 체험해보기
안녕하세요. 요즘 포트폴리오를 만들면서 서버 상에 자주 반영할 일이 생겼는데, 매번 명령어들을 타이핑하는 것이 비효율적이라 생각이 들어 배포 자동화를 생각해보게 되었습니다. 현재 레벨에서는 단순히 명령어들만 단축시켜도 효율적이라 생각이 들어 간단한 쉘 스크립트만 작성하였습니다. 정말 간단하니 여러분도 도전해보시길 바랍니다.
협업 필수품. Prettier thumbnail
협업 필수품. Prettier
안녕하세요. 오늘은 Prettier이라는 도구에 대해 알려드리고자 합니다. 개발자는 각자의 코딩스타일이 존재합니다. 그러다보니 같은 프로젝트에서도 작성하는 소스마다 스타일이 제각기 다르기 일쑤입니다. 그럴 때 도입하면 좋은 것이 Prettier입니다. 프로젝트 root 폴더에 .prettierrc 라는 파일을 생성한 뒤, 위 예시와 같이 원하는 옵션을 JSON 형식으로 작성해주면 됩니다.