Skip to content

Commit

Permalink
Merge pull request #51 from Wannabe-Woowa-Article/lurgi
Browse files Browse the repository at this point in the history
  • Loading branch information
brgndyy authored Aug 22, 2024
2 parents 7a6529b + aa4d4b8 commit 33b92f3
Showing 1 changed file with 179 additions and 0 deletions.
179 changes: 179 additions & 0 deletions Aug/article/Server-Component copy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
## πŸ”— [Storybook 8.2](https://storybook.js.org/blog/storybook-8-2/)

### πŸ—“οΈ λ²ˆμ—­ λ‚ μ§œ: 2024.08.19

### 🧚 λ²ˆμ—­ν•œ 크루: 러기(λ°•μ •μš°)

---

## Storybook 8.2

Storybook은 세계적인 λ””μžμΈ μ‹œμŠ€ν…œ(Carbon, Polaris, Fluent, Lightning λ“±) λ’€μ—μ„œ ν™œμ•½ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ 개발 λ„κ΅¬μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ ν”νžˆ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μž‘μ€ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“œλŠ” 것과 관련이 μžˆλ‹€κ³  μƒκ°λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ UI μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€μ–‘ν•œ 크기와 ν˜•νƒœλ‘œ μ‘΄μž¬ν•©λ‹ˆλ‹€.

Faire, Yoobic, Monday.com의 νŒ€λ“€μ€ Storybook을 μ‡Όν•‘ 카트, λŒ€μ‹œλ³΄λ“œ, μ±„νŒ… μœ„μ ―, 달λ ₯, 전체 νŽ˜μ΄μ§€ λ“±κ³Ό 같은 "μ œν’ˆ UI"λ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€. 이듀은 λ³΅μž‘ν•˜κ³  μƒνƒœλ₯Ό κ°€μ§€λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, 높은 ν’ˆμ§ˆμ˜ ν…ŒμŠ€νŠΈλ₯Ό 톡해 κ°œλ°œνŒ€μ€ μ•ˆμ •μ„±μ„ ν™•λ³΄ν•˜κ³  반볡적으둜 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ μš°λ¦¬λŠ” Storybookμ—μ„œ ν…ŒμŠ€νŠΈ κΈ°λŠ₯을 λ”μš± κ°•ν™”ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 그리고 였늘, μš°λ¦¬λŠ” νƒ€ν˜‘ μ—†λŠ” μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈλ₯Ό ν–₯ν•œ μ—¬μ •μ˜ λ‹€μŒ 단계인 Storybook 8.2λ₯Ό λ°œν‘œν•˜κ²Œ λ˜μ–΄ 맀우 κΈ°μ©λ‹ˆλ‹€.

### Storybook 8.2 μ£Όμš” κΈ°λŠ₯:

- πŸͺ 인기 μžˆλŠ” λ‹€λ₯Έ ν…ŒμŠ€νŠΈ 도ꡬ듀과 λ™λ“±ν•œ μˆ˜μ€€μ˜ μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ ν›…
- 🧳 λ‹€λ₯Έ ν…ŒμŠ€νŠΈ 및 λ¬Έμ„œν™” λ„κ΅¬μ—μ„œλ„ μž¬μ‚¬μš© κ°€λŠ₯ν•œ νœ΄λŒ€ κ°€λŠ₯ν•œ μŠ€ν† λ¦¬
- πŸ“¦ 쒅속성 μΆ©λŒμ„ 쀄이기 μœ„ν•œ νŒ¨ν‚€μ§€ 톡합
- πŸ›Ό μƒˆ μ‚¬μš©μžκ°€ μ‰½κ²Œ 적응할 수 μžˆλ„λ‘ μ˜¨λ³΄λ”© κ³Όμ • κ°„μ†Œν™”
- ✨ 더 λ‚˜μ€ λ¬Έμ„œ μ œκ³΅μ„ μœ„ν•œ μƒˆλ‘­κ²Œ κ°œμ„ λœ μ›Ήμ‚¬μ΄νŠΈ
- πŸ’― 수백 κ°€μ§€μ˜ μΆ”κ°€ κ°œμ„ μ‚¬ν•­

### μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ ν›…

Jest, Vitest, Playwright, Cypress와 같은 μ΅œμ‹  ν…ŒμŠ€νŠΈ 도ꡬ듀은 λͺ¨λ‘ λΉ„μŠ·ν•œ ν…ŒμŠ€νŠΈ ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ¬Έλ²•μ—λŠ” μ•½κ°„μ˜ 차이가 μžˆμ§€λ§Œ, 기본적인 ν…ŒμŠ€νŠΈ 훅은 λͺ¨λ‘ λΉ„μŠ·ν•©λ‹ˆλ‹€.`before/afterAll`, `before/afterEach`, `describe`, `test`.

Storybook은 자체 μŠ€ν† λ¦¬ 문법인 Component Story Format(CSF)을 μ‚¬μš©ν•©λ‹ˆλ‹€. CSFλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€μ–‘ν•œ μƒνƒœμ—μ„œ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ λ³΄μ—¬μ£ΌλŠ” κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆλ‹€. Storybook 6.4μ—μ„œλŠ” μƒν˜Έμž‘μš©κ³Ό 검증을 μœ„ν•΄ play κΈ°λŠ₯을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€.

```jsx
// ToolbarMenu.stories.js
import { fn, expect } from "@storybook/test";
import { ToolbarMenu } from "./ToolbarMenu";

export default { component: ToolbarMenu };
export const Disabled = {
args: { disabled: true, onSelected: fn() },
play: async ({ canvas, args }) => {
await userEvent.click(canvas.getByRole("button"));
expect(args.onSelected).not.toHaveBeenCalled();
},
};
```

이 play κΈ°λŠ₯을 톡해 Storybookμ—μ„œλ„ λ§Žμ€ Jasmine μŠ€νƒ€μΌμ˜ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό λ‹€ μ§€μ›ν•˜λŠ” 것은 μ•„λ‹ˆμ—ˆκ³ , λ‹€λ₯Έ ν…ŒμŠ€νŠΈ λ„κ΅¬μ—μ„œ μ „ν™˜ν•΄ 온 κ°œλ°œμžλ“€μ—κ²ŒλŠ” CSF 문법이 μ΅μˆ™ν•˜μ§€ μ•Šμ„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이제 Storybook 8.2μ—μ„œλŠ” `before` ν›…(클린업 ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜μ—¬ `after` ν›…μœΌλ‘œ μ‚¬μš©ν•  수 있음)κ³Ό React, Vue 3, Svelte용 `play`의 선택적 `mount` 인수λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ΄μ œλŠ” β€˜Arrange’, β€˜Act’, β€˜Assert’λ₯Ό ν•˜λ‚˜μ˜ play ν•¨μˆ˜ λ‚΄μ—μ„œ ν•  수 μžˆμ–΄, Jasmine μŠ€νƒ€μΌ 도ꡬ와 λ™μΌν•œ νλ¦„μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

```jsx
// ToolbarMenu.stories.jsx
import { fn, expect } from "@storybook/test";
import { ToolbarMenu } from "./ToolbarMenu";

export default {
component: ToolbarMenu,
};

export const Disabled = {
args: { disabled: true, onSelected: fn() },
play: async ({ mount, args }) => {
// Arrange
const items = await loadItems(10);
const canvas = await mount(<ToolbarMenu items={items} />);

// Act
await userEvent.click(canvas.getByRole("button"));

// Assert
expect(canvas.getAllByRole("button").length).toBe(items.length);
expect(args.onSelected).not.toHaveBeenCalled();
},
};
```

