๐Ÿ”ข SemVer ์™„์ „ ์ •๋ณต โ€” ๋ฒ„์ „ ๊ธฐํ˜ธ์˜ ์ง„์งœ ์˜๋ฏธ์™€ ํ•จ์ •

2026๋…„ 3์›” 5์ผ ์ˆ˜์ •๋จ

๐Ÿ“‹ ๊ฐœ์š”

^, ~, *, ์ •ํ™•ํ•œ ๋ฒ„์ „... ๋ฒ„์ „ ๋ฒ”์œ„ ๊ธฐํ˜ธ๋“ค์ด ์‹ค์ œ๋กœ ํ—ˆ์šฉํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•œ๋‹ค. ์‹ ์ž…์ด ๊ฐ€์žฅ ๋งŽ์ด ํ‹€๋ฆฌ๋Š” SemVer ํ•จ์ •๋“ค์„ ์ง‘์ค‘ ํ•ด๋ถ€ํ•œ๋‹ค.

๐Ÿ“‹ ๋ชฉ์ฐจ


๐Ÿ“Œ ์ด ๋ฌธ์„œ๋ฅผ ์ฝ๊ธฐ ์ „์—

โฑ๏ธ ์˜ˆ์ƒ ์ฝ๊ธฐ ์‹œ๊ฐ„: 18๋ถ„(์ „์ฒด) / ํ•ต์‹ฌ ํŒŒํŠธ๋งŒ: 8๋ถ„ (๋ฒ”์œ„ ๊ธฐํ˜ธ + ํ•จ์ •)

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ํ๋ฆ„
SemVer ๊ตฌ์กฐ ์ดํ•ด โ†’ ๋ฒ”์œ„ ๊ธฐํ˜ธ ์™„์ „ ์ •๋ณต โ†’ ๋ณตํ•ฉ ๋ฒ”์œ„ โ†’ ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ โ†’ ์‹ค๋ฌด ํ•จ์ • 5๊ฐ€์ง€ โ†’ ์œ ์šฉํ•œ ๋ช…๋ น์–ด

๐ŸŽฏ ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค ์ฝ์œผ๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

  • ^, ~, *, exact, >=, || ์˜ ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ์ฆ‰์‹œ ๋งํ•  ์ˆ˜ ์žˆ๋‹ค
  • ^0.x.x ๊ฐ€ ^1.x.x ์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค
  • npm dist-tag ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์“ฐ๋Š”์ง€ ์ดํ•ดํ•œ๋‹ค
  • npm version patch ๋ช…๋ น์–ด๋กœ ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๊ณ  git ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
  • SemVer ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ธํ•ด ์ƒ๊ธฐ๋Š” ์‚ฌ๊ณ ๋ฅผ ์˜ˆ์ธกํ•˜๊ณ  ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค

๐Ÿ—บ๏ธ ์ด ๋ฌธ์„œ์˜ ๋ฐฐ๊ฒฝ ์„ธ๊ณ„๊ด€: '์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ'

^14.0.0 ๋ฒ„์ „์˜ ํ•จ์ •์— ๋น ์ง„ ์˜์ฒ ๊ณผ ์ด๋ฅผ ๊ฒฝ๊ณ ํ•˜๋Š” ์˜ํ˜ธ
  • ๐Ÿฃ ์˜์ฒ  ( ์‹ ์ž… ): "๋ฆฌ๋“œ ๋‹˜, ์–ด์ œ ๋ฌด์„œ์šด ์ผ์ด ์žˆ์—ˆ์–ด์š”. react-beautiful-dnd ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์ด ์™„์ „ํžˆ ๋ง๊ฐ€์กŒ์–ด์š”. package.json ์— ^14.0.0 ์ด๋ผ๊ณ  ์จ์žˆ์—ˆ๋Š”๋ฐ ์–ด๋А ์ˆœ๊ฐ„ 14.3.0 ์ด ์„ค์น˜๋˜์–ด์žˆ๋”๋ผ๊ณ ์š”. ๊ทธ๊ฒŒ ๋ฌธ์ œ์˜€๋˜ ๊ฑฐ ๋งž์ฃ ? ^ ๋ถ™์ด๋ฉด ๊ทธ๋ƒฅ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฑด๊ฐ€์š”? ๊ทธ๋ฆฌ๊ณ  pnpm ์“ฐ๋Š” ํŒ€์—์„œ๋Š” ~ ๋ฅผ ์“ด๋‹ค๊ณ  ํ•˜๋˜๋ฐ ์ฐจ์ด๊ฐ€ ๋ญ”๊ฐ€์š”?"
  • ๐Ÿฆ ์˜ํ˜ธ ( ๋ฆฌ๋“œ ): "์˜์ฒ  ๋‹˜, ๋ฒ”์ธ์€ ๋‘ ๊ฐ€์ง€์˜ˆ์š”. ์ฒซ์งธ, ^14.0.0 ์ด 14.x.x ์ „์ฒด๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฑธ ๋ชฐ๋ž๋˜ ๊ฒƒ. ๋‘˜์งธ, package-lock.json ์ด ์—†์—ˆ๊ฑฐ๋‚˜ ๋ฌด์‹œ๋๋˜ ๊ฒƒ. ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ 14.3.0 ์—์„œ Breaking Change ๋ฅผ MINOR ๋ฒ„์ „์— ๋„ฃ์€ ๊ฑฐ์˜ˆ์š” โ€” SemVer ์œ„๋ฐ˜์ด์ฃ . ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ๊ฐ™์ด ์•Œ์•„์•ผ ํ•ด์š”."

