Skip to main content
HMR ์‚ฌ์šฉ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ์‹ค์ „ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ

์ƒํ™ฉ

์ €์žฅํ–ˆ์ง€๋งŒ API ํ˜ธ์ถœ ์‹œ ์—ฌ์ „ํžˆ isActive is not a function ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์›์ธ 1: ์ •์  Import ์‚ฌ์šฉ

์–ด๋”˜๊ฐ€์—์„œ UserModel์„ ์ •์ ์œผ๋กœ importํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ํ™•์ธ ๋ฐฉ๋ฒ•:
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋™์  import๋กœ ๋ณ€๊ฒฝ
Sonamu์˜ Syncer๋Š” Entity ๊ธฐ๋ฐ˜ ํŒŒ์ผ๋“ค์„ ์ž๋™์œผ๋กœ ๋™์  importํ•˜๋ฏ€๋กœ, ์ผ๋ฐ˜์ ์ธ Model/API ํŒŒ์ผ์—์„œ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ปค์Šคํ…€ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์›์ธ 2: ์ฝ˜์†”์— ์—๋Ÿฌ๊ฐ€ ์ˆจ์–ด์žˆ์Œ

HMR ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ ๋†“์ณค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ๋ฐฉ๋ฒ•: ํ„ฐ๋ฏธ๋„์„ ์Šคํฌ๋กคํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ:
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์˜ ํŒŒ์ผ๊ณผ ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์›์ธ 3: ์บ์‹œ๊ฐ€ ๊ผฌ์ž„

๋“œ๋ฌผ์ง€๋งŒ ESM ์บ์‹œ๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์„œ๋ฒ„ ์žฌ์‹œ์ž‘

โ€File not imported dynamicallyโ€ ์—๋Ÿฌ

์ƒํ™ฉ

์›์ธ

Boundary ํŒŒ์ผ(user.model.ts)์ด ์–ด๋”˜๊ฐ€์—์„œ ์ •์  import๋กœ ๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ํ•ด๊ฒฐ

์˜ต์…˜ 1: ์ •์  import๋ฅผ ๋™์  import๋กœ ๋ณ€๊ฒฝ (๊ถŒ์žฅ) ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์— ๋‚˜์˜จ ํŒŒ์ผ์„ ์ฐพ์•„์„œ:
์˜ต์…˜ 2: ํ•ด๋‹น ํŒŒ์ผ์„ Boundary์—์„œ ์ œ์™ธ ์ •๋ง ๋™์  import๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ:
์˜ต์…˜ 3: ์—๋Ÿฌ๋ฅผ ๋ฌด์‹œ (๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)
์˜ต์…˜ 3์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ์˜ HMR์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์ด ํฌ๊ฒŒ ๋–จ์–ด์ง€๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌ๋กœ๋“œ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ฆ๊ฐ€

์ƒํ™ฉ

์›์ธ

์ด์ „ ๋ชจ๋“ˆ์˜ ๋ฆฌ์†Œ์Šค(ํƒ€์ด๋จธ, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ, ์—ฐ๊ฒฐ ๋“ฑ)๊ฐ€ ์ •๋ฆฌ๋˜์ง€ ์•Š์•„ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธ ๋ฐฉ๋ฒ•:

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

import.meta.hot.dispose()๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค: ์˜ˆ์‹œ 1: ํƒ€์ด๋จธ
์˜ˆ์‹œ 2: WebSocket
์˜ˆ์‹œ 3: ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ
์˜ˆ์‹œ 4: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€

API๊ฐ€ ์ค‘๋ณต ๋“ฑ๋ก๋จ

์ƒํ™ฉ

์„œ๋ฒ„ ๋กœ๊ทธ์— ๊ฐ™์€ API๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์›์ธ

Model ํŒŒ์ผ ์žฌ๋กœ๋“œ ์‹œ ๊ธฐ์กด API๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ™•์ธ

Syncer ๋กœ๊ทธ์—์„œ API ์ œ๊ฑฐ ์—ฌ๋ถ€ ํ™•์ธ:

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ผ๋ฐ˜์ ์œผ๋กœ Syncer๊ฐ€ ์ž๋™ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ๊ณ„์†๋˜๋ฉด: 1. ์„œ๋ฒ„ ์žฌ์‹œ์ž‘
2. Syncer ๋กœ์ง ํ™•์ธ (๋“œ๋ฌธ ๊ฒฝ์šฐ)
์ด ๋กœ์ง์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Sonamu ๋ฒ„๊ทธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub Issues์— ๋ณด๊ณ ํ•ด์ฃผ์„ธ์š”.

