๋‹ด๊ณฐ๋†
minkyung.dev
๋‹ด๊ณฐ๋†
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (40)
    • ๐ŸŽ€ ํ”„๋กœ์ ํŠธ (6)
      • ์ธ์‚ฌ์ดํŠธ์•„์›ƒ (2)
      • ์บก์Šคํ†ค (2)
      • ์ž๋ฆฌ์–ด๋•Œ (1)
    • ๐Ÿ‘ฉ‍๐ŸŽค ํ”„๋ก ํŠธ์—”๋“œ (22)
      • react (5)
      • nextjs (4)
      • typescript (3)
      • javascript (4)
      • html (4)
      • css (2)
    • ๐Ÿงฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (2)
      • leetcode (1)
      • programmers (0)
    • ๐Ÿง  CS (1)
    • ๐ŸŽ ํšŒ๊ณ  (2)
    • private (0)
    • ๐Ÿง‘‍๐ŸŽค์ด์ง (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ธํ”„๋Ÿฐ
  • react
  • leetcode
  • HTML
  • react-router
  • ๋””ํ”„๋งŒ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • vsCode
  • ESLint
  • github
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • javascript
  • ์ธํ”„๋ŸฐX๋””ํ”„๋งŒ
  • Django

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๋‹ด๊ณฐ๋†

minkyung.dev

Chromatic์œผ๋กœ Storybook ์ง€์†์  ๋ฐฐํฌํ•˜๊ธฐ (Github Actions)
๐ŸŽ€ ํ”„๋กœ์ ํŠธ/์ž๋ฆฌ์–ด๋•Œ

Chromatic์œผ๋กœ Storybook ์ง€์†์  ๋ฐฐํฌํ•˜๊ธฐ (Github Actions)

2023. 3. 6. 23:43
728x90
๋ฐ˜์‘ํ˜•

TL;DR

1. ์Šคํ† ๋ฆฌ๋ถ์„ ๋„์ž…ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ
2. chromatic์œผ๋กœ ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌํ•˜๊ธฐ
3. Github Actions๋ฅผ ์ด์šฉํ•ด Pull Reqeust์—์„œ ๋ฐ”๋กœ ์ปดํฌ๋„ŒํŠธ ํ™•์ธํ•˜๊ธฐ

 

์Šคํ† ๋ฆฌ๋ถ์„ ๋„์ž…ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ

ํ˜‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๋“ค์ด PR๋กœ ์˜ฌ๋ผ์˜ค๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ์ƒ๊ธด ์ปดํฌ๋„ŒํŠธ์ธ๋ฐ?

PR์„ ์—ด์‹ฌํžˆ ์ž‘์„ฑํ•˜๋”๋ผ๋„ ์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์‰ฝ๊ฒŒ ๋จธ๋ฆฌ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€, PR์„ ์—ด์‹ฌํžˆ ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งค๋ฒˆ ๊ผผ๊ผผํžˆ ์ž‘์„ฑํ•ด์•ผํ•˜๊ณ  PR์„ ์ฝ๋Š” ๊ฐœ๋ฐœ์ž๋Š” ๋˜ ์‹ ๊ฒฝ์จ์„œ ์ฝ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋†’์€ ์†Œํ†ต ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งค๋ฒˆ pull์„ ๋ฐ›์•„์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์–ด๋–ค UI์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ์†์ˆ˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์Šคํ† ๋ฆฌ๋ถ์„ ๋„์ž…ํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

์Šคํ† ๋ฆฌ๋ถ ๋„์ž… ์ด์ „์˜ ๋ฌธ์ œ์ 

1. ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์–ด๋ ค์›€
2. PR์„ ๊ผผ๊ผผํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์ฝ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋†’์€ ์†Œํ†ต ๋น„์šฉ
3. ์ปดํฌ๋„ŒํŠธ์˜ UI์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ง์ ‘ ์‹คํ–‰ํ•ด๋ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ

 

chromatic์œผ๋กœ ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌํ•˜๊ธฐ

chromatic?

์Šคํ† ๋ฆฌ๋ถ ๊ด€๋ฆฌ์ž๊ฐ€ ๋งŒ๋“  ๋ฌด๋ฃŒ ๋ฐฐํฌ ์„œ๋น„์Šค๋กœ ์Šคํ† ๋ฆฌ๋ถ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vercel, netflify๋กœ๋„ ์Šคํ† ๋ฆฌ๋ถ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ chromatic์€ ์ปดํฌ๋„ŒํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ๋นŒ๋“œ ๊ณผ์ • ๋“ฑ์„ ์Šคํ† ๋ฆฌ๋ถ์— ์ตœ์ ํ™”ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— chromatic์— ๋ฐฐํฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

1. chromatic ๊ฐ€์ž…ํ•˜๊ธฐ

Github๋กœ ์—ฐ๋™ํ•ด์„œ chromatic์— ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://www.chromatic.com/

 

Automatically review, test, and document Storybook

We make tools for frontend developers that automate the Storybook workflow. Chromatic helps you gather UI feedback, test across browsers, and generate usage docs, all in one shared cloud workspace.

www.chromatic.com

 

Choose Github Repo ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. ์„ค์น˜ํ•˜๊ธฐ

๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€ ๋™๊ธฐํ™”๊ฐ€ ๋๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.

1. chromatic์„ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

npm install --save-dev chromatic

2. ์Šคํ† ๋ฆฌ๋ถ์„ chromatic์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

npx chromatic --project-token <your-project-token>

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์Šคํ† ๋ฆฌ๋ถ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐฐํฌ๋œ ์Šคํ† ๋ฆฌ๋ถ

 

์ด๋ฅผ ํ†ตํ•ด ์Šคํ† ๋ฆฌ๋ถ ๋„์ž… ์ด์ „์˜ ๋ฌธ์ œ์  ์ค‘ 1๋ฒˆ๊ณผ 2๋ฒˆ์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ๋ถ ๋„์ž… ์ด์ „์˜ ๋ฌธ์ œ์ 

1. ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์–ด๋ ค์›€
2. PR์„ ๊ผผ๊ผผํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์ฝ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋†’์€ ์†Œํ†ต ๋น„์šฉ
3. ์ปดํฌ๋„ŒํŠธ์˜ UI์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ง์ ‘ ์‹คํ–‰ํ•ด๋ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ

Pull Request์—์„œ ์ปดํฌ๋„ŒํŠธ UI๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์„๊นŒ?

ํ•˜์ง€๋งŒ ์•„์ง ์Šคํ† ๋ฆฌ๋ถ ๋„์ž… ์ด์ „์˜ ๋ฌธ์ œ์  ์ค‘ ๋งˆ์ง€๋ง‰ ๋ฌธ์ œ์ ์ธ ์ปดํฌ๋„ŒํŠธ์˜ UI์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ง์ ‘ ์‹คํ–‰ํ•ด๋ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์Šคํ† ๋ฆฌ๋ถ์„ ๋„์ž…ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ๋ฅผ pull ๋ฐ›๊ณ  → ์Šคํ† ๋ฆฌ๋ถ์„ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๊ณ  → ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ

์–ด์ฉ์ง€ ์Šคํ† ๋ฆฌ๋ถ์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

 

Github Action ์ถ”๊ฐ€ํ•˜๊ธฐ

PR๋กœ ์˜ฌ๋ผ์˜จ ์ปดํฌ๋„ŒํŠธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐฐํฌ๋œ ํ™˜๊ฒฝ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก Github Action์„ ์ถ”๊ฐ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํฌ๋กœ๋งˆํ‹ฑ ๋ช…๋ น์–ด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์ด ํ„ฐ๋ฏธ๋„์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
Github Action์œผ๋กœ CI๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— package.json์—์„œ chromatic ๋ช…๋ น์–ด๋Š” ์ œ๊ฑฐํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

1. Chromatic ํ† ํฐ ์„ค์ •ํ•˜๊ธฐ

๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ Settings > Secrets > New repository secret์— ํฌ๋กœ๋งˆํ‹ฑ ํ† ํฐ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

Settings > Secrets > New repository secret

yml ํŒŒ์ผ์— ๋„ฃ์–ด์ค„ ์ด๋ฆ„์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2. .github/workflows/storybook.yml ์ƒ์„ฑ

  • develop ๋ธŒ๋žœ์น˜์— PR์ด ์˜ฌ๋ผ๊ฐ€๋ฉด ์Šคํ† ๋ฆฌ๋ถ์ด ๋ฐฐํฌ๋˜๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
name: Storybook Deployment
run-name: ${{ github.actor }}์˜ ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌ
on:
  pull_request:
    branches:
      - develop
jobs:
  storybook:
    runs-on: ubuntu-20.04
    outputs:
      status: ${{ job.status }}
    steps:
      - name: checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: cache dependencies
        id: cache
        uses: actions/cache@v3
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}-storybook

      - name: depedency install
        if: steps.cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: publish to chromatic
        id: chromatic
        uses: chromaui/action@v1
        with:
          projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
          token: ${{ secrets.GITHUB_TOKEN }}

 

 