๐Ÿค” ์™œ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€

์˜์ˆ˜๋„ค ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒ€์ด ๋ผ์ด๋ธŒ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•œ ๋‹ค์Œ ๋‚  ์•„์นจ. ์˜์ฒ ์ด๊ฐ€ ์ถœ๊ทผํ•˜์ž๋งˆ์ž ์Šฌ๋ž™ ์•Œ๋ฆผ์ด ์Ÿ์•„์กŒ๋‹ค. "์Šคํ„ฐ๋”” ๋ชฉ๋ก ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์ด ์•ˆ ๋ผ์š”!"

GitHub Actions ์—์„œ npm install ์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค react-beautiful-dnd@14.3.0 ์ด ์ƒˆ๋กœ ์„ค์น˜๋˜๊ณ  ์žˆ์—ˆ๋‹ค. ^14.0.0 ๋ฒ”์œ„ ์•ˆ์— ์žˆ์œผ๋‹ˆ๊นŒ. ๊ทธ๋Ÿฐ๋ฐ 14.3.0 ๋ฒ„์ „์—์„œ ๋‚ด๋ถ€ ๋™์ž‘์ด ๋ฐ”๋€Œ์–ด ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ๊นจ์ง„ ๊ฒƒ์ด๋‹ค.

๊ฒฐ๋ก : ๋ฒ„์ „ ๊ธฐํ˜ธ์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๋ฅผ ๋ชจ๋ฅด๋ฉด, ๋‚ด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•„๋„ ์–ด๋А ๋‚  ๊ฐ‘์ž๊ธฐ ์„œ๋น„์Šค๊ฐ€ ๋ง๊ฐ€์ง„๋‹ค.


๐Ÿ—๏ธ SemVer ์˜ ๊ตฌ์กฐ โ€” MAJOR.MINOR.PATCH

MAJOR  .  MINOR  .  PATCH  [-prerelease]  [+buildmetadata]
  14   .    3    .    0    -rc.1           +sha.20240101
๋ถ€๋ถ„์–ธ์ œ ์˜ฌ๋ฆฌ๋Š”๊ฐ€์˜ˆ์‹œ
MAJOR์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ (Breaking Change)API ์ด๋ฆ„ ๋ณ€๊ฒฝ, ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ๊ฑฐ
MINORํ•˜์œ„ ํ˜ธํ™˜์„ ์œ ์ง€ํ•˜๋ฉฐ ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€์ƒˆ ํ•จ์ˆ˜ ์ถ”๊ฐ€, ์ƒˆ ์˜ต์…˜ ์ถ”๊ฐ€
PATCHํ•˜์œ„ ํ˜ธํ™˜์„ ์œ ์ง€ํ•˜๋ฉฐ ๋ฒ„๊ทธ ์ˆ˜์ •๋ฒ„๊ทธ ์ˆ˜์ •, ์„ฑ๋Šฅ ๊ฐœ์„ 

๐Ÿฆ ์˜ํ˜ธ์˜ ํ•ต์‹ฌ ์ธ์‚ฌ์ดํŠธ: "SemVer ๋Š” '์•ฝ์†'์ด์—์š”. MAJOR ๋ฅผ ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š” ํ•œ ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ๊นจ์ ธ์„  ์•ˆ ๋œ๋‹ค๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ณ„์•ฝ์ด์ฃ . ํ•˜์ง€๋งŒ ์ด ์•ฝ์†์„ ์ง€ํ‚ค์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์žˆ๊ณ , ๊ทธ๊ฒŒ ์‹ค๋ฌด ์‚ฌ๊ณ ์˜ ์ฃผ์š” ์›์ธ์ด์—์š”."

0.x.x ๋ฒ„์ „์€ ํŠน์ˆ˜ํ•˜๋‹ค

0.MINOR.PATCH โ€” ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„ (Unstable)

0.x.x ์ผ ๋•Œ๋Š” MINOR ๊ฐ€ Breaking Change ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ^0.3.0 ์€ 0.3.x ๋ฒ”์œ„๋งŒ ํ—ˆ์šฉํ•˜์ง€, 0.4.0 ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๊ทœ์น™์ด ๋‹ค์Œ ์„น์…˜์˜ ^ ๊ธฐํ˜ธ ๋™์ž‘์—์„œ ํ•ต์‹ฌ์ด๋‹ค.


๐Ÿ”ฃ ๋ฒ”์œ„ ๊ธฐํ˜ธ ์ด์ •๋ฆฌ โ€” ^, ~, *, exact

^ (Caret) โ€” ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์“ฐ์ด๋Š” ๊ธฐํ˜ธ

