๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIP

ํ”„๋กœ์ ํŠธ ๋ฒ„์ „๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

by GREEN๋‚˜๋ฌด 2025. 5. 15.
728x90

๐Ÿ”– ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์š”ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ํ˜‘์—…, ๋ฐฐํฌ, ์œ ์ง€๋ณด์ˆ˜ ๊ณผ์ •์—์„œ ๋ฒ„์ „์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ง€์ •ํ•˜๋Š” ์ผ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ์ฒด๊ฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์–ด์•ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ธฐ ์‰ฝ๊ณ , ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์–ด๋–ค ์ „๋žต์„ ์„ ํƒํ•˜๋ฉด ์ข‹์„์ง€ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋ฒ„์ „ ๊ตฌ๋ถ„ ๋ฐฉ๋ฒ•

ํฌ๊ฒŒ ๋‚˜๋ˆ„์–ด ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ(Semantic Versioning) ์™€ ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ (Semantic Versioning, SemVer)

๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ฃผ.๋ถ€.์ˆ˜ (MAJOR.MINOR.PATCH) ํ˜•ํƒœ๋กœ ๋‚˜๋ˆ„์–ด ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ์„ค๋ช… ์˜ˆ์‹œ
MAJOR (์ฃผ ๋ฒ„์ „) ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” API ๋ณ€๊ฒฝ ๋ฐœ์ƒ ์‹œ 1.0.0 → 2.0.0
MINOR (๋ถ€ ๋ฒ„์ „) ํ˜ธํ™˜๋˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ 1.0.0 → 1.1.0
PATCH (์ˆ˜ ๋ฒ„์ „) ํ˜ธํ™˜๋˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • ์‹œ 1.0.0 → 1.0.1

โœ… ์ถ”๊ฐ€ ์š”์†Œ

  • Pre-release (์„ ํ–‰ ๋ฆด๋ฆฌ์Šค): ์•„์ง ์•ˆ์ •๋˜์ง€ ์•Š์€ ๋ฒ ํƒ€/์•ŒํŒŒ ๋ฒ„์ „ → 1.0.0-alpha, 1.0.0-beta.2
  • Build metadata (๋นŒ๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ): ๋นŒ๋“œ ์ •๋ณด๋‚˜ ์ปค๋ฐ‹ ํ•ด์‹œ ๋“ฑ → 1.0.0+20240510, 1.0.0+git.a1b2c3

๐Ÿ‘ ์žฅ์ 

  • ๋ฒ„์ „๋งŒ ๋ณด๊ณ  ๋ณ€๊ฒฝ์˜ ์ค‘์š”๋„์™€ ํ˜ธํ™˜์„ฑ์„ ํŒŒ์•… ๊ฐ€๋Šฅ
  • ์ž๋™ํ™” ๋„๊ตฌ(CI/CD) ์™€ ํ†ตํ•ฉ์ด ์šฉ์ด
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ API ๋ฐฐํฌ์— ๋งค์šฐ ์ ํ•ฉ

2๏ธโƒฃ ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋ฒ„์ „ ๊ด€๋ฆฌ (Date-based Versioning)

๋ฒ„์ „์— ๋ฆด๋ฆฌ์Šค ๋‚ ์งœ๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ YYYY.MM.DD ๋˜๋Š” YYYY-MM-DD ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ ์žฅ์ 

  • ๋ฆด๋ฆฌ์Šค ์‹œ์ ์ด ์ง๊ด€์ ์œผ๋กœ ํ‘œ์‹œ๋จ
  • ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋‹จ์ˆœํ•ด์ง

โš ๏ธ ๋‹จ์ 

  • ๋ฒ„์ „๋งŒ ๋ด์„œ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ • ์—ฌ๋ถ€ ํŒŒ์•…์ด ์–ด๋ ค์›€
  • ์žฆ์€ ๋ฆด๋ฆฌ์Šค ์‹œ ๋ฒ„์ „ ์ˆซ์ž ์ฆ๊ฐ€ ์†๋„๊ฐ€ ๋น ๋ฆ„