์ถ”๊ฐ€๋กœ PR ์ฝ”๋ฉ˜ํŠธ๋กœ ๋ฐ”๋กœ ์Šคํ† ๋ฆฌ๋ถ ๋ฐฐํฌ ๋งํฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ก์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

...

jobs:
  storybook:
    runs-on: ubuntu-20.04
    outputs:
      status: ${{ job.status }}
    steps:
    
     ...
     
      - name: comment PR
        uses: thollander/actions-comment-pull-request@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          message: "๐Ÿš€storybook: ${{ steps.chromatic.outputs.storybookUrl }}"

 

์œ„ ์•ก์…˜์„ ์‹คํ–‰ํ•˜๋ฉด develop ๋ธŒ๋žœ์น˜์— PR์ด ์˜ฌ๋ผ๊ฐ€๋ฉด ๊นƒํ—ˆ๋ธŒ ๋ด‡์ด ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒจ์ค๋‹ˆ๋‹ค

์•ก์…˜ ์‹คํ–‰ ์‹œ, ๊นƒํ—ˆ๋ธŒ ๋ด‡์ด PR์— ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ฒจ์ค๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” Workflow permissions๋ฅผ Read and write๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์•ก์…˜์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

Settings > Actions > General

 


์ฐธ๊ณ 

https://storybook.js.org/tutorials/intro-to-storybook/react/ko/deploy/

 

Storybook Tutorials

Learn how to develop UIs with components and design systems. Our in-depth frontend guides are created by Storybook maintainers and peer-reviewed by the open source community.

storybook.js.org

https://www.chromatic.com/docs/github-actions

 

Introduction • Chromatic docs

Chromatic is a cloud based toolchain built around Storybook to help teams develop robust UI components faster, together.

www.chromatic.com

 

728x90
๋ฐ˜์‘ํ˜•
    ๋‹ด๊ณฐ๋†
    ๋‹ด๊ณฐ๋†

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”