์ˆœํ™˜ ์˜์กด์„ฑ ๋ฌธ์ œ

์ƒํ™ฉ

HMR์ด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๊ฑฐ๋‚˜ ์ผ๋ถ€ ๋ชจ๋“ˆ์ด ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์›์ธ

Model ๊ฐ„ ์ˆœํ™˜ ์ฐธ์กฐ:

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์˜ต์…˜ 1: ํƒ€์ž…๋งŒ import (๊ถŒ์žฅ)
์˜ต์…˜ 2: ๊ณตํ†ต ํƒ€์ž… ํŒŒ์ผ ๋ถ„๋ฆฌ
์˜ต์…˜ 3: ์˜์กด์„ฑ ๋ฐฉํ–ฅ ์žฌ์„ค๊ณ„

ํŠน์ • ํŒŒ์ผ๋งŒ HMR์ด ์•ˆ ๋จ

์ƒํ™ฉ

์›์ธ 1: Boundary ํŒจํ„ด์— ๋งค์นญ๋˜์ง€ ์•Š์Œ

ํ™•์ธ:
ํ•ด๊ฒฐ:

์›์ธ 2: ํŒŒ์ผ์ด import๋˜์ง€ ์•Š์Œ

HMR์€ ์‹ค์ œ๋กœ import๋œ ํŒŒ์ผ๋งŒ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธ:
ํ•ด๊ฒฐ: ํ•ด๋‹น ํŒŒ์ผ์„ ์–ด๋”˜๊ฐ€์—์„œ importํ•˜๊ฑฐ๋‚˜, ํ•„์š” ์—†๋‹ค๋ฉด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

SSR ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ์žฌ๋กœ๋“œ ์•ˆ ๋จ

์ƒํ™ฉ

์›์ธ

SSR ํŒŒ์ผ์€ ํŠน๋ณ„ํžˆ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ

Syncer๊ฐ€ SSR ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ์ˆ˜๋™ ์žฌ๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ:
๋˜๋Š” ์ฝ”๋“œ์—์„œ:

HMR์ด ๋„ˆ๋ฌด ๋А๋ฆผ

์ƒํ™ฉ

์›์ธ

์˜์กด์„ฑ ํŠธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฑฐ๋‚˜ ๋„“์–ด์„œ ๋งŽ์€ ํŒŒ์ผ์ด ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค. ํ™•์ธ:

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. import ์ตœ์†Œํ™”
2. lodash ๋“ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import ์ตœ์ ํ™”
3. Boundary ๋ฒ”์œ„ ์ถ•์†Œ

๋””๋ฒ„๊น… ํŒ

HMR ๋กœ๊ทธ ํ™œ์„ฑํ™”

์ƒ์„ธํ•œ HMR ๋™์ž‘์„ ํ™•์ธํ•˜๋ ค๋ฉด:
์ถœ๋ ฅ ์˜ˆ์‹œ:

์˜์กด์„ฑ ํŠธ๋ฆฌ ํ™•์ธ

๋ฌดํšจํ™”๋œ ํŒŒ์ผ ์ถ”์ 

Syncer๊ฐ€ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ์ฃผ์˜๊นŠ๊ฒŒ ํ™•์ธ:

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

๋งˆ์ง€๋ง‰ ์ˆ˜๋‹จ: ์™„์ „ ์žฌ์‹œ์ž‘

๋ชจ๋“  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ:

๋„์›€ ์š”์ฒญํ•˜๊ธฐ

์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด:

1. GitHub Issues์— ๋ณด๊ณ ํ•˜์„ธ์š”

์•„๋ž˜ ๋งํฌ์—์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”: https://github.com/cartanova-ai/sonamu/issues

2. ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์ฃผ์„ธ์š”

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋‹ค์Œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”:
  • Sonamu ๋ฒ„์ „ (package.json)
  • Node.js ๋ฒ„์ „ (node -v)
  • ๋ฐœ์ƒํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€
  • ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ์˜ˆ์ œ
  • HMR ๋กœ๊ทธ (DEBUG=hmr-hook:* pnpm dev)

3. ํŒŒ์ผ ๊ตฌ์กฐ ์˜ˆ์‹œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•ด์ฃผ์„ธ์š”:
์˜ˆ์‹œ ์„ค๋ช…์„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”:
์ด๋ ‡๊ฒŒ ์ƒ์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋น ๋ฅธ ๋‹ต๋ณ€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!