โš™๏ธ ๋ฒ„์ „ ์ง€์ • ๋ฐฉ์‹

ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ์™€ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ฒ„์ „์„ ์ˆ˜๋™ ๋˜๋Š” ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ ์ˆ˜๋™ ์ง€์ •

  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง์ ‘ ํŒ๋‹จํ•ด ์‚ฌ๋žŒ์ด ๋ฒ„์ „ ์ˆ˜์ •
  • ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, ๋‚ด๋ถ€ ๋„๊ตฌ์— ์ ํ•ฉ
  • ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋ช…ํ™•ํ•œ ํŒ€ ๊ทœ์น™์ด ํ•„์š”

๐Ÿค– ์ž๋™ ์ง€์ •

  • Git ํƒœ๊ทธ, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€, CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ์—ฐ๋™
  • ํŠน์ • ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฒ„์ „ ์ž๋™ ์ƒ์„ฑ ๋ฐ ๋ฐ˜์˜

์˜ˆ์‹œ ๋„๊ตฌ

๋„๊ตฌ ์–ธ์–ด/ํ™˜๊ฒฝ ์„ค๋ช…
npm version Node.js package.json ์ž๋™ ์—…๋ฐ์ดํŠธ + Git ํƒœ๊ทธ ์ƒ์„ฑ
poetry version Python pyproject.toml ๋ฒ„์ „ ๊ด€๋ฆฌ
Git flow Git ์ „๋žต ๋ธŒ๋žœ์น˜ ์ „๋žต๊ณผ ํ•จ๊ป˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ฒด๊ณ„ํ™”

๐Ÿงญ ์–ด๋–ค ๋ฒ„์ „ ์ „๋žต์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

ํ”„๋กœ์ ํŠธ ์œ ํ˜• ์ถ”์ฒœ ์ „๋žต
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, SDK, API โœ… SemVer(์˜๋ฏธ๋ก ์  ๋ฒ„์ „)
์‚ฌ์šฉ์ž ์•ฑ (์•ฑ/์›น ์„œ๋น„์Šค) โœ… SemVer ๋˜๋Š” ๐Ÿ“… ๋‚ ์งœ ๊ธฐ๋ฐ˜
๋‚ด๋ถ€ ํˆด, ์Šคํฌ๋ฆฝํŠธ โœ… ๊ฐ„๋‹จํ•œ ์ˆ˜๋™ ์ง€์ •๋„ OK

๐Ÿ’ก ์‹ค์ „์—์„œ ์œ ์šฉํ•œ ํŒ

  1. ๐Ÿงพ ํŒ€ ๋‚ด ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ทœ์น™์„ ๋ช…ํ™•ํžˆ ๋ฌธ์„œํ™”ํ•˜์„ธ์š”.
  2. ๐Ÿ“œ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž‘์„ฑ์„ ์Šต๊ด€ํ™”ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๐Ÿ”– Git์˜ ํƒœ๊ทธ ๊ธฐ๋Šฅ์„ ์ ๊ทน ํ™œ์šฉํ•ด ๋ฆด๋ฆฌ์Šค ์ง€์ ์„ ๋ช…ํ™•ํžˆ ๊ธฐ๋กํ•˜์„ธ์š”.
  4. โš™๏ธ CI/CD์™€ ์—ฐ๋™ํ•œ ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ˆ˜ ์—†์ด ์ผ๊ด€๋œ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  5. โœ… ์ค‘์š”ํ•œ ๋ฆด๋ฆฌ์Šค์—๋Š” ์ถฉ๋ถ„ํ•œ ํ…Œ์ŠคํŠธ์™€ ๋ฆฌ๋ทฐ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ, ํ˜‘์—… ๋ฐฉ์‹, ๋ฐฐํฌ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์ตœ์ ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ „๋žต์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€, ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ํŒ€ ์ „์ฒด๊ฐ€ ์ดํ•ดํ•˜๊ณ  ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„ ๊ฐ–์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.