Semantic Versioning 2.0.0
Last updated
Was this helpful?
Last updated
Was this helpful?
์ํํธ์จ์ด ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ๋๋ฒ์ ๋ํ ๋ค์ด๋ฐ ์์คํ ์ด๋ค. ๊ทธ๋ผ๋ฐํ(Gravatars)์ ์ฐฝ์์์ด์ ๊นํ(GitHub)์ ๊ณต๋์ฐฝ์ ์์ธ ํฐ ํ๋ ์คํด-๋ฒ ๋ฅด๋(Tom Preston-Werner)๊ฐ ์์ฑํ์ผ๋ฉฐ, ์คํ์์ค ํ๋ก์ ํธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. npm ๋ฑ api ๊ฐ๋ฐ ์ค์ผ์ฅด์ ์ดํดํ๊ธฐ ์ํด์ ์์๋ฌ์ผ ํ๋ฉฐ, ๋ฒ์ ์ ์ฌ์ฉ์๊ฐ ์ด package (api)๊ฐ ์ด๋ค์์ผ๋ก ๋ณ๊ฒฝ๋์๋๊ฐ๋ฅผ ์ดํดํ ์ ์๊ฒ ํด์ค๋ค.
MAJOR Version: ๊ธฐ์กด api๊ฐ ๋ณ๊ฒฝ / ์ญ์ ๋์๊ธฐ ๋๋ฌธ์ update ํ๋ฉด ๋์ํ์ง ์์ ์ ์๋ค๋ ๊ฒฝ๊ณ ์ ์๋ฏธ
MINOR Version: ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ ๋ฐฉ์์ผ๋ก API๊ฐ ์ถ๊ฐ๋์์ผ๋ ์ดํด๋ณด๋ผ๋ ์๋ฏธ
PATCH Version: ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ ๋ฒ๊ทธ ์์ ์ ํ์ ๊ฒฝ์ฐ
SemVer(์ ์์ ๋ฒ์ )์ ์ฐ๋ ์ํํธ์จ์ด๋ ๋ฐ๋์ ๊ณต๊ฐ API๋ฅผ ์ ์ธํ๋ค. ์ฝ๋์์ฒด๋ก ์ ์ธํ๊ฑฐ๋, ๋ฌธ์๋ก ์๊ฒฉํ๊ฒ ๋ช ์ํด์ผ ํ๋ค. (์ฑ ์๊ฐ ์๋ ๊ฐ๋ฐ์..)
Normal Version์ ๋ฐ๋์ X.Y.Z ํํ์ด๋ฉฐ ์์๊ฐ ์๋ ์ ์์ฌ์ผ ํ๋ฉฐ ์ ๋ ์์ 0์ด ๋ถ์ผ๋ฉด ์๋๊ณ ๊ฐ ์๋ ์ฆ๊ฐํ๋ ์์ฌ์ผ ํ๋ค.
๋ฐฐํฌํ๋ฉด ๊ทธ ๋ฒ์ ์ ๋ด์ฉ์ ์ ๋ ๋ณ๊ฒฝํด์๋ ์๋๋ค. ๐ฑ
0(0.y.z)์ ์ด๊ธฐ ๊ฐ๋ฐ์ ์ํด์ ์ด๋ค. ์๋ฌด ๋๋ ๋ง์๋๋ก ๋ฐ๊ฟ ์ ์๋ค.
1.0.0 ๋ฒ์ ์ ๊ณต๊ฐ API๋ฅผ ์ ์ํ๋ค. ์ดํ ๋ฒ์ ์ ๋ฐฐํฌํ ๊ณต๊ฐ API์์ ์ด๋ป๊ฒ ๋ฐ๋์๋์ง์ ๋ฐ๋ผ ์ฌ๋ฆฐ๋ค.
MAJOR Version์ด ์ฌ๋ผ๊ฐ๋ฉด MINOR Version๊ณผ PATCH Version์ 0์ด ๋์ผํ๊ณ
MINOR Version์ด ์ฌ๋ผ๊ฐ๋ฉด PATCH Version์ด 0์ด ๋ฐ๋์ ๋์ด์ผ ํ๋ค.
์ ์ ๋ฐฐํฌ๋ฅผ ์๋ pre-release version์ MINOR Version ๋ฐ๋ก ๋ค์ ๋ถ์ํ(-)์ ๋ง์นจํ(.)๋ก ๊ตฌ๋ถ๋ ์๋ณ์๋ฅผ ๋ํด์ ํ์ํ ์ ์๋ค. ์๋ณ์๋ ๋ฐ๋์ ์์คํค(ASCII) ๋ฌธ์, ์ซ์, ๋ถ์ํ๋ก๋ง ๊ตฌ์ฑํ๋ค[0-9A-Za-z-]. ์๋ณ์๋ ๋ฐ๋์ ํ ๊ธ์ ์ด์์ผ๋ก ํ๋ค. ์ซ์ ์๋ณ์์ ๊ฒฝ์ฐ ์ ๋ ์์ 0์ ๋ถ์ธ ์ซ์๋ก ํ๊ธฐํ์ง ์๋๋ค.
์) 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.
์ฐ์ ์์๋ 1.0.0-alpha < 1.0.0.
Build metadata๋ ์๋ฒ์ ์ด๋ ์ ์๋ฐฐํฌ ์ ์๋ณ์ ๋ค์ ๋ํ๊ธฐ(+) ๊ธฐํธ๋ฅผ ๋ถ์ธ ๋ค์ ๋ง์นจํ๋ก ๊ตฌ๋ถ๋ ์๋ณ์๋ฅผ ๋ง๋ถ์ฌ์ ํํํ ์ ์๋ค.
Build metadata.. Build metadata.. ??๐ง
์) 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85.
์ค์น๋ ํจํค์ง ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ package.json์์ ํจํค์ง์ ๋ฒ์ ํ์๋ฅผ ๋ง์ด ๋ดค์ ๊ฒ์ด๋ค.
Strict constraint (or fully qualified constraint) are those constraints matching only one version. In most case it is a bad idea to use them.
Why? Because with them you are locking your dependency to a specific patch release which means you won't ever get bug fixes when updating your dependencies.
comparator
์ฐ์ฐ์์ ๋ฒ์ ์ผ๋ก ํ์
ํ๊ธฐ๋ฒ
์ค๋ช
version
๋ช ์๋ version๊ณผ ์ผ์น
>version
๋ช ์๋ version๋ณด๋ค ๋์ ๋ฒ์
>=version
๋ช
์๋ version๊ณผ ๊ฐ๊ฑฐ๋ ๋์ ๋ฒ์
์์) >=1.2.7
๋ 1.2.7๊ณผ 1.2.8๊ณผ 1.3.9๋ ํฌํจ๋ ์ ์์ง๋ง
1.2.6์ด๋ 1.0.0 ๋ฒ์ ์ ๋งค์น๋์ง ์๋๋ค.
<version
๋ช ์๋ version๋ณด๋ค ๋ฎ์ ๋ฒ์
<=version
๋ช ์๋ version๊ณผ ๊ฐ๊ฑฐ๋ ๋ฎ์ ๋ฒ์
comparator set
whitespace๋ฅผ ์ฌ์ฉํ๋ฉฐ &&์ ๊ฐ๋ค๊ณ ๋ณผ ์ ์๋ค. ๋ํ ||
๋ ๊ฐ์ด ์ฐ์ผ ์ ์๋ค.
์์๋ก ํ์ธํ์
>=1.2.7 <1.3.0 patch ์ ๋ฐ์ดํธ ํ์ฉ
1.2.7 || >=1.2.9 <2.0.0 1.2.7 ์ด๊ฑฐ๋ 1.2.9ํฌํจ minor๊ณผ patch ์ ๋ฐ์ดํธ ํ์ฉ
prerelease tag(์๋ก, 1.2.3-alpha.3
)๊ฐ ์๋ ๊ฒฝ์ฐ
> 1.2.3-alpha.3 [major, minor, patch] ์ ๋ถ ์ผ์นํ ๊ฒฝ์ฐ 1.2.3์ผ ๊ฒฝ์ฐ prerelease tag๋ ํจ๊ป ํฌํจ๋๋ค. 1.2.3-alpha.4๋ ํฌํจ, 1.2.4๋ ํฌํจ ๋์ง๋ง 1.2.4-alpha.3์ ํฌํจ๋์ง ์๋๋ค.
์ด๋ ๊ฒ ๋์ด์๋ ๊ฑด 2๊ฐ์ง ์ด์ ๊ฐ ์๋ค.
prerelease version์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์, public consumption์๋ ์ ํฉํ์ง ์๊ณ ๋ง์ ๋ณ๊ฒฝ์ฌํญ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ range matching์๋ ์ ์ธ๋๋ค.
user๊ฐ prerelease version์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค๋ฉด ์ํ์ ์ธ์ํ๊ณ ์๋ค๊ณ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ [major, minor, patch]๊ฐ ์ผ์น ํ๋ ๊ฒฝ์ฐ์๋ ํฌํจํ์ง๋ง, ๋ค์ prelease version๊น์ง๋ ๊ฐ์ํ๊ธฐ๋ก ํ๋ค๊ณ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํฌํจํ์ง ์๋๋ค.
๐คญ์์ฐ
Hyphen Ranges X.Y.Z - A.B.C
1.2.3 - 2.3.4 >=1.2.3 <=2.3.4
1.2 - 2.3.4 ์ฒซ๋ฒ์งธ ๋ฒ์ ์ ์๋ต์ด ์๋ค๋ฉด 0์ ํฌํจ์ํจ๋ค. >=1.2.0 <=2.3.4
1.2.3 - 2.3
๋๋ฒ์งธ ๋ฒ์ ์ ์๋ต์ด ์๋ค๋ฉด [major, minor] ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ํฌํจ
>=1.2.3 <2.4
1.2.3 - 2
๋๋ฒ์งธ ๋ฒ์ ์ ์๋ต์ด ์๋ค๋ฉด 2๋ก ์์ํ๋ [major] ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ํฌํจ
>=1.2.3 <3
X-Ranges 1.2.x
1.X
1.2.*
* >0.0.0 ๋ชจ๋ ๋ฒ์ ์ ์ถฉ์กฑ
1.x
marjor์ minor level์ ์ ๋ฐ์ดํธ ํ์ฉ >=1.0.0 <2.0.0
1.2.x
patch level์ ์ ๋ฐ์ดํธ ํ์ฉ >=1.2.0 <1.3.0
Tilde Ranges ~1.2.3
~1.2
~1
minor version์ด ์ง์ ๋์ด ์๋ค๋ฉด patch level ๋ณ๊ฒฝ์ ํ์ฉํ๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ minor-level ๋ณ๊ฒฝ์ ํ์ฉํ๋ค.
~1.2.3 minor version์ด ์ง์ ๋์ด ์์ผ๋ patch level ๋ณ๊ฒฝ ํ์ฉ >=1.2.0 =1.2.0 <1.3.9
~1.2 minor version์ด ์ง์ ๋์ด ์์ผ๋ patch level ๋ณ๊ฒฝ ํ์ฉ (1.2.x์ ๊ฐ๋ค) >=1.2.0 =1.2.0 <1.3.0
~1 minor version์ด ์ง์ ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ minor-level ๋ณ๊ฒฝ์ ํ์ฉ >=1.0.0 <(1+1).0.0 >=1.0.0 <2.0.0
~3.10.0-alpha.1
minor version์ด ์ง์ ๋์ด ์์ผ๋ patch level ๋ณ๊ฒฝ ํ์ฉ 3.10.0 ์ด ์ผ์นํ๋ prerelease tag๋ ํจ๊ป ํฌํจ๋๋ค.
>=3.10.0-alpha.1 <3.(10+1).0
>=3.10.0-alpha.1 <3.11.0 3.10.0-alpha.2๋ ํฌํจ์ด ๋์ง๋ง, 3.11.0-alpha.2๋ ํฌํจ๋์ง ์๋๋ค.
Caret Ranges ^1.2.3
^0.2.5
^0.0.4
[major, minor, patch]์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ 0์ด ์๋ ์์๋ฅผ ์์ ํ์ง ์๋ ๋ณ๊ฒฝ ํ์ฉ 1.0.0 ๋ฒ์ ์ด๋ผ๋ฉด minor์ patch ๋ฒ์ ์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉ 0.X ๋ฒ์ ์ด๋ผ๋ฉด patch ์ ๋ฐ์ดํธ ํ์ฉ 0.X.X ๋ฒ์ ์ด๋ผ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํ์ง ์๋๋ค.
์คํ์์ค๋ฅผ ๋ง๋ ๋ง์ ์ ์๋ค์ 0.x version์ x๋ฅผ ํธํ์ฑ์ด ์์๋๋ ๋ณ๊ฒฝ(breaking-change) ์งํ๋ก ์ฌ๊ธด๋ค.(?) -> ์ด ๋ง์์ ์๊ฐ์ด ๋ง์๋๋ฐ 1.0.0 ๋ฐฐํฌ๋ฅผ ํ์ง ์์์ ๋๋ฅผ ๋งํ๋๊ฑฐ์๋ค. ์์ Semantic Versioning Specification๋ฅผ ํ์ธํด๋ณด๋ฉด 0(0.y.z)์ ์ด๊ธฐ ๊ฐ๋ฐ์ ์ํด์ ์ด๋ค. ์๋ฌด ๋๋ ๋ง์๋๋ก ๋ฐ๊ฟ ์ ์๋ค.
๋ผ๊ณ ์ฐ์ฌ์๋ค.
Caret ranges๋ ์ ์๋ค์ 0.2.4 ์์ 0.3.0 ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ฌ์ด๋ฅผ ํธํ์ฑ์ด ์์๋๋ ๋ณ๊ฒฝ์ผ ๋ ์ด์์ ์ด๋ค.(?) ๋จ 0.24์ 0.25๋ ํธํ์ฑ์ ์์๋๋ ๋ณ๊ฒฝ์ด ์๋๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.(?)
Many authors treat a 0.x version as if the x were the major "breaking-change" indicator.
Caret ranges are ideal when an author may make breaking changes between 0.2.4 and 0.3.0 releases, which is a common practice. However, it presumes that there will not be breaking changes between 0.2.4 and 0.2.5. It allows for changes that are presumed to be additive (but non-breaking), according to commonly observed practices.
breaking-change.. ๐..
^1.2.3
์ผ์ชฝ์์ ๋งจ ์ฒ์ 0์ด ์๋ ์์๋ major ์ด๊ธฐ ๋๋ฌธ์ minor, patch ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉ
>=1.2.3 < 2.0.0
^0.2.3
์ผ์ชฝ์์ ๋งจ ์ฒ์ 0์ด ์๋ ์์๊ฐ minor ์ด๊ธฐ ๋๋ฌธ์ patch ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉ
>=0.2.3 <0.3.0
^0.0.3
์ผ์ชฝ์์ ๋งจ ์ฒ์ 0์ด ์๋ ์์๊ฐ patch์ด๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํ์ง ์์
^1.2.3-beta.2
์ผ์ชฝ์์ ๋งจ ์ฒ์ 0์ด ์๋ ์์๊ฐ major ์ด๊ธฐ ๋๋ฌธ์ minor, patch ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํ๊ณ
1.2.3 version ์ผ์นํ๋ ๊ฒฝ์ฐ prerelease tag๋ ํจ๊ป ํฌํจ๋๋ค.
>=1.2.3-beta.2 <2.0.0
^0.0.3-beta
0.0.3์ prerelease๋ง ํ์ฉ๋๋ค. 0.0.3-pr.2๋ ํ์ฉ์ด ๋๋ค.
patch ๊ฐ์ด ๋๋ฝ๋์ด ์๋ ๊ฒฝ์ฐ
0์ผ๋ก ํ๊ธฐํ์ง๋ง, major์ minor version ๋ ๋ค 0์ธ ๊ฒฝ์ฐ ํด๋น ๊ฐ ๋ด์์ ์ ์ฐ์ฑ์ด ํ์ฉ๋๋ค.
^1.2.x
0์ด ์๋ ๋งจ ์ฒ์ ์์๊ฐ major์ด๊ณ 0์ผ๋ก ์ฑ์์ง๋ค.
>=1.2.0 <2.0.0
^0.0.x
major์ minor ๋ ๋ค 0 ์ด๊ธฐ ๋๋ฌธ์ ํด๋น๊ฐ ๋ด์์ ์ ์ฐ์ฑ ํ์ฉ
>=0.0.0 <0.1.0
^0.0
major์ minor ๋ ๋ค 0 ์ด๊ธฐ ๋๋ฌธ์ ํด๋น๊ฐ ๋ด์์ ์ ์ฐ์ฑ ํ์ฉ
>=0.0.0 <0.1.0
minor๊ณผ patch ๊ฐ ๋ชจ๋ ๋๋ฝ๋์ด ์๋ ๊ฒฝ์ฐ
0์ผ๋ก ํ๊ธฐํ์ง๋ง major๋ 0์ธ ๊ฒฝ์ฐ ํด๋น ๊ฐ ๋ด์์ ์ ์ฐ์ฑ์ด ํ์ฉ๋๋ค.
^1.x
0์ด ์๋ ๋งจ ์ฒ์ ์์๊ฐ major์ด๊ณ minor๊ณผ patch๋ฅผ 0์ผ๋ก ํ๊ธฐ
>=1.0.0 <2.0.0
^0.x 0.0.0์ด ๋์ด ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ๋ง์๋ ๋ป์ด ๋์ด์ผ ํ๋๋ฐ major๋ 0์ธ ๊ฒฝ์ฐ๋ minor์ patch๊ฐ ๋ด์์ ์ ์ฐ์ฑ์ด ํ์ฉ๋๋ค. >=0.0.0 <1.0.0
์ด์ pakage.json์ ํ์ผ์ ์ดํดํ ์ ์๊ฒ ๋์๋ค.
ํ๋์ฉ ํบ์๋ณด๋ฉด
^(Caret Ranges)
๋ฅผ ์ฌ์ฉํ์๊ณ 0์ด ์๋ ์ฒซ๋ฒ์งธ version์ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ patch๋ง ๋ณ๊ฒฝ๋๋ค. ๋ํ ์์ง 1.0.0์ด ๋ฆด๋ฆฌ์ฆ ๋๊ฒ ์๋๊ธฐ ๋๋ฌธ์ 0.4์ 0.5๊ฐ ํธํ์ฑ์ด ์์๋๋ ๋ณ๊ฒฝ(breaking-change) ์ผ ์ ์๋ค. 0(0.y.z)์ ์ด๊ธฐ ๊ฐ๋ฐ์ ์ํด์ ์ด๋ค. ์๋ฌด ๋๋ ๋ง์๋๋ก ๋ฐ๊ฟ ์ ์ ์๋ ์๋ค.
๋๊ฒ์ ๋ช
์ฌํ์
0์ด ์๋ ์ฒซ๋ฒ์งธ ์๋ฆฌ๊ฐ major ์ด๊ธฐ ๋๋ฌธ์ >=16.13.0 <17.0.0 ๊น์ง ์ ๋ฐ์ดํธ ๋ ์ ์๋ค.
0์ด ์๋ ์ฒซ๋ฒ์งธ ์๋ฆฌ๊ฐ major ์ด๊ธฐ ๋๋ฌธ์ major๋ ์ ๋ฐ์ดํธ ํ์ง ์๋๋ค. prerelease tag๊ฐ ๋ถ์ด์๊ธฐ ๋๋ฌธ์ [3.27.2] ๋ฒ์ ์ prerelease version๋ ํจ๊ป ์ ๋ฐ์ดํธ ๋๋ค. (3.27.2-alpha.3์ ์ ๋ฐ์ดํธ์ ํฌํจ๋์ง๋ง 3.27.3-alpha.2์ ์ ๋ฐ์ดํธ์ ํฌํจ๋ ์ ์๋ค.)
>=3.27.2-alpha.2 <4.0.0
์ฐธ๊ณ
๋ช ์ธ์ ๊ดํด์๋ ํ์ด์ง์์ ํ์ธํ๊ณ ์ฌ๊ธฐ์ ๊ฐ๋ตํ๊ฒ๋ง ์ ๋ฆฌ / ์์ด๋ก ๋ณด๋ฉด ๊ฐ์กฐํ์๊ฐ ๋ ์๋ณด์ธ๋ค.
^
์ -alpha.2
์ ํ์ธํ ์ ์๋๋ฐ, Node์์๋ ํนํ ์ด๊ฐ์ Version Range๋ฅผ ๊ถ์ฅํ๋ค๊ณ ํ๋ค. ์๊ฒฉํ ์ ์ฝ์กฐ๊ฑด์ ์ค์ง ํ ๋ฒ์ ๊ณผ ๋งค์นญํ์ฌ ํน์ patch release์ ์์กดํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ๊ฐ ์์ ๋์ง ์๋ ๋ฌธ์ ๊ฐ ์๋ค. () ๋ง๋ฒ์ญ..
()
์ฝ์ด๋ ํท๊ฐ๋ฆด ๋๋ npm semver calculator ์ถ์ฒํ๋ค. ํ ๋์ ํ์ธ ํ ์ ์์ผ๋ฉฐ prerelease version์ด ์๋ react-zeroconfig๋ก ํ์ธํ๋๊ฑธ ์ถ์ฒ
/