๊ทœ์น™: ์ฒซ ๋ฒˆ์งธ 0์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ํ—ˆ์šฉ

^1.2.3  โ‰ก  >=1.2.3 <2.0.0   (MAJOR ๊ณ ์ •)
^0.2.3  โ‰ก  >=0.2.3 <0.3.0   (MINOR ๊ณ ์ • โ€” 0.x.x ํŠน์ˆ˜๊ทœ์น™!)
^0.0.3  โ‰ก  >=0.0.3 <0.0.4   (PATCH ๊ณ ์ • โ€” 0.0.x ํŠน์ˆ˜๊ทœ์น™!)
^1.2.x  โ‰ก  >=1.2.0 <2.0.0
^1.x    โ‰ก  >=1.0.0 <2.0.0

๐Ÿ”ฅ ^0.x.x ํ•จ์ •: ๋งŽ์€ ์‹ ์ž…์ด ^0.3.0 ์„ "0 ์ด์ƒ ๋ชจ๋“  ๋ฒ„์ „" ์œผ๋กœ ์˜คํ•ดํ•œ๋‹ค. ์‹ค์ œ๋กœ๋Š” 0.3.x ๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.

~ (Tilde) โ€” ๋ณด์ˆ˜์ ์ธ ์—…๋ฐ์ดํŠธ

๊ทœ์น™: MINOR ๊ฐ€ ๋ช…์‹œ๋˜๋ฉด PATCH ๋งŒ ํ—ˆ์šฉ, MINOR ๊ฐ€ ์—†์œผ๋ฉด MINOR ๊นŒ์ง€ ํ—ˆ์šฉ

~1.2.3  โ‰ก  >=1.2.3 <1.3.0   (PATCH ๋งŒ ํ—ˆ์šฉ)
~1.2    โ‰ก  >=1.2.0 <1.3.0   (PATCH ๋งŒ ํ—ˆ์šฉ)
~1      โ‰ก  >=1.0.0 <2.0.0   (MINOR ๊นŒ์ง€ ํ—ˆ์šฉ)
~0.2.3  โ‰ก  >=0.2.3 <0.3.0

๐Ÿ’ก ^ vs ~ ์„ ํƒ ๊ฐ€์ด๋“œ:

  • ^ โ€” ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋„ ์ž๋™์œผ๋กœ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ (๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ)
  • ~ โ€” ํŒจ์น˜(๋ฒ„๊ทธ ์ˆ˜์ •)๋งŒ ์ž๋™์œผ๋กœ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ (๋” ๋ณด์ˆ˜์ ์ธ ํŒ€)

* (Wildcard) โ€” ์ ˆ๋Œ€ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š” ๊ธฐํ˜ธ

*  โ‰ก  >=0.0.0   (๋ชจ๋“  ๋ฒ„์ „)

โŒ ์‚ฌ์šฉ ๊ธˆ์ง€: * ๋Š” ์–ด๋–ค ๋ฒ„์ „์ด๋“  ํ—ˆ์šฉํ•œ๋‹ค. MAJOR ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ, Breaking Change ์ „๋ถ€ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์ด ๊ธฐํ˜ธ๊ฐ€ ๋ณด์ด๋ฉด ์ฆ‰์‹œ ์ œ๊ฑฐํ•ด๋ผ.

exact (์ •ํ™•ํ•œ ๋ฒ„์ „) โ€” ์ตœ๋Œ€ํ•œ ๋ณด์ˆ˜์ 

{
  "dependencies": {
    // ๐Ÿฆ ์•ž์— ^ ๋‚˜ ~ ๊ธฐํ˜ธ๊ฐ€ ์ „ํ˜€ ์—†์ฃ ? ์ด๊ฑด "๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ๋”ฑ 14.1.4 ๋ฒ„์ „๋งŒ ์“ฐ๊ฒ ๋‹ค"๋Š” ์„ ์–ธ์ž…๋‹ˆ๋‹ค.
    // ๋‹ค๋ฅธ ํŒ€์›์ด npm install์„ ์ณ๋„ ์ ˆ๋Œ€ 14.1.5๋กœ ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    "next": "14.1.4"
  }
}

์ •ํ™•ํžˆ ์ด ๋ฒ„์ „๋งŒ ํ—ˆ์šฉ. ์ž๋™ ์—…๋ฐ์ดํŠธ ์—†์Œ.

๐Ÿฃ ์˜์ฒ : "๊ทธ๋Ÿผ exact ๋กœ ๋‹ค ๊ณ ์ •ํ•˜๋ฉด ์•ˆ์ „ํ•œ ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?"

๐Ÿฆ ์˜ํ˜ธ: "๋ณด์•ˆ ํŒจ์น˜๋„ ์•ˆ ๋ฐ›๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด์š”. ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋์„ ๋•Œ ๋ฒ„์ „์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์˜ฌ๋ ค์ค˜์•ผ ํ•˜๊ณ , ๊ฐ„์ ‘ ์˜์กด์„ฑ์€ ์–ด์ฐจํ”ผ lock ํŒŒ์ผ์ด ๊ด€๋ฆฌํ•ด์ค˜์š”. package.json ์—๋Š” ^ ๋กœ ๋ฒ”์œ„๋ฅผ ์„ ์–ธํ•˜๊ณ  package-lock.json ์ด ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ์‹ค๋ฌด ํ‘œ์ค€์ด์—์š”."