이번 λ³€ν™”λŠ” 기쑴의 μŠ€ν† λ¦¬μ™€ ν˜Έν™˜λ˜λ―€λ‘œ λͺ¨λ“  κΈ°μ‘΄ μŠ€ν† λ¦¬κ°€ 이전과 λ™μΌν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€. 그리고 μ•”μ‹œμ  마운트λ₯Ό μ‚¬μš©ν•˜λŠ” μŠ€ν† λ¦¬ μž‘μ„± ꢌμž₯ 방식도 κ·ΈλŒ€λ‘œ μœ μ§€λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 더 κ°•λ ₯ν•œ κΈ°λŠ₯이 ν•„μš”ν•  λ•Œ, 이제 μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ 훅이 μ€€λΉ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

β€œμ²˜μŒμœΌλ‘œ @storybookjs의 ν”Œλ ˆμ΄ ν…ŒμŠ€νŠΈλ₯Ό μ‚¬μš©ν–ˆμ–΄μš”. 정말 λ†€λΌμ›Œμš”! μ΄λ ‡κ²Œ λΉ λ₯΄κ²Œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œ 적이 μ—†μ–΄μš”!!” β€” @brechtilliet

λ¬Έμ„œλ₯Ό ν™•μΈν•˜μ‹œκ³ , 곧 λ‚˜μ˜¬ 전체 κΈ°λŠ₯ λ°œν‘œμ™€ 더 λ§Žμ€ 후크 예제λ₯Ό κΈ°λŒ€ν•΄ μ£Όμ„Έμš”!

### μž¬μ‚¬μš© κ°€λŠ₯ν•œ μŠ€ν† λ¦¬ (Portabel Stories)

Storybook은 μ»΄ν¬λ„ŒνŠΈλ₯Ό 반볡적으둜 κ°œλ°œν•˜κ³ , λ¬Έμ„œν™”ν•˜κ³ , ν…ŒμŠ€νŠΈν•˜λŠ” 데 졜고의 λ„κ΅¬μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ JS μƒνƒœκ³„μ—λŠ” ν›Œλ₯­ν•œ 도ꡬ듀이 많고, μ—¬λŸ¬λΆ„μ΄ μ›ν•˜λŠ” λ„κ΅¬μ—μ„œ μŠ€ν† λ¦¬λ₯Ό ν™œμš©ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

8.1μ—μ„œλŠ” Playwright μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ "Portable Story"λ₯Ό μ œν•œμ μœΌλ‘œ μ œκ³΅ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. 이제 8.2μ—μ„œλŠ” React 및 Vue 3용 νœ΄λŒ€ κ°€λŠ₯ν•œ μŠ€ν† λ¦¬λ₯Ό μ™„μ„±ν•˜κ³ , μ‹€ν—˜μ μœΌλ‘œ Svelte 지원도 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μŠ€ν† λ¦¬λ₯Ό ν”„λ ˆμž„μ›Œν¬μ— λ§žλŠ” λ„€μ΄ν‹°λΈŒ μ»΄ν¬λ„ŒνŠΈλ‘œ λ³€ν™˜ν•˜μ—¬, ν•„μš”ν•œ ν…ŒμŠ€νŠΈ 훅을 ν¬ν•¨ν•œ μΆ”κ°€ μ½”λ“œμ™€ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

