버전 관리 & Build
์ ๋ฌธ ์ ํ๋ฆฌ์ผ์ด์
์๋ ๋ช
ํํ release ์๋ณ์, ์ฌํ ๊ฐ๋ฅํ build ๋ช
๋ น, ์์ค ์ฝ๋์ ๋ฐฐํฌ๋ ์ํฐํฉํธ ์ฌ์ด์ ์ถ์ ๊ฐ๋ฅ์ฑ์ด ํ์ํฉ๋๋ค.
Lino๋ ์๋น์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํด ๋
๋ฆฝ์ ์ธ SemVer ๋ฒ์ ์ ๊ด๋ฆฌํ๊ณ , release์ฉ container image๋ฅผ ๊ฒ์ํ ๋ ์ด ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค.
๋ ๋ฆฝ์ ์ธ ๋ฒ์ ๊ด๋ฆฌ
Lino ํ๋ก์ ํธ์๋ ์ฌ๋ฌ ์๋น์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ๊ฐ ๋ฐฐํฌ ๊ฐ๋ฅํ ํญ๋ชฉ์ ์์ฒด ๋ฒ์ ์ ๊ฐ์ง๋ฏ๋ก, ํ ์๋น์ค์ ์์ ์์ ์ด ์ ์ฒด ์์คํ ์ ์ธ์์ ์ธ release๋ฅผ ๊ฐ์ ํ์ง ์์ต๋๋ค. ์ด๋ API, workers, web apps, migrations, ํตํฉ ๊ณ์ฝ์ด ์๋ก ๋ค๋ฅธ ์๋๋ก ๋ฐ์ ํ ์ ์๋ ๋ชจ๋ํ ๋ฐ ๋ถ์ฐ ์ํคํ ์ฒ์์ ์ค์ํฉ๋๋ค.
์ด์ ๋ฒ์ ์ version.txt๋ผ๋ ๋จ์ํ ํ
์คํธ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. ์๋น์ค์ ๊ฒฝ์ฐ ํ์ผ์ src/Services/<ServiceName>/version.txt์ ์์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ src/WebApps/<WebAppName>/version.txt์ ์์ต๋๋ค. Lino CLI๋ ๋ฒ์ ๋ชฉ๋ก ์กฐํ, ํ์ธ, ์ฆ๊ฐ, ๋ฒ์ ์ด ์ง์ ๋ build ์์ฑ ์ ์ด ํ์ผ๋ค์ ์ฝ์ต๋๋ค.
Lino๊ฐ ์ฌ์ฉํ๋ SemVer ๊ท์น
MAJOR.MINOR.PATCH
- PATCH๋ ๋ง์ง๋ง ์ซ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉฐ, ํธํ ๊ฐ๋ฅํ ์์ , ์์ ๋ด๋ถ ๊ฐ์ , ๊ณต๊ฐ contract๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ๋ณ๊ฒฝ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- MINOR๋ ๊ฐ์ด๋ฐ ์ซ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ patch๋ฅผ 0์ผ๋ก ์ฌ์ค์ ํฉ๋๋ค. ํ์ ํธํ ๊ธฐ๋ฅ, ์ endpoints, ์ ํ์ ํ๋ ๋๋ ์ถ๊ฐ์ ๋์์ ์ฌ์ฉํฉ๋๋ค.
- MAJOR๋ ์ฒซ ๋ฒ์งธ ์ซ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ minor์ patch๋ฅผ 0์ผ๋ก ์ฌ์ค์ ํฉ๋๋ค. API contract๊ฐ ํธํ๋์ง ์๊ฒ ๋ณ๊ฒฝ๋์๊ฑฐ๋ ๋์์ด ์๋์ ์ผ๋ก ๋์ฒด๋์ด ์๋น์๊ฐ ์ ์ํด์ผ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
์: 1.0.0์ ์ฒซ ์์ ๋ฒ์ , 1.0.1์ ํธํ ๊ฐ๋ฅํ ์์ , 1.1.0์ ํธํ ๊ฐ๋ฅํ ์ ๊ธฐ๋ฅ ๋๋ breaking change ์๋ ์ endpoints, 2.0.0์ ํด๋ผ์ด์ธํธ ์
๋ฐ์ดํธ๊ฐ ํ์ํ ๋ณ๊ฒฝ์ ํฌํจํ release๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค.
ํ์ฌ ๋ฒ์ ํ์ธ
ํ๋ก์ ํธ์ ๋ชจ๋ ์๋น์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฌ ๋ฒ์ ์ ๋ณด๋ ค๋ฉด lino version list๋ฅผ ์ฌ์ฉํฉ๋๋ค:
lino version list
ํน์ ์๋น์ค ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฒ์ ์ ํ์ธํด์ผ ํ ๋๋ lino version show๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ช
๋ น์ ๋์์ด ์๋น์ค์ธ์ง ์น ์ ํ๋ฆฌ์ผ์ด์
์ธ์ง ๋ฌป๊ณ , ํด๋น version.txt ํ์ผ์์ ์ฝ์ ๋ฒ์ ์ ํ์ํฉ๋๋ค.
lino version show
๋ฒ์ ์ฆ๊ฐ
์๋น์ค ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ์ release ์ค๋น๊ฐ ๋์์ ๋ lino version bump๋ฅผ ์ฌ์ฉํฉ๋๋ค:
lino version bump
- ํ๋ก์ ํธ ๋ฃจํธ์์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
- ํ๋ ์ด์์ ์๋น์ค ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํํฉ๋๋ค. ํ๋กฌํํธ๋ ๊ฐ ํญ๋ชฉ๊ณผ ํ์ฌ ๋ฒ์ ์ ๋ณด์ฌ ์ค๋๋ค.
- ์ฆ๊ฐ ์ ํ์ ์ ํํฉ๋๋ค: patch, minor ๋๋ major.
- ์๋ต์ ํ์ธํฉ๋๋ค. Lino๋ ์ ํ๋
version.txtํ์ผ์ ์ ๋ฐ์ดํธํ๊ณ ์ ๋ฒ์ ์ด ํฌํจ๋ ํ๋ฅผ ํ์ํฉ๋๋ค.
๊ฐ ์คํ์ ๋ช ํํ ๋ณ๊ฒฝ ์ถ์ ์ ์ ์งํ๊ณ release ๊ดํ๊ณผ์ ์ผ๊ด์ฑ์ ๋์ด๋ฉฐ CI/CD pipelines์์ ์ ๋ ฌ์ ์ฝ๊ฒ ํฉ๋๋ค. ๋ฒ์ ๋ฒํธ๋ ๋ ์ด์ ๋จ์ด์ ธ ์๋ ์ธ๋ถ ์ ๋ณด๊ฐ ์๋๋ผ ์ค์ ๋ก ๋ณ๊ฒฝ๋ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํฐํฉํธ๋ฅผ ์๋ณํฉ๋๋ค.
๋ฒ์ ๋ณ๊ฒฝ์ release์ ๊ธฐ์ ์ ์ํฅ๊ณผ ํจ๊ป ๊ฒํ ํด์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค migration์ด ์๋น์ค ๋ฒ์ ์ ์ฐ๊ฒฐ๋ ์ ์๊ณ , API ์๋น์๋ contract notes๊ฐ ํ์ํ ์ ์์ผ๋ฉฐ, ํตํฉ ์ด๋ฒคํธ๋ ํธํ์ฑ ๊ฒ์ฌ๋ฅผ ์๊ตฌํ ์ ์์ต๋๋ค. ๋ฒ์ ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ํญ๋ชฉ ๊ฐ๊น์ด์ ๋๋ฉด ์ด๋ฌํ ๊ฒฐ์ ์ด ๋ช ํํด์ง๊ณ ๊ฐ์ฌํ๊ธฐ ์ฌ์์ง๋๋ค.
major ์ฆ๊ฐ ์ ์๋ ๊ณต๊ฐ API, ์ด๋ฒคํธ contract, migrations, ํด๋ผ์ด์ธํธ ํธํ์ฑ, ์ธ๋ถ ์๋น์๋ฅผ ๊ฒํ ํฉ๋๋ค. minor ์ฆ๊ฐ ์ ์๋ ์ ๋์์ด ์ถ๊ฐ์ ์์ ํ์ธํฉ๋๋ค. patch ์ ์๋ ๋ณ๊ฒฝ์ด ํธํ ๊ฐ๋ฅํ๊ณ ์ฌ์ฉ ๊ธฐ๋๋ฅผ ๋ฐ๊พธ์ง ์๋์ง ํ์ธํฉ๋๋ค.
Build์ ์ปจํ ์ด๋ํ
๋์์๊ณผ ์ผ์ ๊ฐ๋ฐ์์๋ ๊ฐ ๋ชจ๋ธ๋ง ๋จ๊ณ ํ ์์ฑ๋ ์๋ฃจ์
์ด ์ฌ์ ํ ์ปดํ์ผ๋๋์ง ๊ฒ์ฆํ๊ธฐ ์ํด dotnet build๋ฅผ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. lino build ๋ช
๋ น์ ๋ชฉ์ ์ ๋ค๋ฆ
๋๋ค. ์ ํํ ์๋น์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ .NET container publish profile๋ก Release ๋ชจ๋์์ ๊ฒ์ํ์ฌ release ์ค๋น๋ฅผ ํฉ๋๋ค.
์ด ๋ถ๋ฆฌ๋ ๋จ์ํ ์ปดํ์ผ ๊ฒ์ฆ์ ์ ๋ฌ ํจํค์ง๋ก ์ทจ๊ธํ์ง ์๊ฒ ํฉ๋๋ค. ๊ฐ๋ฐ ์ค์๋ ์ค๋ฅ๋ฅผ ๋นจ๋ฆฌ ์ฐพ๊ธฐ ์ํด dotnet build๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ํฐํฉํธ๊ฐ ๋ฒ์ ์ ๋ฐ๊ณ container image๊ฐ ๋์ด registry ๋๋ deploy pipeline์ผ๋ก ์ด๋ํ ์ค๋น๊ฐ ๋์์ ๋ lino build๋ฅผ ์ฌ์ฉํฉ๋๋ค.
lino build๊ฐ ํ๋ ์ผ
Lino ํ๋ก์ ํธ ๋ฃจํธ์์ ๋ช ๋ น์ ์คํํฉ๋๋ค:
lino build
CLI๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ ํ์ฌ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๊ฒ์ฆํ๊ณ , ์ด๋ค ์๋น์ค ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ build์ ํฌํจํ ์ง ๋ฌป๊ณ , ์ด์ด์ ๋ฒ์ ์ ์ ์งํ ์ง ์ฆ๊ฐ์ํฌ์ง ๋ฌป์ต๋๋ค. ์ฆ๊ฐ๊ฐ ์ ํ๋๋ฉด Lino๋ build ๋ช
๋ น์ ์์ฑํ๊ธฐ ์ ์ ํด๋น version.txt๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
backend๋ ์คํํ ์ ํํ ๋ช
๋ น์ ๋ฐํํฉ๋๋ค. ํ์ฌ ์ด ๋ช
๋ น๋ค์ dotnet publish์ -c Release, -p:PublishProfile=DefaultContainer, -p:ContainerRepository, -p:ContainerImageTag, -p:ContainerLabelVersion๋ฅผ ์ฌ์ฉํฉ๋๋ค. image tag์ container version label์ release์ ์ ํ๋ ๋์ผํ SemVer ๊ฐ์ ๋ฐ์ต๋๋ค.
์ค์ ๋ก ์ด ํ๋ก์ธ์ค๋ ์๋น์ค ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ , ํ์ํ ๊ฒ์ ๊ตฌ์ฑ์ ์ ์ฉํ๋ฉฐ, ํ์ฌ SemVer ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก container image๋ฅผ ์์ฑํ๊ณ , ์ํฐํฉํธ์ ํ์คํ๋ ์ด๋ฆ, tag, metadata๋ฅผ ๋ถ์ฌํฉ๋๋ค.
์์ฑ๋๋ repository ์ด๋ฆ
Lino๋ ์์ธก ๊ฐ๋ฅํ container repository๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ๋ก์ ํธ์ ํญ๋ชฉ ์ด๋ฆ์ ์ ๊ทํํฉ๋๋ค:
- ๋จ์ ์๋น์ค API:
<project-name>/services/<service-name>-api:1.2.3 - ๋ชจ๋ํ ์๋น์ค host:
<project-name>/services/<service-name>-host:1.2.3 - Blazor ์น ์ ํ๋ฆฌ์ผ์ด์
:
<project-name>/webapps/<webapp-name>:1.2.3
์ด ๊ท์น์ ์๋น์ค API, ๋ชจ๋ํ hosts, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ registry์์ ๋ถ๋ฆฌํ๊ณ release ๋ฒ์ ์ tag์ ๋ณด์กดํฉ๋๋ค. ๋ํ ๋ฐ๋ณต์ ์ธ ์๋ ๊ฒฐ์ ์ ์ ๊ฑฐํ๊ณ ํ๊ฒฝ, CI/CD scripts, ์ด์ ๋ฌธ์ ๊ฐ ์ฐจ์ด๋ฅผ ์ค์ ๋๋ค.
Registries์ ๊ฒ์
์์ฑ๋ images๋ deploy ํ๋ซํผ์์ ์ฌ์ฉํ๋ registry์ ๊ฒ์ํ ์ ์์ต๋๋ค:
- Docker Hub
- GitHub Container Registry
- AWS ECR
- Azure Container Registry
- ๊ธฐํ OCI ํธํ registry.
๊ฐ๋ฅํ๋ฉด floating tags ๋์ 1.2.3 ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ version tag๋ฅผ ๊ฐ๋ฆฌ์ผ deployํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด rollback, ๊ฐ์ฌ, buildยท๊ฒ์ยท๋ฐฐํฌ๋ ๋ด์ฉ์ ๋น๊ต๊ฐ ๊ฐ์ ๋ฉ๋๋ค.
๊ถ์ฅ release ํ๋ฆ
- ํจํค์ง ์ ์ ํ๋ก์ ํธ ํ
์คํธ์
dotnet build๋ฅผ ์คํํ์ฌ ์์ค ์ฝ๋๋ฅผ ๊ฒ์ฆํฉ๋๋ค. lino version list๋ก ํ์ฌ ๋ฒ์ ์ ํ์ธํ๊ณ ์ด๋ค ์๋น์ค ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณ๊ฒฝ๋์๋์ง ๊ฒํ ํฉ๋๋ค.lino build๋ฅผ ์ฌ์ฉํ๊ณ ํ์ฌ ๋ฒ์ ์ ์ ์งํ ์ง patch, minor ๋๋ major ์ฆ๊ฐ๋ฅผ ์ ์ฉํ ์ง ์ ํํฉ๋๋ค.- ์์ฑ๋ container images๋ฅผ Docker Hub, GitHub Container Registry, AWS ECR, Azure Container Registry ๋๋ ๋ค๋ฅธ ํธํ registry์ฒ๋ผ deploy ํ๋ซํผ์ด ์ฌ์ฉํ๋ registry์ ๊ฒ์ํฉ๋๋ค.
- ์ถ์ ๊ฐ๋ฅํ version tag๋ฅผ ์ฐธ์กฐํ์ฌ deployํ๊ณ changelog, migrations, rollback plan์ ๊ฐ์ release์ ์ฐ๊ฒฐํฉ๋๋ค.
secrets, production connection strings, ํ๊ฒฝ๋ณ ์๊ฒฉ ์ฆ๋ช ์ ์์ฑ๋ images ์์ ๋ฃ์ง ๋ง์ธ์. ํ๊ฒฝ ๋ณ์, ๋ก์ปฌ ๊ฐ๋ฐ์ฉ user secrets, CI/CD secret vault ๋๋ deploy ํ๋ซํผ์ secret ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ธ์.
์ด ํ๋ฆ์์๋ ๋ฒ์ ๊ด๋ฆฌ์ build๊ฐ ์ฐ๊ฒฐ๋ฉ๋๋ค. ํ๋ก์ ํธ์ ๊ธฐ๋ก๋ ๋์ผํ SemVer ๊ฐ์ด container tag์ release metadata๋ก ์ฌ์ฉ๋์ด ์์ค ์ฝ๋, migrations, API contracts, ํตํฉ ์ด๋ฒคํธ, ๋ฐฐํฌ๋ ์ํฐํฉํธ ์ฌ์ด์ ์ถ์ ๊ฐ๋ฅ์ฑ์ด ํฅ์๋ฉ๋๋ค.
