์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- ๊ฐ๋ฐ์
- typescript
- ํ๊ณ ๋ก
- backend
- javascript
- ํฐ์คํ ๋ฆฌ
- frontend
- react
- nextjs
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- Today
- Total
๐ My name is Ez : ์ฝ๋ค ์ฌ์ ๊ฐ๋ฐlife
[StoryBook] : ์คํ ๋ฆฌ๋ถ์ด ๋ญ์ง? ๋ณธ๋ฌธ
Atomic Design Pattern์ ๋ํด์ ๊ณต๋ถํ๊ณ ์ง๊ธ ํ๊ณ ์๋ ํ๋ก์ ํธ์์ Storybook์ ์ ์ฉํด์ ์ปดํฌ๋ํธ๋ฅผ ๊ด๋ฆฌํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
2023.07.20 - [โจ๏ธ Web Front-End/NextJs] - [Design Pattern] : Atomic Design (์ํ ๋ฏน ๋์์ธ)
์ฌ์ค ์ฒ์ ๋ฆฌ์กํธ๋ฅผ ๋ฐฐ์ ์ Storybook์ ๋ํด์ ๋ค์์ง๋ง ๊ทธ๋๋ ๋ฆฌ์กํธ์กฐ์ฐจ ์ดํดํ์ง ๋ชปํ ์ํ๋ผ์ ๊ทธ๋ฅ ๋ฃ๊ณ ๋๊ฒผ๋๋ฐ ๊ฐ์๊ธฐ ๋ ์ฌ๋๋ค.
์๋์ด๋ถ์๊ฒ ์ ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ๋ง์์ ๋๋ ธ๋๋ฐ... ์ฌ์ค ๋ญ ํ ์ค ์์์ผ ์ ์ฉํ ํ ๋ฐ.. ๊ทธ๋์ ๋ฉฐ์น ์ ๋ถํฐ ์๊ฐ ๋ ๋๋ง๋ค ๊ณต์๋ฌธ์์ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ๊ณ ํด์ ๊ธฐ๋ณธ ์ธํ ๊ณผ ๋ฒํผ ์ ๋ ๊ตฌ๋ถํ๋ ๊ฒ๊น์ง ํด๋ณด์๋ค.
1. StoryBook์ด๋?
StoryBook์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด ์ปดํฌ๋ํธ ๊ฐ๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ณ ๋ณด๋ฉด ๋๋ค. ๊ฐ๋ณ ์ปดํฌ๋ํธ๋ณ๋ก ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ฝ๊ฒ ์ ์ ์๊ณ , ํ ์คํธ๋ ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ปดํฌ๋ํธ์ ๋ํ ๋ฌธ์๋ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค. (๋งค์ฐ ๋ง์กฑ)
2. ๋์ ํ๊ณ ์ถ์ ์ด์
๋ด๊ฐ StoryBook์ ๋์ ํด๋ณด๊ณ ์ถ์ ์ด์ ๋
- Atomic Design Pattern์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ง์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
- ๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค๋ ์ด์ ! (๋ ๋ฒ ์ผํ๊ณ ์ถ์ง ์๋ค.)
- ํ ์คํธ์๋ ์ฉ์ด
- ๋ง์ง๋ง์ ๊ฐ์ธ์ ์ผ๋ก ๊ถ๊ธํด์
3. ์ ์ฉํ๊ธฐ
StoryBook ์ค์น
(์ ๋ NextJs , TypeScript๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.)
npm install --save-dev storybook@next
๊ฐ๋จํ๊ฒ ์ค์น ํ
StoryBook ์ด๊ธฐํ ์์
npx storybook@next init
์ด๊ธฐํ๊น์ง ์๋ฃ๋์๋ค๋ฉด
StoryBook ์คํ
npm run storybook
์๋ ์ด๋ฏธ์ง์ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค (๊ธฐ๋ณธ ์์ ์ ํ ๊ฑฐ๋ผ์ ํ๋ฉด์ด ๋ค๋ฅผ ์ ์์)
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด storeis๋ผ๋ ํด๋๊ฐ ๋ณด์ธ๋ค. ์ฌ๊ธฐ ๊ธฐ๋ณธ ์ฝ๋๋ค์ด ๋ค์ด์๋ค. (์ฐธ๊ณ ์ฉ์ผ๋ก ์ข์)
์ฒ์์๋ ์ด ํด๋ ์์์ BasicButton.tsx , BasicButton.stories.tsx , ButtonBasic.scss ํ์ผ์ ๋ค ๋ฃ์ด์ ํ๋๋ฐ, ๊ฒฝ๋ก ์ธํ ์ด ์ ๋์ด์๋์ง component ํด๋์ stories.tsx ํ์ผ์ ์์ฑํด๋ ์ ๋์๋ค.
๐ BasicButton.stories.tsx (์๋ ์ฝ๋ ์ฐธ๊ณ )
import BasicButton from './BasicButton';
import type { Meta, StoryObj } from '@storybook/react';
import styles from '@styles/components/form/basicButton.module.scss';
const meta: Meta<typeof BasicButton> = {
component: BasicButton, //์ฌ์ฉํ ์ปดํฌ๋ํธ ์์ฑํ๊ธฐ!
title: 'ATOM/ButtonBasic', // ATOM(ํฐ ์นดํ
๊ณ ๋ฆฌ) / ํ์ ํธ๋ฆฌ๊ตฌ์กฐ
//์๋์ผ๋ก ๋ฌธ์ ์์ฑ์ ํ๊ธฐ ์ํด์๋ ์๋ ์ฝ๋ ์ถ๊ฐ ํ์!
tags: ['autodocs'],
};
export default meta;
type Story = StoryObj<typeof BasicButton>;
// ์ฌ๊ธฐ๊น์ง๊ฐ ๊ธฐ๋ณธ์์
์๋๋ถํฐ ์ฌ๋ฌ๊ฐ์ง ์ปดํฌ๋ํธ ํํ๋ฅผ ๋ง๋๋ ๋ถ๋ถ
export const Primary: Story = {
name: 'default', //์ด๋ฆ ๋ณ๊ฒฝ๊ฐ๋ฅ ์์ผ๋ฉด Primary๋ก ๋์ด
//args => ๋๊ฒจ์ค prop ๊ด๋ จ๋ ๊ฐ์ฒด ํํ
args: {
className: [styles.btn],
title: '๋ฒํผ',
click: () => '',
disabled: false,
kind: '',
},
};
export const StorageButton: Story = {
name: 'storage', //์ด๋ฆ ๋ณ๊ฒฝ๊ฐ๋ฅ,
args: {
className: [styles.btn, 'blue'],
title: '์ ์ฉ',
click: () => '',
disabled: false,
kind: 'storage',
},
};
export const PrintButton: Story = {
name: 'print', //์ด๋ฆ ๋ณ๊ฒฝ๊ฐ๋ฅ,
args: {
className: [styles.btn, 'teal'],
title: '์ถ๋ ฅ',
click: () => '',
disabled: false,
kind: 'print',
},
};
์ ์ฝ๋๋ ํํ ๋ฆฌ์ผ์ ๋ณด๊ณ ๋ฒํผ ์ปดํฌ๋ํธ์ ๊ด๋ จ๋ ๋ถ๋ถ๋ง ๋จผ์ ๋ง๋ค์ด๋ณด์๋ค. ์ฒ์์ ์ด ๋ถ๋ถ๋ ๋๋ฌด ํท๊ฐ๋ ค์ ๊ณ ์์ ํ๋ค...
๋์๋ณด๋ ๋จ์ํ๋ค.๐คฆ๐ปโ๏ธ
๊ธฐ๋ณธ ๋ฒํผ ์ปดํฌ๋ํธ๋ฅผ ์ค์ ํ๊ณ ๋๋จธ์ง๋ ๋ณ๊ฒฝ๋๋ ๋ด์ฉ๋ง ๋ฃ์ผ๋ฉด ์์ฑ (์คํ ์ ๋์ค๋ ํ๋ฉด ์ฐธ๊ณ )
๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค ์ฝ๋๋ฅผ ๋ฃ์ผ๋ ์ง์~
์ด๋ ๊ฒ ํด๋น ์ปดํฌ๋ํธ์ ๋ํ ์ ๋ณด๋ค์ด ๋์จ๋ค. (Postman๊ฐ์)
4. ๊ฒฐ๋ก
์ฌ์ค ์์ง ATOM ๋จ๊ณ, ๋ฒํผ ํ๋๋ง ํด๋ณธ ์ํ๋ผ ์ดํ ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ์ฉํด ๋ณผ ์์ ์ด๋ค. ์ต์ํ ํ์ด์ง ๋จ์๋ ์๋๋ผ๋ ๋ถ์ ํํ, ์ ๊ธฐ์ฒด ๋จ๊ณ๊น์ง ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ผ ํ์ง ์์๊น?
์ฒ์์ด๋ผ ๋ฐฐ์ฐ๋ ์๊ฐ๋ ๊ฑธ๋ฆฌ๊ณ ์ ์ํ๋ ค๋ฉด ํ๋ค ๊ฒ ๊ฐ๊ธด ํ์ง๋ง... ๋ง์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ดํ์ ๊ต์ฅํ ํธ๋ฆฌํ ๊ฒ ๊ฐ๋ค.
(๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ์ข ๋ ๊ณต๋ถํ๊ณ ๋ ๋ค์๋ฒ์ ์ด์ด์ ํฌ์คํ ํด ๋ด์ผ๊ฒ ๋ค.)
์ฐธ๊ณ ๋งํฌ
https://storybook.js.org/tutorials/intro-to-storybook/react/ko/get-started/
'โจ๏ธ Web Front-End > ETC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ETC] : ๊ณตํต์ปดํฌ๋ํธ? ์? (0) | 2023.08.04 |
---|---|
[Day.js] : Moment.js (Day.js๋ก ๋ณ๊ฒฝ) (0) | 2023.07.24 |
[Performance] : Debouncing(๋๋ฐ์ด์ฑ),Throttling(์ฐ๋กํ๋ง) (0) | 2023.07.21 |