```jsx
// Button.test.js
import { test, expect } from "vitest";
import { screen } from "@testing-library/react";
import { composeStories } from "@storybook/react";

// λͺ¨λ“  μŠ€ν† λ¦¬μ™€ μ»΄ν¬λ„ŒνŠΈ 주석을 μŠ€ν† λ¦¬ νŒŒμΌμ—μ„œ κ°€μ Έμ˜€κΈ°
import * as stories from "./Button.stories";

// λ°˜ν™˜λœ μ»΄ν¬λ„ŒνŠΈλŠ” μŠ€ν† λ¦¬μ™€ 1:1둜 λ§€ν•‘λ˜λ©°,
// μŠ€ν† λ¦¬, 메타, ν”„λ‘œμ νŠΈ μˆ˜μ€€μ˜ λͺ¨λ“  주석을 ν¬ν•¨ν•©λ‹ˆλ‹€.
const { Primary, Secondary } = composeStories(stories);

test("κΈ°λ³Έ 인수둜 κΈ°λ³Έ λ²„νŠΌ λ Œλ”λ§", async () => {
/**
* μŠ€ν† λ¦¬ 생λͺ…μ£ΌκΈ°λ₯Ό 톡해 μ‹€ν–‰λ©λ‹ˆλ‹€:
* 1. λ‘œλ”
* 2. beforeEach
* 3. λ°μ½”λ ˆμ΄ν„° λ“± 주석과 ν•¨κ»˜ λ Œλ”λ§
* 4. play ν•¨μˆ˜ (mount μ‚¬μš© μ‹œ 포함)
* 5. cleanup (beforeEach, hooksμ—μ„œ)
*/
await Primary.play();
});
```

이 API 외에도, Vitest 및 Jestμ—μ„œ μŠ€ν† λ¦¬λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•œ μΆ”κ°€ λ¬Έμ„œλ₯Ό μ€€λΉ„ν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œλ₯Ό ν™•μΈν•΄λ³΄μ„Έμš”, 그리고 곧 전체 κΈ°λŠ₯ λ°œν‘œκ°€ μžˆμ„ μ˜ˆμ •μž…λ‹ˆλ‹€.

### ν†΅ν•©λœ 쒅속성 관리

State of JS μ„€λ¬Έμ‘°μ‚¬μ—μ„œ 20,000λͺ… μ΄μƒμ˜ κ°œλ°œμžκ°€ μ‘λ‹΅ν•œ κ²°κ³Ό, JS μƒνƒœκ³„μ˜ 흐름을 νŒŒμ•…ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 2022λ…„μ—λŠ” μ•½κ°„ ν•˜λ½μ„Έμ˜€μ§€λ§Œ, Storybook κ°œμ„ μ„ μœ„ν•œ 우리의 λ…Έλ ₯은 2023년에 빛을 λ°œν–ˆμŠ΅λ‹ˆλ‹€. 이번 μ„€λ¬Έμ‘°μ‚¬μ—μ„œ κ°€μž₯ 큰 λΆˆλ§Œμ€ 쒅속성 관리(κ³Όλ„ν•˜κ²Œ 큰 μ„€μΉ˜ 크기, κΈ΄ μ„€μΉ˜ μ‹œκ°„, 버전 좩돌 λ“±)μ—ˆμŠ΅λ‹ˆλ‹€.

8.2μ—μ„œλŠ” μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. 18개의 νŒ¨ν‚€μ§€λ₯Ό ν•˜λ‚˜μ˜ 핡심 νŒ¨ν‚€μ§€(storybook)와 λΉŒλ”/λ Œλ”λŸ¬/μ• λ“œμ˜¨μ„ μœ„ν•œ μœ„μ„± νŒ¨ν‚€μ§€λ‘œ ν†΅ν•©ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Vite의 νŒ¨ν‚€μ§€ ꡬ쑰λ₯Ό λ”°λ₯΄λŠ” λΉ„νŒŒκ΄΄μ  λ³€ν™”μž…λ‹ˆλ‹€. λ˜ν•œ Storybook의 λ§Žμ€ 쒅속성을 λ²ˆλ“€λ§ν•˜μ—¬ 버전 μΆ©λŒμ„ λ°©μ§€ν–ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” λ˜ν•œ Ecosystem Performance(e18e) ν”„λ‘œμ νŠΈμ˜ 리더인 James Garbutt와 ν˜‘λ ₯ν•˜μ—¬ μœ ν‹Έλ¦¬ν‹° 라이브러리λ₯Ό 더 μž‘κ³  λΉ λ₯΄λ©° ν˜„λŒ€μ μΈ λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν–ˆμŠ΅λ‹ˆλ‹€(μ•ˆλ…• doctrine! πŸ‘‹).