>=, <=, >, < โ€” ๋ช…์‹œ์  ๋ฒ”์œ„

>=18.17.0          18.17.0 ์ด์ƒ ๋ชจ๋‘
>=18.17.0 <19.0.0  18.17.0 ์ด์ƒ, 19.0.0 ๋ฏธ๋งŒ

์ฃผ๋กœ engines ํ•„๋“œ๋‚˜ peerDependencies ์—์„œ ์“ด๋‹ค:

{
  "peerDependencies": {
    "react": ">=16.8.0 <19.0.0"
  }
}

๐Ÿงฎ ๋ณตํ•ฉ ๋ฒ”์œ„ ํ‘œํ˜„์‹

|| โ€” ์—ฌ๋Ÿฌ ๋ฒ”์œ„ ์ค‘ ํ•˜๋‚˜

^16.0.0 || ^17.0.0 || ^18.0.0

"React 16, 17, 18 ์ค‘ ํ•˜๋‚˜๋ฉด ๋จ." ์ฃผ๋กœ peerDependencies ์—์„œ ์—ฌ๋Ÿฌ ๋ฉ”์ด์ € ๋ฒ„์ „์„ ๋™์‹œ์— ์ง€์›ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

{
  "peerDependencies": {
    "react": "^16.8.6 || ^17.0.0 || ^18.0.0",
    "react-dom": "^16.8.6 || ^17.0.0 || ^18.0.0"
  }
}

ํ•˜์ดํ”ˆ ๋ฒ”์œ„ (Hyphen Range)

1.2.3 - 2.3.4  โ‰ก  >=1.2.3 <=2.3.4

๐Ÿท๏ธ ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ & dist-tag

ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „

1.0.0-alpha.1    ๊ฐœ๋ฐœ ์ดˆ๊ธฐ
1.0.0-beta.2     ๊ธฐ๋Šฅ ์™„์„ฑ, ํ…Œ์ŠคํŠธ ์ค‘
1.0.0-rc.1       Release Candidate (์ตœ์ข… ํ›„๋ณด)
1.0.0            ์ •์‹ ์ถœ์‹œ
# ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „ ์„ค์น˜
npm install next@canary        # ์นด๋‚˜๋ฆฌ ๋นŒ๋“œ
npm install react@beta         # ๋ฒ ํƒ€
npm install @tanstack/query@alpha  # ์•ŒํŒŒ
 
# ์ •ํ™•ํ•œ ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „ ๊ณ ์ •
npm install react@19.0.0-rc.1

๐Ÿ”ฅ ์ค‘์š”: ^ ๊ธฐํ˜ธ๋Š” ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ^18.0.0 ์€ 19.0.0-rc.1 ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

dist-tag โ€” ๋ฒ„์ „์— ๋ถ™์ด๋Š” ๋ณ„์นญ

npm dist-tag ls react        # react ์˜ ๋ชจ๋“  ํƒœ๊ทธ ํ™•์ธ
latest: 18.2.0        โ† npm install react ์‹œ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜๋Š” ๋ฒ„์ „
next: 19.0.0-rc.1
canary: 19.0.0-canary.xxx
npm install react             # latest ํƒœ๊ทธ์˜ ๋ฒ„์ „ ์„ค์น˜ (18.2.0)
npm install react@next        # next ํƒœ๊ทธ์˜ ๋ฒ„์ „ ์„ค์น˜ (19.0.0-rc.1)
npm install react@latest      # latest ํƒœ๊ทธ ๋ช…์‹œ (๊ฐ™์€ ๊ฒฐ๊ณผ)

๋‚ด ํŒจํ‚ค์ง€์— ํƒœ๊ทธ ๋ถ™์ด๊ธฐ:

npm publish --tag beta        # ๋ฐฐํฌํ•˜๋˜ latest ๊ฐ€ ์•„๋‹Œ beta ํƒœ๊ทธ
npm dist-tag add @youngsoo/ui@1.1.0-beta.1 beta

๐Ÿ”ฅ ์‹ค๋ฌด์—์„œ ํ„ฐ์ง€๋Š” SemVer ํ•จ์ • 5๊ฐ€์ง€

ํ•จ์ • 1 โ€” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ SemVer ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

react-beautiful-dnd@14.2.0 โ†’ 14.3.0 ์—์„œ API ๋ณ€๊ฒฝ (Breaking Change!)
ํ•˜์ง€๋งŒ MINOR ๋งŒ ์˜ฌ๋ฆผ โ†’ SemVer ์œ„๋ฐ˜

๋Œ€์‘:

{
  "dependencies": {
    // ๐Ÿ’ก ๋ฒ„๊ทธ ์—†๋Š” ๊ฒŒ ํ™•์ธ๋œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „์œผ๋กœ "์™„์ „ ๊ณ ์ •(exact)" ์‹œ์ผœ์„œ ๋” ์ด์ƒ ์—…๋ฐ์ดํŠธ ์•ˆ ๋˜๊ฒŒ ๋ง‰๋Š” ์‘๊ธ‰์กฐ์น˜์ž…๋‹ˆ๋‹ค!
    "react-beautiful-dnd": "14.2.0"
  }
}

๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋œ ์ˆœ๊ฐ„ exact ๋ฒ„์ „์œผ๋กœ ๊ณ ์ •ํ•˜๊ณ , ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ ๋ฐ˜๋“œ์‹œ ์ฒด์ธ์ง€๋กœ๊ทธ๋ฅผ ํ™•์ธํ•œ๋‹ค.

ํ•จ์ • 2 โ€” lock ํŒŒ์ผ ์—†์ด ^ ๋ฒ„์ „ ์‚ฌ์šฉ

ํŒ€์› A: npm install โ†’ react-beautiful-dnd@14.2.0 ์„ค์น˜
1๋‹ฌ ํ›„
ํŒ€์› B: npm install โ†’ react-beautiful-dnd@14.3.0 ์„ค์น˜ (์ƒˆ ๋ฒ„์ „ ๋‚˜์˜ด)
โ†’ A ๋กœ์ปฌ์—์„œ๋งŒ ์žฌํ˜„๋˜๋Š” ๋ฒ„๊ทธ ๋ฐœ์ƒ

๋Œ€์‘: package-lock.json ์„ ํ•ญ์ƒ git ์ปค๋ฐ‹. npm ci ์‚ฌ์šฉ.

ํ•จ์ • 3 โ€” ^0.x.x ๋ฅผ ^1.x.x ์ฒ˜๋Ÿผ ์ฐฉ๊ฐ

{
  "dependencies": {
    "some-early-lib": "^0.3.0"
  }
}

^0.3.0 ์€ 0.3.x ๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. 0.4.0 ์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๊ฑธ ๋ชจ๋ฅด๊ณ  "์ž๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋  ๊ฑฐ์•ผ" ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

ํ•จ์ • 4 โ€” npm update ์™€ npm install ํ˜ผ๋™

npm install   # package-lock.json ๊ธฐ์ค€์œผ๋กœ ์„ค์น˜ (lock ์žˆ์œผ๋ฉด ๋ฒ„์ „ ๊ณ ์ •)
npm update    # package.json ์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ + lock ๊ฐฑ์‹ 

๐Ÿšจ ์œ„ํ—˜: npm update ๋Š” package-lock.json ์„ ๋ณ€๊ฒฝํ•œ๋‹ค. CI ์—์„œ ์ ˆ๋Œ€ npm update ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

ํ•จ์ • 5 โ€” peerDependencies ๋ฒ„์ „ ๋ฒ”์œ„์™€ ์‹ค์ œ ์„ค์น˜ ๋ฒ„์ „ ๋ถˆ์ผ์น˜

// some-ui-lib ์˜ peerDependencies
{
  "peerDependencies": {
    "react": "^17.0.0"
  }
}

๋‚ด ์•ฑ์ด react@18.x ๋ฅผ ์“ฐ๋ฉด npm v7+ ์—์„œ๋Š” ์—๋Ÿฌ, --legacy-peer-deps ๋กœ ๊ฐ•ํ–‰ํ•˜๋ฉด ๋‘ React ์ธ์Šคํ„ด์Šค ๋ฌธ์ œ.

์˜ฌ๋ฐ”๋ฅธ ๋Œ€์‘:

// ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ React 18 ์„ ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ
{
  "dependencies": {
    "some-ui-lib": "^2.0.0"    // React 18 ์ง€์› ๋ฒ„์ „
  }
}

๐Ÿ› ๏ธ ๋ฒ„์ „ ๊ด€๋ จ ์œ ์šฉํ•œ ๋ช…๋ น์–ด

# ํ˜„์žฌ ์„ค์น˜๋œ ๋ฒ„์ „ ํ™•์ธ
npm list react
npm list --depth=0        # ์ง์ ‘ ์˜์กด์„ฑ๋งŒ
 
# ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€ ํ™•์ธ
npm outdated
# โ†’ ํ˜„์žฌ๋ฒ„์ „ / ์›ํ•˜๋Š”๋ฒ„์ „ / ์ตœ์‹ ๋ฒ„์ „ ๋น„๊ต ํ…Œ์ด๋ธ” ์ถœ๋ ฅ
 
# ๋ฒ„์ „ ์˜ฌ๋ฆฌ๊ธฐ (package.json + git tag ๋™์‹œ ์ƒ์„ฑ)
npm version patch         # x.x.1 โ†’ x.x.2
npm version minor         # x.1.x โ†’ x.2.0
npm version major         # 1.x.x โ†’ 2.0.0
npm version 2.1.0         # ์ •ํ™•ํ•œ ๋ฒ„์ „์œผ๋กœ ์ง€์ •
 
# SemVer ๋ฒ”์œ„ ๊ณ„์‚ฐ (๋””๋ฒ„๊น…์šฉ)
npx semver "14.1.0" -r "^14.0.0"   # true/false ๋กœ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ
 
# ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ •๋ณด ํ™•์ธ
npm view react versions --json      # ์ „์ฒด ๋ฒ„์ „ ๋ชฉ๋ก
npm view react version              # ์ตœ์‹  ๋ฒ„์ „๋งŒ
npm view next dist-tags             # dist-tag ๋ชฉ๋ก

๐Ÿ ์ด๋ฒˆ์— ๋ฐฐ์šด ๋‚ด์šฉ ์ด์ •๋ฆฌ

๊ธฐํ˜ธํ—ˆ์šฉ ๋ฒ”์œ„์‹ค๋ฌด ์‚ฌ์šฉ์ฒ˜
^1.2.3>=1.2.3 <2.0.0์ผ๋ฐ˜ dependencies (๊ธฐ๋ณธ)
^0.3.0>=0.3.0 <0.4.00.x ํŒจํ‚ค์ง€ ์ฃผ์˜
~1.2.3>=1.2.3 <1.3.0๋ณด์ˆ˜์  ํŒ€ ๋˜๋Š” ๋ถˆ์•ˆ์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
14.1.4์ •ํ™•ํžˆ 14.1.4๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ ์ •
*๋ชจ๋“  ๋ฒ„์ „์ ˆ๋Œ€ ์‚ฌ์šฉ ๊ธˆ์ง€
>=16 || ^18๋ณตํ•ฉ ๋ฒ”์œ„peerDependencies

๐Ÿ“ ๋งˆ๋ฌด๋ฆฌ ํ€ด์ฆˆ

Q1. "some-lib": "^0.4.2" ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ๋ฒ„์ „ ๋ฒ”์œ„๋Š”?

a) >=0.4.2 <1.0.0 โ€” 0.x.x ์ „์ฒด
b) >=0.4.2 <0.5.0 โ€” 0.4.x ๋งŒ
c) >=0.0.0 โ€” ๋ชจ๋“  ๋ฒ„์ „
d) >=0.4.2 <0.4.3 โ€” ์ •ํ™•ํžˆ 0.4.2 ๋งŒ

โœ… ์ •๋‹ต: b โ€” >=0.4.2 <0.5.0

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: ^ ๋Š” "์ฒซ ๋ฒˆ์งธ 0์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๊ณ ์ •"ํ•˜๋Š” ๊ทœ์น™์ด๋‹ค. 0.4.2 ์—์„œ ์ฒซ ๋ฒˆ์งธ 0์ด ์•„๋‹Œ ์ˆซ์ž๋Š” 4 (MINOR)๋‹ค. ๋”ฐ๋ผ์„œ MINOR ๋ฅผ ๊ณ ์ •ํ•˜๊ณ  PATCH ๋งŒ ํ—ˆ์šฉํ•ด 0.4.x ๋ฒ”์œ„๊ฐ€ ๋œ๋‹ค. 0.x.x ํŒจํ‚ค์ง€๋Š” ์•„์ง ๋ถˆ์•ˆ์ •ํ•œ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ^ ๊ฐ€ ๋” ๋ณด์ˆ˜์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: a โ€” ^1.4.2 ์˜€๋‹ค๋ฉด MAJOR ๋ฅผ ๊ณ ์ •ํ•ด >=1.4.2 <2.0.0 ์ด ๋งž์ง€๋งŒ, 0.4.2 ์—์„œ๋Š” ๋‹ค๋ฅด๋‹ค. c โ€” * ์˜ ๋™์ž‘์ด๋‹ค. d โ€” exact ๋ฒ„์ „ 0.4.2 ์˜ ๋™์ž‘์ด๋‹ค.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "^0.x.x ๋Š” MINOR ๋ฅผ ๊ณ ์ •ํ•œ๋‹ค. 0.x.x ๋Š” SemVer ํŠน์ˆ˜ ์ผ€์ด์Šค!"

Q2. npm outdated ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์„ ๋•Œ, npm update ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„ค์น˜๋˜๋Š” ๋ฒ„์ „์€?

Package      Current  Wanted   Latest
next         14.0.0   14.1.4   14.1.4
react        18.0.0   18.2.0   18.2.0
typescript   5.0.0    5.3.3    5.3.3

a) Current ์—ด์˜ ๋ฒ„์ „ (ํ˜„์žฌ ๋ฒ„์ „ ์œ ์ง€)
b) Wanted ์—ด์˜ ๋ฒ„์ „ (package.json ๋ฒ”์œ„ ๋‚ด ์ตœ์‹ )
c) Latest ์—ด์˜ ๋ฒ„์ „ (๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ตœ์‹ )
d) ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค

โœ… ์ •๋‹ต: b โ€” Wanted ์—ด์˜ ๋ฒ„์ „ (package.json ๋ฒ”์œ„ ๋‚ด ์ตœ์‹ )

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์›๋ฆฌ ์„ค๋ช…: npm update ๋Š” package.json ์— ๋ช…์‹œ๋œ ๋ฒ„์ „ ๋ฒ”์œ„(^, ~ ๋“ฑ) ๋‚ด์—์„œ ํ—ˆ์šฉ๋˜๋Š” ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ๋‹ค. Wanted ์—ด์ด ๋ฐ”๋กœ ๊ทธ ๊ฐ’์ด๋‹ค. Latest ๊ฐ€ ๋” ๋†’๋”๋ผ๋„ ๋ฒ”์œ„ ๋ฐ–์ด๋ฉด ์„ค์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "next": "^14.0.0" ์ด๋ฉด 14.1.4 ๊นŒ์ง€๋งŒ ์˜ฌ๋ฆฌ๊ณ  15.0.0 ์€ ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ์˜ค๋‹ต ํ”ผ๋“œ๋ฐฑ: a โ€” npm install (lock ํŒŒ์ผ ์žˆ์„ ๋•Œ)์˜ ๋™์ž‘์ด๋‹ค. c โ€” Latest ๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ์‹์€ ์—†๋‹ค. ์ง์ ‘ ๋ฒ„์ „์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. d โ€” npm update ๋Š” ์‹ค์ œ๋กœ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "Wanted = package.json ๋ฒ”์œ„ ๋‚ด ์ตœ์‹ . npm update ๋Š” Wanted ๊นŒ์ง€๋งŒ ๊ฐ„๋‹ค."

Q3. ๐Ÿฃ ์˜์ฒ ์ด์˜ ํ…Œ์ŠคํŠธ ํƒ€์ž„ โ€” ์‹ค๋ฌด ๋”œ๋ ˆ๋งˆ

์˜์ฒ ์ด๊ฐ€ react-beautiful-dnd@^14.0.0 ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, 14.3.0 ์ด ๋ฆด๋ฆฌ์ฆˆ๋˜๋ฉด์„œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์ด ๋ง๊ฐ€์กŒ๋‹ค (SemVer ์œ„๋ฐ˜ โ€” MINOR ์— Breaking Change ํฌํ•จ). ์˜ํ˜ธ ๋ฆฌ๋“œ๊ฐ€ "์ง€๊ธˆ ๋‹น์žฅ ์ด ์ƒํ™ฉ์„ ๊ณ ์น˜๋˜, ์•ž์œผ๋กœ ์ด๋Ÿฐ ์‚ฌ๊ณ ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ํ•จ๊ป˜ ์ ์šฉํ•ด์ค˜" ๋ผ๊ณ  ํ–ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

โœ… ์ •๋‹ต: ์ฆ‰๊ฐ exact ๋ฒ„์ „ ๊ณ ์ • + overrides ๋กœ ์žฅ๊ธฐ์  ์ œ์–ด + ์ฒด์ธ์ง€๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ์Šต๊ด€ํ™”

// ์ฆ‰๊ฐ ์กฐ์น˜ โ€” 14.2.0 ์œผ๋กœ ๊ณ ์ • (์ •์ƒ ๋™์ž‘ํ•˜๋˜ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „)
{
  "dependencies": {
    // ๐Ÿฆ [1์ฐจ ๋ฐฉ์–ด๋ง‰] ๋‚ด๊ฐ€ ์ง์ ‘ ์“ฐ๋Š” ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์„ ํ™•์‹คํ•œ ๋ฒ„์ „์œผ๋กœ ๊ณ ์ •!
    "react-beautiful-dnd": "14.2.0"
  }
}
# package-lock.json ์žฌ์ƒ์„ฑ
npm install
// ์žฅ๊ธฐ์  ์กฐ์น˜ โ€” npm overrides ๋กœ ํŠน์ • ๋ฒ„์ „ ๊ฐ•์ œ (npm 8.3+)
{
  "overrides": {
    // ๐Ÿ’ก [2์ฐจ ๋ฐฉ์–ด๋ง‰] ํ˜น์‹œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๊ฐ€ ๋ชฐ๋ž˜ react-beautiful-dnd ์˜ ๋ฌธ์ œ ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ฌ๊นŒ ๋ด
    // "๋ˆ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ค๋“  ํ†ต์ผํ•ด์„œ ์ด๊ฑฐ๋งŒ ์จ๋ผ!" ํ•˜๊ณ  ์ฐ์–ด ๋ˆ„๋ฅด๋Š” ๊ฐ•๋ ฅํ•œ ์™ธ๊ณผ ์ˆ˜์ˆ  ์„ค์ •์ž…๋‹ˆ๋‹ค.
    "react-beautiful-dnd": "14.2.0"
  }
}
# GitHub Actions ์— ์ฒด์ธ์ง€๋กœ๊ทธ ํ™•์ธ ๋‹จ๊ณ„ ์ถ”๊ฐ€
- name: Check for updates
  run: npm outdated || true    # ๊ฒฝ๊ณ ๋งŒ ์ถœ๋ ฅ, ๋นŒ๋“œ ์‹คํŒจ ์•ˆ ํ•จ

