π Frontend Workshop
π κ°μ
frontend-workshop
μν¬μ€νμ΄μ€λ UI μ»΄ν¬λνΈλ₯Ό λ
립μ μΌλ‘ κ°λ°νκ³ λ¬ΈμννκΈ° μν Storybook κΈ°λ°μ μ ν리μΌμ΄μ
μ
λλ€. Turborepo λͺ¨λ
Έλ ν¬ νκ²½μμ Storybookμ μ΄λ»κ² μ€μ νκ³ νμ©νλμ§ λ³΄μ¬μ£Όλ μμ νλ‘μ νΈμ
λλ€.
π οΈ μ 곡 κΈ°λ₯
- UI μ»΄ν¬λνΈ κ°λ°: λ 립μ μΈ νκ²½μμ UI μ»΄ν¬λνΈλ₯Ό κ°λ°ν μ μμ΅λλ€.
- λ¬Έμν: κ° μ»΄ν¬λνΈμ μ¬μ© μ¬λ‘λ₯Ό λ¬Έμνν μ μμ΅λλ€.
- Turborepo ν΅ν©: Turborepo κΈ°λ° λͺ¨λ Έλ ν¬ νκ²½μμ Storybook ν΅ν©μ μ§μν©λλ€.
- ν μ€νΈ μλν: μ κ·Όμ±(a11y) ν μ€νΈ λ° E2E ν μ€νΈλ₯Ό μν μ€μ μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
- Docker μ§μ: Storybookμ Docker 컨ν μ΄λλ‘ λ°°ν¬ν μ μμ΅λλ€.
π μ£Όμ λλ ν 리 ꡬ쑰
src/
: Storybook μ ν리μΌμ΄μ μ μμ€ μ½λ, μ»΄ν¬λνΈ λ° μ€ν 리 νμΌμ΄ μμΉν©λλ€.stories/
: Storybook μ€ν 리 νμΌμ΄ μμΉν©λλ€.assets/
: μ μ μμ°(μ΄λ―Έμ§, ν°νΈ λ±)μ΄ μμΉν©λλ€.
public/
: μ μ μμ°vite.config.ts
: Vite μ€μ νμΌtsconfig.json
: TypeScript μ€μ νμΌ
βοΈ Storybook μ€μ
.storybook/main.ts
: Storybookμ ν΅μ¬ μ€μ νμΌλ‘, μ€ν 리 νμΌ κ²½λ‘(stories), μ λμ¨(addons), νλ μμν¬ μ€μ μ λ΄λΉν©λλ€..storybook/preview.ts
: Storybookμ κΈλ‘λ² νλΌλ―Έν°λ₯Ό μ€μ ν©λλ€. 컨νΈλ‘€ λ§€μ², Tailwind κΈ°λ°μ 컀μ€ν λ·°ν¬νΈ, μ κ·Όμ±(a11y) ν μ€νΈ λͺ¨λ λ±μ μ§μ ν©λλ€..storybook/test-runner.ts
: Storybook ν μ€νΈ λ¬λμ λμμ 컀μ€ν°λ§μ΄μ¦ν©λλ€. κ° μ€ν 리μ μ κ·Όμ±(a11y) κ²μ¬λ₯Ό μλννκ³ , κ²°κ³Όλ₯Ό JUnit ν¬λ§·μΌλ‘ μ μ₯ν©λλ€..storybook/vitest.setup.ts
: Storybookκ³Ό Vitest ν΅ν© μ νμν νλ‘μ νΈ μ΄λ Έν μ΄μ μ μ€μ ν©λλ€.
π³ Dockerfile μ 곡
- Dockerfile: Storybookμ μ μ μ¬μ΄νΈλ‘ λΉλνμ¬ NGINXλ‘ μλΉνλ νλ‘λμ μ© Docker μ΄λ―Έμ§μ λλ€. λ©ν°μ€ν μ΄μ§ λΉλλ‘ μμ‘΄μ± μ€μΉ, λΉλ, λ°°ν¬ μ΄λ―Έμ§λ₯Ό λΆλ¦¬νμ¬ μ΅μ νν©λλ€.
- Dockerfile.test-runner: Storybook μ κ·Όμ± λ° E2E ν μ€νΈλ₯Ό μν νκ²½μ ꡬμ±νλ Docker μ΄λ―Έμ§μ λλ€. Playwright λ± ν μ€νΈ λꡬλ₯Ό ν¬ν¨νλ©°, test:storybook μ€ν¬λ¦½νΈλ₯Ό μ€νν΄ CI νκ²½μμ Storybook ν μ€νΈλ₯Ό μλνν μ μμ΅λλ€.
μ 곡λλ 2κ°μ Dockerfile μ κ°κ° Storybook μ νλ‘λμ
νκ²½μμ μλΉνκΈ° μν Dockerfile κ³Ό, ν
μ€νΈ λ¬λλ₯Ό μν Dockerfile μ
λλ€.
μ΄λ€μ μ€μ CI/CD νμ΄νλΌμΈμμ νμ©νμ¬, Storybookμ μλμΌλ‘ λΉλνκ³ ν
μ€νΈν μ μμ΅λλ€.
μ€μ ν
μ€νΈμμμ μ¬μ© μμλ ν
μ€ν
> Storybook ν
μ€νΈ
λ¬Έμλ₯Ό μ°Έκ³ νμΈμ.
π μ°κ²°λ μν¬μ€νμ΄μ€
μ΄ μ ν리μΌμ΄μ μ λ€μ κ²½λ‘μ μ€ν 리λ₯Ό ν¬ν¨ν©λλ€:
../src/**/*.mdx
../src/**/*.stories.@(js|jsx|mjs|ts|tsx)
../../../packages/react-ui/src/**/*.stories.@(js|jsx|mjs|ts|tsx)
β¬οΈ μ€μΉ λ°©λ²
pnpm install
βΆοΈ Storybook μ€ν
μλμ λͺ λ Ήμ΄λ₯Ό μ€νν νμ http://localhost:6006βμμ Storybookμ νμΈν μ μμ΅λλ€.
pnpm run dev
π¦ λΉλ λ° λ°°ν¬
pnpm run build
λΉλ ν, storybook-static
λλ ν 리μ μ μ νμΌμ΄ μμ±λ©λλ€. μ΄ λλ ν 리λ₯Ό NGINX λ± μΉ μλ²μ λ°°ν¬ν μ μμ΅λλ€.
π§ͺ ν μ€νΈ μ€ν
pnpm run test:storybook
μ΄ λͺ
λ Ήμ΄λ Storybookμ μ κ·Όμ±(a11y) ν
μ€νΈλ₯Ό μ€νν©λλ€. ν
μ€νΈ κ²°κ³Όλ JUnit ν¬λ§·μΌλ‘ test-results/
λλ ν 리μ μ μ₯λ©λλ€.