이 μž‘μ—…μ€ 아직 초기 λ‹¨κ³„μ΄μ§€λ§Œ, ν˜„μž¬κΉŒμ§€ μ„€μΉ˜ 크기와 μ‹œκ°„μ„ μ•½ 20% μ€„μ˜€μŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ 톡합 κ΅¬μ‘°λŠ” ν–₯ν›„ μ΅œμ ν™”λ₯Ό μœ„ν•œ 발판이 λ˜μ–΄, 8.3 및 κ·Έ μ΄ν›„μ—λŠ” 더 큰 κ°œμ„ μ„ κΈ°λŒ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

### κ°„μ†Œν™”λœ μ˜¨λ³΄λ”©

또 λ‹€λ₯Έ μ€‘μš”ν•œ 뢀뢄은 μ˜¨λ³΄λ”© κ²½ν—˜μž…λ‹ˆλ‹€. 맀주 수천 λͺ…μ˜ κ°œλ°œμžκ°€ Storybook을 처음 μ‚¬μš©ν•΄λ³΄μ§€λ§Œ, μ„€μΉ˜λΆ€ν„° μ„±κ³΅μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 데 이λ₯΄κΈ°κΉŒμ§€λŠ” μ—¬λŸ¬ λ‚œκ΄€μ΄ μžˆμŠ΅λ‹ˆλ‹€. Storybook 8.2μ—μ„œλŠ” μ˜¨λ³΄λ”© κ²½ν—˜μ„ μƒˆλ‘­κ²Œ κ°œμ„ ν•˜κ³ , Reactμ—μ„œ Vue 3 및 Angular둜 ν™•μž₯ν•˜μ—¬ μ‚¬μš©μžλ₯Ό μ˜¬λ°”λ₯Έ λ°©ν–₯으둜 μ•ˆλ‚΄ν•  수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.

이 κ²½ν—˜μ€ 8.x λ²„μ „μ—μ„œ 더 ν™•μž₯λ˜μ–΄, ν”„λ‘œμ νŠΈμ—μ„œ Storybook을 더 μ‰½κ²Œ μ„€μ •ν•  수 있게 ν•  κ²ƒμž…λ‹ˆλ‹€.

### μƒˆλ‘­κ²Œ κ°œμ„ λœ λ¬Έμ„œ μ‚¬μ΄νŠΈ

Storybook은 μƒˆλ‘­κ²Œ 개편된 λ¬Έμ„œ μ‚¬μ΄νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€! 이 μ‚¬μ΄νŠΈμ—λŠ” λ‹€μŒκ³Ό 같은 λ‚΄μš©μ΄ ν¬ν•¨λ©λ‹ˆλ‹€:

- ✨ Storybook의 λ‹€μ–‘ν•œ κΈ°λŠ₯을 잘 λ³΄μ—¬μ£ΌλŠ” μƒˆλ‘œμš΄ λ°˜μ‘ν˜• μ• λ‹ˆλ©”μ΄μ…˜κ³Ό ν•¨κ»˜ν•œ μƒˆλ‘œμš΄ ν™ˆνŽ˜μ΄μ§€
- πŸ“š Next.js, SvelteKit λ“± 각 ν”„λ ˆμž„μ›Œν¬λ³„ μ „μš© λžœλ”© νŽ˜μ΄μ§€κ°€ μžˆλŠ” μƒˆλ‘œμš΄ λ¬Έμ„œ ν™ˆ
- πŸŒ™ μ‹œμŠ€ν…œ 섀정에 따라 μžλ™μœΌλ‘œ μ „ν™˜λ˜λŠ” λ¬Έμ„œμ˜ 라이트/닀크 λͺ¨λ“œ
- 🧱 더 λΉ λ₯Έ κ°œμ„ μ„ μœ„ν•œ μΆ”κ°€ μž‘μ—…μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 기초 μž‘μ—…

### 수백 κ°€μ§€μ˜ μΆ”κ°€ κ°œμ„ μ‚¬ν•­