๐Ÿ’ก ์ƒ์„ธ ํ•ด์„ค:

  • ์ฆ‰๊ฐ ์กฐ์น˜: ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ๋งˆ์ง€๋ง‰ ๋ฒ„์ „(14.2.0)์„ exact ๋ฒ„์ „์œผ๋กœ ๊ณ ์ •ํ•ด ์ถ”๊ฐ€ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋ง‰๋Š”๋‹ค.
  • overrides ํ™œ์šฉ: overrides ๋Š” npm 8.3+ ์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์ง์ ‘ ์˜์กด์„ฑ๋ฟ ์•„๋‹ˆ๋ผ ๊ฐ„์ ‘ ์˜์กด์„ฑ์˜ ๋ฒ„์ „๋„ ๊ฐ•์ œ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๊ฐ€ ๋™์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋ฒ„์ „์„ ํ†ต์ผ์‹œํ‚ฌ ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • ์žฅ๊ธฐ ์˜ˆ๋ฐฉ: npm outdated ๋ฅผ CI ์— ํฌํ•จํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ ๋ชฉ๋ก์„ ํ™•์ธํ•œ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ CHANGELOG ๋ฅผ ์ฝ๋Š”๋‹ค. ํŠนํžˆ MINOR ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋„ ์ฒด์ธ์ง€๋กœ๊ทธ๋ฅผ ๋ฌด์‹œํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
  • ๐Ÿ“Œ ํ•ต์‹ฌ ๊ธฐ์–ต๋ฒ•: "SemVer ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” exact ๋กœ ๊ณ ์ •ํ•˜๊ณ , overrides ๋กœ ๊ฐ„์ ‘ ์˜์กด์„ฑ๊นŒ์ง€ ์ œ์–ดํ•œ๋‹ค."

๐Ÿฃ ์˜์ฒ ์ด์˜ ํ‡ด๊ทผ ์ผ๊ธฐ

์˜ค๋Š˜ ์ €๋…์€ ์ง‘ ๊ทผ์ฒ˜ ๋ถ„์‹์ง‘์—์„œ ๋–ก๋ณถ์ด ๋จน์—ˆ๋‹ค. ํ˜ผ์ž ๋จน์œผ๋ฉด์„œ ๋จธ๋ฆฟ์†์œผ๋กœ SemVer ๋ฅผ ๋ณต๊ธฐํ–ˆ๋‹ค.

^ ๊ธฐํ˜ธ๊ฐ€ ๊ทธ๋ƒฅ "์ตœ์‹  ๋ฒ„์ „" ์ด ์•„๋‹ˆ๋ผ "MAJOR ๋ฅผ ๊ณ ์ •ํ•˜๊ณ  MINOR ์™€ PATCH ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค" ๋Š” ๊ฑด ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ^0.4.2 ๊ฐ€ 0.4.x ๋งŒ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฑด ๋ชฐ๋ž๋‹ค. 0.x.x ์—์„œ๋Š” MINOR ๊ฐ€ Breaking Change ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋” ๋ณด์ˆ˜์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฑฐ์˜€๋‹ค. ์˜ค๋Š˜ ๊ทธ ์ฐจ์ด ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ ์‹คํ—˜ํ•ด๋ดค๋‹ค โ€” npx semver "0.4.2" -r "^0.4.2" ํ•ด๋ณด๋‹ˆ true ๊ฐ€ ๋‚˜์˜ค๊ณ , npx semver "0.5.0" -r "^0.4.2" ๋Š” false ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฑธ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ํ™•์ธํ–ˆ๋‹ค.

๐Ÿ’ก ์˜ค๋Š˜์˜ ๊ตํ›ˆ: "๋ฒ„์ „ ๊ธฐํ˜ธ๋Š” ์•ฝ์†์ด๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ทธ ์•ฝ์†์„ ์ง€ํ‚ฌ ๊ฑฐ๋ผ๊ณ  ๋งน์‹ ํ•˜์ง€ ๋ง๊ณ , lock ํŒŒ์ผ๊ณผ exact ๋ฒ„์ „ ๊ณ ์ •์œผ๋กœ ์ง์ ‘ ๋ฐฉ์–ด์„ ์„ ์ณ์•ผ ํ•œ๋‹ค."

์‚ฌ์‹ค ์˜ค๋Š˜ react-beautiful-dnd ๋•Œ๋ฌธ์— ๋‚˜์˜จ ์žฅ์•  ๋ณด๊ณ ์„œ ๋•Œ๋ฌธ์— ์˜์ˆ˜ ๋‹˜ํ•œํ…Œ ์ข€ ํ˜ผ๋‚ฌ๋‹ค. ์•„์ง์€ ์ข€ ์•„ํ”„์ง€๋งŒ, ์ด๊ฑธ ์ด๋ ‡๊ฒŒ ๋ฐฐ์šฐ๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‚ด์ผ์€ ์˜์กด์„ฑ 4์ข… ์„ธํŠธ๋ฅผ ํŒŒ๋ณผ ๊ฑฐ๋‹ค. ํ—ฌ์Šค์žฅ ๊ฐ”๋‹ค ์™€์„œ ์”ป๊ณ  ์ž์•ผ๊ฒ ๋‹ค.


๐Ÿ”— ๋” ์•Œ์•„๋ณด๊ธฐ