changesets์ ์ด์ฉํ Next.js ํ๋ก์ ํธ ๋ฐฐํฌ ํ๋ก์ธ์ค์ ๋๋ค. github actions๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ฉฐ, changesets์ ํจ๊ป ์ฌ์ฉํ์ฌ release version, CHANGELOG, Deploy๋ฅผ ์๋ํํฉ๋๋ค.
packageManager์ yarn@4.5.0(yarn berry)๋ฅผ ์ฌ์ฉํ์์ผ๋ฉฐ, deploy๋ sst(v^3.1.49)๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค.
yarn create sst ๋ช
๋ น์ด ์คํ์ ํ๋ก์ ํธ ๋ฃจํธ์ sst ์ค์ ํ์ผ(sst.config.ts)์ด ์์ฑ๋ฉ๋๋ค.
// sst.config.ts
/// <reference path="./.sst/platform/config.d.ts" />
export default $config({
app(input) {
return {
name: 'release-workflows',
home: 'aws',
providers: {
aws: {
region: 'ap-northeast-2'
}
},
removal: input?.stage === 'production' ? 'retain' : 'remove'
}
},
async run() {
new sst.aws.Nextjs('ReleaseWorkflows', {
imageOptimization: {
memory: '512 MB'
}
})
}
})-
config: config ํจ์๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฐํฌ ํ๊ฒฝ์ ์ค์ ํฉ๋๋ค. config ํจ์๋ app, run ๋ ํจ์๋ฅผ ๊ฐ์ง๋๋ค.
-
app: app ํจ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ก๋๋ ๋ ์คํ๋๋ ํจ์
-
name: ํ๋ก์ ํธ ์ด๋ฆ์ ์ค์ ํ๋ฉฐ, ์ด๋ ๋ฆฌ์์ค์ prefix๋ก ์ฌ์ฉ (required)
-
home: โawsโ | โcloudflareโ | โlocalโ ์ ๊ฐ์ ๊ฐ์ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์ ์ฅํ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ฅผ ์ง์ (required)
-
providers: home์ ์ค์ ๋ ํด๋ผ์ฐ๋ ์ ๊ณต์ ๊ด๋ จ ์ค์ (optional)
-
removal: โremoveโ | โretainโ | โretain-allโ์ ๊ฐ์ ๊ฐ์ ์์ฑํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ "retain". ๋ฆฌ์์ค ์ ๊ฑฐ ์ ์ฑ ์ ์ค์ ํ๋ ์ต์ ์ด๋ฉฐ "remove"์ ๊ฒฝ์ฐ ๋ฆฌ์์ค ์ ๊ฑฐ, "retain"์ S3 buckets and DynamoDB tables ์ ์งํ๋ฉฐ ์ด์ธ ๋ฆฌ์์ค๋ค์ ์ ๊ฑฐ, "retain-all"์ ๋ชจ๋ ๋ฆฌ์์ค ์ ๊ฑฐ (optional)
-
-
run: run ํจ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฆฌ์์ค๋ฅผ ์ ์ํ๊ธฐ ์ํ ๋น๋๊ธฐ ํจ์์ด๋ฉฐ, ์ด ํจ์ ๋ด์์ AWS Lambda, API Gateway, DynamoDB ๋ฑ๊ณผ ๊ฐ์ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๋ฅผ ์ค์ ํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅ
-
sst.aws.Nextjs ์์ฑ์๋ฅผ ํตํด Next.js ์ ํ๋ฆฌ์ผ์ด์ ๋ฆฌ์์ค ๊ด๋ จ ์ค์ ๊ฐ๋ฅ
-
imageOptimization.memory: Next.js ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฏธ์ง ์ต์ ํ ์์ ์ ์ํํ ๋ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ง์
-
domain: ์ฌ์ฉ์ ์ ์ ๋๋ฉ์ธ ์ด๋ฆ๊ณผ ๊ด๋ จ๋ ์ค์ ์ ์ ์ํ๋ ์์ฑ
-
name: ์ฌ์ฉ์ ์ ์ ๋๋ฉ์ธ
-
cert: SSL ์ธ์ฆ์ ARN
-
-
environment: ๋ฐฐํฌ์ ์ฌ์ฉ๋ ํ๊ฒฝ๋ณ์ ์ค์
-
-
-
changesets๋ ํ๋ก์ ํธ ๋ฒ์ ๊ณผ CHANGELOG ๋ฑ ํธ๋ผํ๊ฒ ๊ด๋ฆฌํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ Semver๊ท์น์ ๋ฐ๋ผ ๋ฒ์ ์ ๊ด๋ฆฌํฉ๋๋ค.
yarn chageset init ๋ช
๋ น์ด ์คํ์ ํ๋ก์ ํธ ๋ฃจํธ์ .changeset ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก changeset ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ๋ฌ๊ทธ์ธ์ผ๋ก @changesets/changelog-github๋ฅผ ์ฌ์ฉํ๋ฉด Github ๋ฆฌํฌ์งํ ๋ฆฌ์ CHANGELOG๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ , ํด๋น ํ๋ฌ๊ทธ์ธ์ Github API๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋ฐ ๋ฉ์์ง์ PR(pull request) ์ ๋ชฉ ๋ฐ ์ค๋ช ์ ๊ธฐ๋ฐ์ผ๋ก CHANGELOG ํญ๋ชฉ์ ์์ฑํฉ๋๋ค.
์๋๋ yarn changeset init ๋ช
๋ น์ด ์คํ์ ์์ฑ๋๋ config ํ์ผ์ด๋ฉฐ, ํ๋ก์ ํธ ๋ฃจํธ ๊ฒฝ๋ก์ .changeset/config.json์ผ๋ก ๋ช
๋ น์ ์คํ์ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
{
"$schema": "https://unpkg.com/@changesets/config@3.0.2/schema.json",
"changelog": [
"@changesets/changelog-github",
{ "repo": "OWNER/REPO_NAME" }
],
"commit": false,
"fixed": [],
"linked": [],
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [],
"privatePackages": {
"tag": true,
"version": true
}
}-
changelog: CHANGELOG๋ฅผ ์์ฑํ ๋ฐฉ๋ฒ์ ์ ์
- repo: CHANGELOG๊ฐ ์์ฑ๋ Gihub repo ๋ช ์์ฑ
-
commit: false๋ก ์ค์ ์ Changesets๋ ์๋์ผ๋ก ์ปค๋ฐ์ ๋ง๋ค์ง ์์
-
baseBranch: ๊ธฐ๋ณธ ๋ธ๋์น๋ฅผ ์ ์
-
updateInternalDependencies: ๋ด๋ถ ์ข ์์ฑ์ ์ ๋ฐ์ดํธ ์ ์ฑ ์ ์ ์
-
privatePackages: ๋น๊ณต์ ํจํค์ง์ ๋ํ ๋์์ ์ ์, npm์ ๋ฐฐํฌํ์ง ์๋ ํจํค์ง๋ผ๋ฉด ํด๋น ์ต์ ์ถ๊ฐ
-
tag: true ์ค์ ์ ํจํค์ง๋ฅผ ํ๊ทธ ๊ด๋ฆฌ ํ์ฉ
-
version: true ์ค์ ์ ํจํค์ง์ ๋ฒ์ ๊ด๋ฆฌ ํ์ฉ
-
yarn changeset version ๋ช
๋ น์ด ์คํ์ .changeset ํด๋์ ๋งํฌ๋ค์ด ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ด์ ์ ๊ธฐ๋กํ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ณ ๊ฐ ํจํค์ง์ ๋ํด ์ด๋ค ๋ฒ์ ๋ณ๊ฒฝ์ด ํ์ํ์ง๋ฅผ ๊ฒฐ์ ํ๊ณ , package.json์ version ์ ๋ณด๋ฅผ ๋ณ๊ฒฝ์์ผ ์ค๋๋ค. ๋ํ ๋งํฌ๋ค์ด์ ์์ฑํ ์ค๋ช
์ ๊ธฐ๋ฐ์ผ๋ก CHANGELOG.md ํ์ผ์ ์
๋ฐ์ดํธ, ๋ณ๊ฒฝ๋ version ์ ๋ณด์ ์
๋ฐ์ดํธ๋ CHANGELOG.md๊ฐ ์๋์ผ๋ก commit, Release Note ์์ฑ์ ์๋์ผ๋ก ์ํํฉ๋๋ค.
---
"ํจํค์ง ์ด๋ฆ": major | minor | patch
---
CHANGELOG.md์ ์์ฑ๋ ๋ด์ฉ ์์ฑ์ ํ์ผ์ฒ๋ผ .changeset ํด๋ ๋ด ์ ๋ํฌํ ์ด๋ฆ์ markdown ํ์ผ์ ์์ฑํ๊ณ ์ ํ
ํ๋ฆฟ ํํ๋ก ์์ฑํ๊ณ yarn changeset version ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
์คํํ๋ฉด ํด๋น ๋งํฌ๋ค์ด ํ์ผ ๊ธฐ๋ฐ์ผ๋ก version, CHANGELOG, Release Note๊ฐ ์ ๋ฐ์ดํธ ๋๊ณ , ํด๋น ๋งํฌ๋ค์ด ํ์ผ์ ์๋์ผ๋ก ์ ๊ฑฐ๋ฉ๋๋ค.
yarn changeset version ๋ช
๋ น์ด ์คํ ์ดํ yarn changeset tag ๋ช
๋ น์ด ์คํํ๋ฉด ์๋ก ์
๋ฐ์ดํธ๋ ๋ฒ์ ์ ๋ณด์ ๋ง๋ Git tag๋ฅผ ์๋กญ๊ฒ ์์ฑํ๊ณ ์
๋ฐ์ดํธ๋ฉ๋๋ค.
์๋๋ Github Actions๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ณผ์ ๋ค์ ์๋ํํ๊ณ ์ถ๊ฐ์ ์ผ๋ก ๋ฐฐํฌ๊น์ง ์ํํ๋ workflow์ด๋ฉฐ, ์ ์ฒด์ ์ธ ํ์ ์๋์ ๊ฐ์ต๋๋ค.
dev์ main ๋ธ๋์น ๊ฐ๊ฐ์ ๋ํ ๋ฐฐํฌ ๋ฒ์ ์ด ์กด์ฌํฉ๋๋ค. ์๋๋ถํฐ๋ dev ๋ธ๋์น๋ฅผ ๊ฐ๋ฐ ๋ฒ์ , main ๋ธ๋์น๋ฅผ ์์ฉ ๋ฒ์ ์ด๋ผ ์นญํ๊ฒ ์ต๋๋ค.
-
development release workflow์ ๊ฒฝ์ฐ dev ๋ธ๋์น์ commit์ด push๋๋ ๊ฒฝ์ฐ์ ์ํ
-
release jobs
-
environment
-
runs-on: ubuntu-latest: GitHub์ด ์ ๊ณตํ๋ ์ต์ ์ Ubuntu ์ด์์ฒด์ ์์ ์ํฌํ๋ก์ฐ๋ฅผ ์คํ -
permissions: ์ํฌํ๋ก์ฐ๊ฐ ์คํ๋๋ ๋์ ํน์ GitHub API ๊ถํ์ ์ ์ด-
content: write: ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์ฉ ์์ ๊ถํ์ ๋ถ์ฌ, ํด๋น ๊ถํ์ ํตํด ํ์ผ์ ์ถ๊ฐ, ์์ , ์ญ์ ํ ์ ์๊ณ , commit์ ๋ง๋ค๊ฑฐ๋ ํธ์ ๊ฐ๋ฅ -
pull-request: write: ํ ๋ฆฌํ์คํธ(PR) ์์ฑ ๋ฐ ์ ๋ฐ์ดํธ ๊ถํ์ ๋ถ์ฌ
-
-
-
steps
-
name: Enable corepack: Node.js์ ํจํค์ง ๋งค๋์ (Corepack)๋ฅผ ํ์ฑํ, ํด๋น ํ๋ก์ ํธ๋ yarn berry๋ฅผ ์ฌ์ฉํ๋ฏ๋ก corepack์ ํตํด ํจํค์ง์ yarn berry ๋ฒ์ ์ ๋ณด์ฅ๋๋๋ก ๋ณด์ฅํด์ค -
name: Install Node.js: Node.js ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ก์ด๋ฅด๋ชจ Node๋ฅผ v18๋ก ์ค์น, yarn cache๋ฅผ ํ์ฑํํ์ฌ ๋น๋ ์๋๋ฅผ ํฅ์ -
name: Install Dependencies: ํจํค์ง ์์กด์ฑ ์ค์น -
name: Configure AWS credentials: AWS CLI ์คํ์ ์ํ credentials ์ค์ -
name: Deploy: sst ๋ฐฐํฌ ์ํ
-
-
-
notification jobs
-
environment
-
runs-on: ubuntu-latest: GitHub์ด ์ ๊ณตํ๋ ์ต์ ์ Ubuntu ์ด์์ฒด์ ์์ ์ํฌํ๋ก์ฐ๋ฅผ ์คํ -
needs: release: release jobs ์์ ์๋ฃ๋ ํ์๋ง ์คํ
-
-
steps
name: Send Slack notification: release jobs ์์ ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ Slack ์๋ฆผ์ผ๋ก ์ ์ก
-
-
name: development release
on:
push:
branches: [dev]
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Enable corepack
- uses: actions/checkout@v4
- run: corepack enable
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: "yarn"
- name: Install Dependencies
run: yarn install
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: Deploy
env:
NEXT_PUBLIC_NODE_ENV: 'production'
run: |
yarn run deploy:dev
notification:
runs-on: ubuntu-latest
needs: release
if: always()
steps:
- name: Send Slack notification
uses: slackapi/slack-github-action@v1.26.0
with:
channel-id: "์ฑ๋ ID"
slack-message: "${{ github.repository }} ๊ฐ๋ฐ ๋ฐฐํฌ ${{ needs.release.result == 'success' && 'โ
์ฑ๊ณต' || 'โ ์คํจ'}}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}-
production release workflow์ ๊ฒฝ์ฐ main ๋ธ๋์น์ commit์ด push๋๋ ๊ฒฝ์ฐ์ ์ํ
-
release jobs
-
steps
-
name: Create Release Pull Request-
title: "chore: Development release": ์์ฑ๋ PR์ ํ์ดํ -
commit: "chore: Development release": ์์ฑ๋ commit ๋ด์ฉ -
version: yarn changeset:version: .changeset ํด๋๋ด ๋ณ๊ฒฝ์ฌํญ์ด ์์ฑ๋ md ํ์ผ ์กด์ฌ์ ์คํ๋ ๋ช ๋ น์ด๋ก md ํ์ผ ๊ธฐ๋ฐ์ผ๋ก package.json์ version, CHANGELOG.md ์ ๋ฐ์ดํธํ๊ณ PR์ ์์ฑ -
publish: yarn release: ๋ฒ์ ์ด ์ ๋ฐ์ดํธ๋ ๊ฒฝ์ฐ ์คํ๋ ๋ช ๋ น์ด๋ก Github ๋ฆด๋ฆฌ์ฆ, ํ๊ทธ๊ฐ ์์ฑ๋๊ณ Github repository์ ์ถ๊ฐ, ์ฑ๊ณต์ outputs.published ๊ฐ "true" ๋ฐํ
-
-
-
-
update-dev-brand jobs: main ๋ธ๋์น์ version๊ณผ dev ๋ธ๋์น์ version ๋๊ธฐํ ์์
-
steps
-
name: Checkout dev branch: dev ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ ์ฒดํฌ์์ํ๊ณ ์ดํ step๋ค ๋ํ ํด๋น ํ๊ฒฝ์์ ์์ ์ํ -
name: Get release version-
curl "https://,,,": URL์ HTTP ์์ฒญ์ ์ ์ก -
- H ",,,": ์์ฒญ ํค๋ ์ค์ -
jq -r .tag_name: jq๋ JSON ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ ํธ๋ฆฌํฐ์ด๋ฉฐ, -r ํ๋๊ทธ๋ฅผ ํตํด ๋ฌธ์์ด ํํ๋ก ๋ฐํํ๋๋ก ํ๋ฉฐ, .tag_name์ JSON ๊ฐ์ฒด์์ tag_name ํ๋๋ฅผ ์ถ์ถ -
if [-z "$version"]; then ,,, else ,,, fi: -z ์ต์ ์ ํตํด version ๋ณ์๊ฐ ๋น์ด์๋์ง ํ์ธํ version ๋ณ์์ ๊ฐ ํ ๋น -
echo "VERSION=${version}" >> $GITHUB_ENV: VERSION ํ๊ฒฝ๋ณ์์ version ๊ฐ ํ ๋น
-
-
name: Delete changeset markdown file: .changeset ํด๋ ๋ด ๋ณ๊ฒฝ์ฌํญ์ ๋ด๊ณ ์๋ ๋งํฌ๋ค์ด ํ์ผ ์ ๊ฑฐ -
name: Update package.json version-
jq --arg version "$VERSION": VERSION ํ๊ฒฝ ๋ณ์ ๊ฐ์ version ๋ณ์๋ก ์ ๋ฌ -
'.version = $version' package.json > tmp.json: package.json์ version ํ๋ ๊ฐ์ ์์์ ์ ์ฅ๋ version ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ๋ ๋ด์ฉ์ tmp.json ํ์ผ ์์ฑํ์ฌ ์ ์ฅ -
mv tmp.json package.json: tmp.json ๋ด์ฉ์ package.json์ ๋ฎ์ด์์ ์ ๋ฐ์ดํธ
-
-
name: Create commit and push to dev branch: ๋ณ๊ฒฝ์ฌํญ๋ค์ commit ์์ฑํ dev ๋ธ๋์น์ push
-
-
-
name: production release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Enable corepack
- uses: actions/checkout@v4
- run: corepack enable
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: "yarn"
- name: Install Dependencies
run: yarn install
- name: Create Release Pull Request
id: changesets
uses: changesets/action@v1
with:
title: "chore: Production release"
commit: "chore: Production release"
version: yarn changeset:version
publish: yarn release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Configure AWS credentials
if: steps.changesets.outputs.published == 'true'
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: Deploy
if: steps.changesets.outputs.published == 'true'
env:
NEXT_PUBLIC_NODE_ENV: 'production'
run: |
yarn run deploy:prod
outputs:
published: ${{ steps.changesets.outputs.published }}
update-dev-branch:
runs-on: ubuntu-latest
needs: release
permissions:
contents: write
if: needs.release.outputs.published == 'true'
steps:
- uses: actions/checkout@v4
with:
ref: dev
- name: Get current release version
run: |
version=$(curl --silent -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" "https://api.github.com/repos/${{ github.repository }}/releases/latest"| jq -r .tag_name)
if [ -z "$version" ]; then
version="0.0.1"
else
version="${version#v}"
fi
echo "VERSION=${version}" >> $GITHUB_ENV
- name: Delete changeset markdown file
run: |
find .changeset -type f -name "${VERSION}.md" -delete
- name: Update package.json version
run: |
jq --arg version "$VERSION" '.version = $version' package.json > tmp.json && mv tmp.json package.json
- name: Create commit and push to dev branch
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add .
git commit -m "chore: Update package.json version to $VERSION"
git push origin dev
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
notification:
runs-on: ubuntu-latest
needs: release
if: always()
steps:
- name: Send Slack notification
if: needs.release.outputs.published == 'true'
uses: slackapi/slack-github-action@v1.26.0
with:
channel-id: "์ฑ๋ ID"
slack-message: "${{ github.repository }} ์์ฉ ๋ฐฐํฌ ${{ needs.release.result == 'success' && 'โ
์ฑ๊ณต' || 'โ ์คํจ'}}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}changeset์ ๊ฒฝ์ฐ ๋ชจ๋ ธ๋ ํฌ ํ๊ฒฝ์์๋ ์ํธ์์กดํ๋ ํจํค์ง๋ค์ ์ผ๊ด์ฑ์ ์ ์ง ๋ฐ ์ฝ๊ฒ ๋ฐฐํฌ ์ง์ํฉ๋๋ค.
yarn beryy์ ๊ฒฝ์ฐ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ง์ํ๋ฉฐ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฃจํธ ๊ฒฝ๋ก์ package.json์ workspaces๋ฅผ ์ถ๊ฐํฉ๋๋ค.
{
"workspaces": [
"packages/*"
]
}์ดํ ํ๋ก์ ํธ ๋ฃจํธ์ packages ํด๋ ์์ฑ ํ packages ํด๋ ๋ด ํ๋ก์ ํธ๋ค์ ์์ฑํ๋ฉด packages ํ์ ๋ชจ๋ ๋๋ ํ ๋ฆฌ๋ค์ workspace๋ก ์ธ์ํ๊ฒ ๋ฉ๋๋ค.
๊ฐ workspace์์ ๋ช
๋ น์ด ์ฌ์ฉํ๋ ค๋ฉด yarn workspace ํจํค์ง์ด๋ฆ ํ์์ผ๋ก ์คํํฉ๋๋ค.
changeset์ ๊ฐ ํจํค์ง์ ๋ํ ๋ฒ์ ๊ณผ ๋ฐฐํฌ๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์ง์ํ๋ฉฐ ๋ณ๊ฒฝ์ฌํญ ๋ด์ฉ์ ์์ฑํ๋ .chnageset ํด๋ ๋ด ๋งํฌ๋ค์ด ํ์ผ์ ์๋์ ๊ฐ์ด ์์ฑ
---
"ํจํค์ง ์ด๋ฆ": patch | minor | major
---
CHANGELOG.md์ ์์ฑ๋ ๋ด์ฉ ์์ฑ๊ฐ ํํค์ง์ package.json์ ์์ฑ๋ ํ๋ก์ ํธ ์ด๋ฆ์ ์์ฑํ๋ฉด ํด๋น ํจํค์ง์ ๋ํ ๋ฒ์ ๊ณผ ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.