# Branching & Release Model (ํ•œ๊ตญ์–ด) ๐ŸŒ **Languages:** ๐Ÿ‡บ๐Ÿ‡ธ [English](../../../../ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ช๐Ÿ‡น [am](../../../am/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฆ [ar](../../../ar/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฟ [az](../../../az/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ง๐Ÿ‡ฌ [bg](../../../bg/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ง๐Ÿ‡ฉ [bn](../../../bn/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ง๐Ÿ‡ฆ [bs](../../../bs/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡จ๐Ÿ‡ฟ [cs](../../../cs/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ฐ [da](../../../da/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ช [de](../../../de/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ท [el](../../../el/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ช๐Ÿ‡ธ [es](../../../es/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ช๐Ÿ‡ช [et](../../../et/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ท [fa](../../../fa/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ซ๐Ÿ‡ฎ [fi](../../../fi/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ซ๐Ÿ‡ท [fr](../../../fr/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ช [ga](../../../ga/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [gu](../../../gu/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ha](../../../ha/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฑ [he](../../../he/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [hi](../../../hi/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ญ๐Ÿ‡ท [hr](../../../hr/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ญ๐Ÿ‡บ [hu](../../../hu/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฒ [hy](../../../hy/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฉ [id](../../../id/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ig](../../../ig/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡น [it](../../../it/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฏ๐Ÿ‡ต [ja](../../../ja/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ช [ka](../../../ka/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ญ [km](../../../km/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [kn](../../../kn/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฑ๐Ÿ‡น [lt](../../../lt/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ป [lv](../../../lv/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ml](../../../ml/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [mr](../../../mr/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฒ๐Ÿ‡พ [ms](../../../ms/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฒ๐Ÿ‡น [mt](../../../mt/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฒ๐Ÿ‡ฒ [my](../../../my/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ณ๐Ÿ‡ต [ne](../../../ne/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฑ [nl](../../../nl/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ณ๐Ÿ‡ด [no](../../../no/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [or](../../../or/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [pa](../../../pa/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ต๐Ÿ‡ญ [phi](../../../phi/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ต๐Ÿ‡ฑ [pl](../../../pl/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ต๐Ÿ‡น [pt](../../../pt/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ง๐Ÿ‡ท [pt-BR](../../../pt-BR/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ท๐Ÿ‡ด [ro](../../../ro/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ท๐Ÿ‡บ [ru](../../../ru/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ฐ [si](../../../si/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฐ [sk](../../../sk/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฎ [sl](../../../sl/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ท๐Ÿ‡ธ [sr](../../../sr/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ธ๐Ÿ‡ช [sv](../../../sv/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ช [sw](../../../sw/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ta](../../../ta/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [te](../../../te/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡น๐Ÿ‡ญ [th](../../../th/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡น๐Ÿ‡ท [tr](../../../tr/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡บ๐Ÿ‡ฆ [uk-UA](../../../uk-UA/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ต๐Ÿ‡ฐ [ur](../../../ur/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡บ๐Ÿ‡ฟ [uz](../../../uz/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ป๐Ÿ‡ณ [vi](../../../vi/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [yo](../../../yo/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡จ๐Ÿ‡ณ [zh-CN](../../../zh-CN/docs/ops/BRANCHING_MODEL.md) ยท ๐Ÿ‡น๐Ÿ‡ผ [zh-TW](../../../zh-TW/docs/ops/BRANCHING_MODEL.md) --- OmniRoute๋Š” **๋ณ‘๋ ฌ ์‚ฌ์ดํด** ๋ฆด๋ฆฌ์Šค ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ์‚ฌ์ดํด์—๋Š” ์ „์šฉ `release/vX.Y.Z` ๋ธŒ๋žœ์น˜๋ฅผ, ๋ฐฐํฌ๋œ ๋ผ์ธ์—๋Š” `main`์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•ด๋‹น ์‚ฌ์ดํด์ด ์ถœ์‹œ๋  ๋•Œ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ `vX.Y.Z` ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹์ด `release/*`์™€ `main`์— _๋ชจ๋‘_ ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ์€ ์ •์ƒ์ด๋ฉฐ, ์‹ค์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฉ”์ธํ…Œ์ด๋„ˆ๋ฅผ ์œ„ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ `CLAUDE.md`(Hard Rule #21)์™€ [RELEASE_CHECKLIST.md](./RELEASE_CHECKLIST.md)์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ๊ธฐ์—ฌ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ์š”์•ฝ์ž…๋‹ˆ๋‹ค. ## ํ•œ๋ˆˆ์— ๋ณด๊ธฐ | Ref | ์—ญํ•  | | ---------------- | --------------------------------------------------------------------------------- | | `release/vX.Y.Z` | **ํ™œ์„ฑ ์‚ฌ์ดํด** โ€” ํ•ด๋‹น ๋ฒ„์ „์˜ ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ ๋ฐ PR ๋ณ‘ํ•ฉ | | `main` | **๋ฐฐํฌ๋œ ๋ผ์ธ** โ€” ๋ฆด๋ฆฌ์Šค ์ถœ์‹œ ์‹œ ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ์„ ํ†ตํ•ด ์‚ฌ์ดํด์„ ๋ฐ˜์˜ | | `vX.Y.Z` (ํƒœ๊ทธ) | **์ถœ์‹œ ๋งˆ์ปค** โ€” ๋ฆด๋ฆฌ์Šค ์‹œ์ ์— ์ƒ์„ฑ๋˜๋Š”, ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ โ€œ์‹ค์ œ๋กœ ์ถœ์‹œ๋œ ๋‚ด์šฉโ€ ํฌ์ธํ„ฐ | ```mermaid flowchart LR A["๊ธฐ๋Šฅ/์ˆ˜์ • ๋ธŒ๋žœ์น˜"] --> B["PR โ†’ release/vX.Y.Z"] B --> C["release/vX.Y.Z ์ตœ์‹  ์ปค๋ฐ‹"] C --> D["๋ฆด๋ฆฌ์Šค PR ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ โ†’ main"] D --> E["ํƒœ๊ทธ vX.Y.Z"] C --> F["๋‹ค์Œ ์‚ฌ์ดํด: ๋™๊ฒฐ๋œ ์ตœ์‹  ์ปค๋ฐ‹์—์„œ release/vX+1 ์ƒ์„ฑ"] ``` ## PR์€ ์–ด๋А ๋ธŒ๋žœ์น˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ด์•ผ ํ•˜๋‚˜์š”? **`main`์ด ์•„๋‹ˆ๋ผ ํ™œ์„ฑ `release/vX.Y.Z` ๋ธŒ๋žœ์น˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜์„ธ์š”.** 1. ์—ด๋ ค ์žˆ๋Š” `release/v*` ๋ธŒ๋žœ์น˜ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ๋ฒ„์ „์„ ์ฐพ์Šต๋‹ˆ๋‹ค(์ž‘์„ฑ ์‹œ์ ์˜ ์˜ˆ: `release/v3.8.49`). 2. ํ•ด๋‹น ์ตœ์‹  ์ปค๋ฐ‹์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(`git fetch` + ์ฒดํฌ์•„์›ƒ / ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ๋ฆฌ๋ฒ ์ด์Šค). 3. **base = ํ•ด๋‹น `release/vX.Y.Z`**๋กœ ์„ค์ •ํ•˜์—ฌ PR์„ ์—ฝ๋‹ˆ๋‹ค. `main`์€ ์ผ์ƒ์ ์ธ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. `main`์„ ๋Œ€์ƒ์œผ๋กœ ์—ด๋ฆฐ PR์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ‘ํ•ฉ ์ „์— ๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ## ๋ฆด๋ฆฌ์Šค ๋™๊ฒฐ(๋ณ‘๋ ฌ ์‚ฌ์ดํด) ๋ฆด๋ฆฌ์Šค๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋™์•ˆ `release-freeze` ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋œ ๋งˆ์ปค ์ด์Šˆ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  **๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค**. - ๋™๊ฒฐ๋œ `release/vX.Y.Z`๋Š” ํ•ด๋‹น ์ถœ์‹œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ฆด๋ฆฌ์Šค ์บกํ‹ด์ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. - ๊ธฐ์—ฌ์ž๊ฐ€ ๊ณ„์† ์ž‘์—…์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ ์‚ฌ์ดํด์˜ `release/vX+1`์€ ๋™๊ฒฐ๋œ ์ตœ์‹  ์ปค๋ฐ‹์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. - ์—ฌ์ „ํžˆ ๋™๊ฒฐ๋œ ๋ธŒ๋žœ์น˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์—ด๋ฆฐ PR์€ ํ™œ์„ฑ ์ƒํƒœ์ธ(๊ฐ€์žฅ ๋†’์€ ๋ฒ„์ „์˜) `release/v*` ๋ธŒ๋žœ์น˜๋กœ **๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค**. ์›ํ•˜๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ๋ณ‘ํ•ฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ผ๊ณ  ํŒ๋‹จํ•˜๊ธฐ ์ „์— ์—ด๋ ค ์žˆ๋Š” ๋™๊ฒฐ ์ด์Šˆ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ```bash gh issue list --repo diegosouzapw/OmniRoute --label release-freeze --state open ``` ๋ณ‘ํ•ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜(์†Œ์œ ์ž์˜ `queue` ๋ ˆ์ด๋ธ” โ†’ Mergify)์€ [MERGE_TRAIN.md](./MERGE_TRAIN.md)์— ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ## ๋ธŒ๋žœ์น˜์™€ ํƒœ๊ทธ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”? | ์•„ํ‹ฐํŒฉํŠธ | ์ˆ˜๋ช… | ๋ชฉ์  | | ---------------- | ---------------- | -------------------------------------------------------------------- | | `release/vX.Y.Z` | ์ง„ํ–‰ ์ค‘์ธ ์‚ฌ์ดํด | ๊ฒ€ํ† ๋œ PR์„ ๋ชจ์œผ๊ณ , CI ํ†ต๊ณผ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, PR์˜ ๊ธฐ๋ฐ˜ ๋ธŒ๋žœ์น˜๋กœ ์‚ฌ์šฉ | | ํƒœ๊ทธ `vX.Y.Z` | ์˜๊ตฌ | npm / GitHub Releases์— ์ถœ์‹œ๋œ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ํ‘œ์‹œ | ๋ธŒ๋žœ์น˜๋Š” ์ž‘์—…์žฅ์ด๋ฉฐ, ํƒœ๊ทธ๋Š” ๋ฐ€๋ด‰๋œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. `main`์œผ๋กœ ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉํ•œ ํ›„์—๋Š” ์ด์ „ ๋ฆด๋ฆฌ์Šค PR์ด ์™„๋ฃŒ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์‚ฌ์ดํด์ด `release/vX+1`์—์„œ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ## ๊ด€๋ จ ๋ฌธ์„œ - [CONTRIBUTING.md](../../CONTRIBUTING.md) โ€” ์„ค์ •, ํ…Œ์ŠคํŠธ, PR ์ฒดํฌ๋ฆฌ์ŠคํŠธ - [RELEASE_CHECKLIST.md](./RELEASE_CHECKLIST.md) โ€” ์ถœ์‹œ ์ „ ๊ฒ€์ฆ - [MERGE_TRAIN.md](./MERGE_TRAIN.md) โ€” ๋ณ‘ํ•ฉ ํ ๋ฐ ๋Œ€์ฒด ๋ณ‘ํ•ฉ ํŠธ๋ ˆ์ธ - [RELEASE_GREEN.md](./RELEASE_GREEN.md) โ€” ๋ฆด๋ฆฌ์Šค ์ตœ์‹  ์ปค๋ฐ‹์„ ์ •์ƒ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•