μœ„μ˜ κΈ°λŠ₯ 외에도, λͺ¨λ“  Storybook λ¦΄λ¦¬μŠ€μ—λŠ” λͺ¨λ“  μˆ˜μ€€μ—μ„œ 수백 κ°€μ§€μ˜ κ°œμ„ μ‚¬ν•­κ³Ό 버그 μˆ˜μ •μ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λͺ‡ 가지 ν•˜μ΄λΌμ΄νŠΈ:

- βœ… Webpack5/Vite: μ†ŒμŠ€ 맡 μˆ˜μ • (#27171, @valentinpalkovicμ—κ²Œ 감사)
- βœ… Angular: μ†ŒμŠ€ 미리보기의 ν˜•μ‹ ꡬ성 ν—ˆμš© (#28305, @64BitAsuraμ—κ²Œ 감사)
- βœ… CLI: init에 --no-dev μ˜΅μ…˜ μΆ”κ°€ (#26918, @fastfrwrdμ—κ²Œ 감사)
- βœ… CLI: μƒˆ ν”„λ‘œμ νŠΈμ— @storybook/addon-svelte-csf 포함 (#27070, @benmccannμ—κ²Œ 감사)
- βœ… Core: watchStorySpecifiers둜 μΈν•œ μ‹œμž‘ 지연 μˆ˜μ • (#27016, @heyimalexμ—κ²Œ 감사)
- βœ… Vue3: μƒˆλ‘œμš΄ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 뢈일치 컴파일 μ‹œκ°„ ν”Œλž˜κ·Έ ν™œμ„±ν™” (#27192, @Cherryμ—κ²Œ 감사)

### μ§€κΈˆ λ°”λ‘œ μ‚¬μš©ν•΄λ³΄μ„Έμš”!

Storybook 8.2λŠ” μ˜€λŠ˜λΆ€ν„° μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€. μƒˆ ν”„λ‘œμ νŠΈμ—μ„œ μ‹œλ„ν•΄λ³΄μ„Έμš”

```
npx storybook@latest init
```

λ˜λŠ” κΈ°μ‘΄ ν”„λ‘œμ νŠΈλ₯Ό μ—…κ·Έλ ˆμ΄λ“œν•˜μ„Έμš”

```
npx storybook@latest upgrade
```

λ§Œμ•½ 7.x λ²„μ „μ—μ„œ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” 경우, 도움이 될 κ°€μ΄λ“œλ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이전 λ²„μ „μ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” κ°€μ΄λ“œλ„ μžˆμŠ΅λ‹ˆλ‹€.

### λ‹€μŒ 단계

μš°λ¦¬λŠ” 8.3을 μœ„ν•΄ μ—¬λŸ¬ 가지λ₯Ό μ€€λΉ„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€:

- 번개처럼 λΉ λ₯Έ μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ Vitestμ™€μ˜ 톡합
- Next.js ν”„λ ˆμž„μ›Œν¬μ— Vite 지원 μΆ”κ°€λ‘œ Vitest ν˜Έν™˜μ„±κ³Ό 더 λ‚˜μ€ 개발 κ²½ν—˜ 제곡
- μƒν˜Έμž‘μš©ν˜• μ‚¬μ΄λ“œλ°” 필터링을 μœ„ν•œ UIκ°€ ν¬ν•¨λœ μŠ€ν† λ¦¬ νƒœκ·Έ
- μ„€μΉ˜ 크기λ₯Ό λ”μš± 쀄이기(8.3-alphaλ₯Ό μ‹œλ„ν•΄λ³΄μ„Έμš”, 40% μΆ”κ°€ κ°μ†Œ!)
- νŠΉμ • 뷰포트, ν…Œλ§ˆ, λ‘œμΌ€μΌμ— 맞좘 μŠ€ν† λ¦¬ μž‘μ„±μ˜ μƒˆλ‘œμš΄ 방식

0 comments on commit 33b92f3

Please sign in to comment.