๐ข SemVer ์์ ์ ๋ณต โ ๋ฒ์ ๊ธฐํธ์ ์ง์ง ์๋ฏธ์ ํจ์
๐ ๊ฐ์
^, ~, *, ์ ํํ ๋ฒ์ ... ๋ฒ์ ๋ฒ์ ๊ธฐํธ๋ค์ด ์ค์ ๋ก ํ์ฉํ๋ ๋ฒ์๋ฅผ ์๋ฒฝํ๊ฒ ์ดํดํ๋ค. ์ ์ ์ด ๊ฐ์ฅ ๋ง์ด ํ๋ฆฌ๋ SemVer ํจ์ ๋ค์ ์ง์ค ํด๋ถํ๋ค.
๐ ๋ชฉ์ฐจ
- ๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
- ๐ค ์ ์์์ผ ํ๋๊ฐ
- ๐๏ธ SemVer ์ ๊ตฌ์กฐ
- ๐ฃ ๋ฒ์ ๊ธฐํธ ์ด์ ๋ฆฌ
- ๐งฎ ๋ณตํฉ ๋ฒ์ ํํ์
- ๐ท๏ธ ํ๋ฆฌ๋ฆด๋ฆฌ์ฆ & dist-tag
- ๐ฅ ์ค๋ฌด์์ ํฐ์ง๋ SemVer ํจ์ 5๊ฐ์ง
- ๐ ๏ธ ๋ฒ์ ๊ด๋ จ ์ ์ฉํ ๋ช ๋ น์ด
- ๐ ์ด๋ฒ์ ๋ฐฐ์ด ๋ด์ฉ ์ด์ ๋ฆฌ
- ๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
- ๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
- ๐ ๋ ์์๋ณด๊ธฐ
๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
โฑ๏ธ ์์ ์ฝ๊ธฐ ์๊ฐ: 18๋ถ(์ ์ฒด) / ํต์ฌ ํํธ๋ง: 8๋ถ (๋ฒ์ ๊ธฐํธ + ํจ์ )
๐บ๏ธ ์ด ๋ฌธ์์ ํ๋ฆ
SemVer ๊ตฌ์กฐ ์ดํด โ ๋ฒ์ ๊ธฐํธ ์์ ์ ๋ณต โ ๋ณตํฉ ๋ฒ์ โ ํ๋ฆฌ๋ฆด๋ฆฌ์ฆ โ ์ค๋ฌด ํจ์ 5๊ฐ์ง โ ์ ์ฉํ ๋ช
๋ น์ด
๐ฏ ์ด ๋ฌธ์๋ฅผ ๋ค ์ฝ์ผ๋ฉด ํ ์ ์๋ ๊ฒ
-
^,~,*, exact,>=,||์ ํ์ฉ ๋ฒ์๋ฅผ ์ฆ์ ๋งํ ์ ์๋ค -
^0.x.x๊ฐ^1.x.x์ ๋ค๋ฅด๊ฒ ๋์ํ๋ ์ด์ ๋ฅผ ์ค๋ช ํ ์ ์๋ค -
npm dist-tag๊ฐ ๋ฌด์์ธ์ง, ์ ์ฐ๋์ง ์ดํดํ๋ค -
npm version patch๋ช ๋ น์ด๋ก ๋ฒ์ ์ ์ฌ๋ฆฌ๊ณ git ํ๊ทธ๋ฅผ ์์ฑํ ์ ์๋ค - SemVer ๋ฅผ ์งํค์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ธํด ์๊ธฐ๋ ์ฌ๊ณ ๋ฅผ ์์ธกํ๊ณ ๋๋นํ ์ ์๋ค
๐บ๏ธ ์ด ๋ฌธ์์ ๋ฐฐ๊ฒฝ ์ธ๊ณ๊ด: '์์๋ค ์ปค๋ฎค๋ํฐ'

- ๐ฃ ์์ฒ ( ์ ์
): "๋ฆฌ๋ ๋, ์ด์ ๋ฌด์์ด ์ผ์ด ์์์ด์.
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.0 | 0.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์ข
์ธํธ๋ฅผ ํ๋ณผ ๊ฑฐ๋ค. ํฌ์ค์ฅ ๊ฐ๋ค ์์ ์ป๊ณ ์์ผ๊ฒ ๋ค.