2026. 1. 22. 14:37ใProjects/WooniePangee

์์ฝ
yml ๋ฌธ์ ์์ฑํด์ github actions๋ก prettier, lint, tsc ์ฒดํฌํ๊ณ vercel ๋ฐฐํฌํ๊ธฐ
์ฝ๋๋๋น ์นํ์ด์ง์์ ๋ฆฌ๋ทฐ ์ธํ ํ๊ธฐ
๋ชฉ์ฐจ
1. github_actions๋ก CI ๋๋ฆฌ๊ธฐ
2. ci.yml - lint/tsc ์ฒดํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ์ ๋ฐ์ดํธ
3. deploy.yml - main vercel ๋ฐฐํฌ
4. pr-title-check.yml - pr title ๊ฒ์ฌ
1. github actions๋ก CI ๋๋ฆฌ๊ธฐ
ci ์ธํ ์ github actions๋ก ํ ๊ฑฐ์ฌ์ ์ด์ ์์ฑํ๊ณ .github/workflows์ yml ํ์ผ๋ค์ ์์ฑํด๋ดค๋ค.
ํ ์ผ๋ค์ ์๋์ ๋ด์ฉ๋ค์ด๋ค.
- lint/tsc ์ฒดํฌ
- main vercel ๋ฐฐํฌ
- CodeRabbit ๋ฆฌ๋ทฐ
- pr title ๊ฒ์ฌ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ์ ๋ฐ์ดํธ
2. ci.yml - lint/tsc ์ฒดํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ์ ๋ฐ์ดํธ
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
lint-and-typecheck:
name: Lint & Type Check
runs-on: ubuntu-latest
steps:
- name: Checkout code #1. ์ ์ฅ์ ์ฝ๋ ๋ค์ด๋ก๋
uses: actions/checkout@v4
- name: Setup Node.js #2. Node.js ํ๊ฒฝ ์ค์
uses: actions/setup-node@v4
with:
node-version: '22.x'
cache: 'pnpm' # pnpm ์บ์๋ฅผ ํ์ฑํํ์ฌ ์ค์น ์๋ ํฅ์
- name: Install pnpm #3. pnpm ํจํค์ง ๋งค๋์ ์ค์น
uses: pnpm/action-setup@v4
with:
version: 10.19.0
- name: Install dependencies #4. ํ๋ก์ ํธ ์์กด์ฑ ์ค์น
run: pnpm install --frozen-lockfile --prefer-offline
# --frozen-lockfile: lock ํ์ผ๊ณผ ์ ํํ๊ฒ ์ผ์นํ๋ ๋ฒ์ ์ค์น
# --prefer-offline: ๊ฐ๋ฅํ ์บ์๋ฅผ ์ฌ์ฉ
- name: Run Prettier #5. Prettier๋ก ํฌ๋งทํ
๊ฒ์ฌ
run: pnpm exec prettier --check "src/**/*.{js,jsx,ts,tsx,json,css,md}"
- name: Run ESLint #6. ESLint๋ก ์ฝ๋ ํ์ง ๊ฒ์ฌ (๊ฒฝ๊ณ ๋ ํ์ฉx)
run: pnpm exec eslint "src/**/*.{js,jsx,ts,tsx}" --max-warnings=0
- name: Run TypeScript Check #7. TS ํ์
๊ฒ์ฌ
run: pnpm exec tsc --noEmit
CI๋ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๋นจ๋ฆฌ ๋ฉ์ถฐ์ ๋น์ฉ์ ์ค์ฌ์ผ ํ๋ค.
๋ณด๋ฉด ๋ฒ์ ์ด ๋ช ์๋์ด ์๋ ๊ฒ๋ค์ด ์๋๋ฐ latest๋ฅผ ์ง์ํ์ง ์์์ ์ง์ ์์ฑํด์ฃผ์ด์ผ ํ๋ค๊ณ ํ๋ค.
๋ฒ์ ํ์ธ์ ์๋ ์ ๋ชฉ์ ๊ฑธ์ด๋ ๋งํฌ๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
- ์ ์ฅ์ ์ฝ๋๋ฅผ ๋ค์ด ๋ฐ๋๋ค. ์ดํ ๋ชจ๋ ๋จ๊ณ๋ ์ ์ฅ์ ์ฝ๋๊ฐ ์์ด์ผ ์คํ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ๋ก์ ํธ ํจํค์ง ๋งค๋์ ๋ฅผ pnpm์ผ๋ก ์ง์ ํ๋ค. ๋ค์ ์ด์ด์ง ์์กด์ฑ ์ค์น ์ ์ ํ์ํ๋ค.
- Node.js๋ณด๋ค ๋จผ์ ์ค์นํ๋ ์ด์ ๋ node.js์์ pnpm ์บ์๋ฅด ์ฌ์ฉํ๋ ค๋ฉด pnpm ์ค์น๊ฐ ๋จผ์ ์ด๋ฃจ์ด์ ธ์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
- pnpm์ ๋ด๋ถ์ ์ผ๋ก Node.js๋ก ์์ฑ๋ CLI ๋๊ตฌ์ด๋ฏ๋ก, Node ํ๊ฒฝ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ธํ ์ด ํ์ํ๋ค.
- cache: pnpm์ ์ค์ ํ๋ฉด pnpm ์บ์๋ฅผ ํ์ฑํํด์ ์ค์น ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋ค.
pnpm์ ๋งค๋ฒ ์์กด์ฑ ํจํค์ง๋ฅผ ์ธํฐ๋ท์์ ๋ค์ด๋ก๋ํ์ฌ node_modules ํด๋๋ฅผ ์์ฑํ๋ค.
์ฌ๊ธฐ์ ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ ๋ฒ ๋ฐ์ ํจํค์ง๋ Github ์๋ฒ์ ์ ์ฅํ์ฌ ๋ค์ CI์์ ์ฌ๋ค์ด๋ก๋๋ฅผ ํ์ง ์๋๋ค.
์๋ ๊ฐ์ ๋ฐ ๋คํธ์ํฌ ์ด์ ๊ฐ์์ ํ์ํ๋ค.
4. Install dependencies (pnpm install --frozen-lockfile --prefer-offline)
- ๊ฒ์ฌํ prettier, eslint, tsc๋ ๋ชจ๋ node_modules์ ์์กดํ์ฌ, ์์กด์ฑ ์ค์น๊ฐ ํ์ํ๋ค.
- --frozen-lockfile๋ก ํญ์ ๊ฐ์ ๋ฒ์ ์ ์ค์นํ๋ฉด ํ๊ฒฝ ๋ถ์ผ์น๋ฅผ ์ฐจ๋จํ ์ ์๋ค.
- --prefer-offline์ผ๋ก ์ญ์ ์บ์๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฌ ๋น์ฉ์ ์๋ ์ ์๋ค.
5. Run Pretteir, Run ESLint, Run TypeScript Check
- pnpm์ผ๋ก prettier, eslint, type check๋ฅผ ์งํํ๋ค.
- prettier ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๋ฉฐ, ์ฝ๋ ์คํ์ผ ๋ฌธ์ ๋ฅผ ์ด๊ธฐ์ ์ฆ์ ์ฐจ๋จํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋น ๋ฅธ ์์๋ก ์๋ค.
- ESLint๋ --max-warnings=0์ผ๋ก ๊ฒฝ๊ณ ๋ ํ์ฉํ์ง ์๋๋ก ํ์ง ๊ธฐ์ค์ ๊ฐ์ ํ๋๋ก ํ๋ค.
- tsc ์ฒดํฌ๋ ๊ฐ์ฅ ๋๋ฆฌ๊ณ ๋ฌด๊ฑฐ์ด ๋์์ด๋ค. ์ด์ฐจํผ pretteir, eslint๊ฐ ํ์๋ก ์ง์ผ์ ธ์ผํ ๋์์ด๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง์ ์๋ค.
3. deploy.yml - main vercel ๋ฐฐํฌ
name: Deploy
on:
push:
branches: [main]
# CI ์ํฌํ๋ก์ฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ํ ์คํ
workflow_run:
workflows: ["CI"]
types: [completed]
branches: [main]
jobs:
deploy:
name: Deploy to Vercel
# CI ์ํฌํ๋ก์ฐ๊ฐ ์ฑ๊ณตํ ๊ฒฝ์ฐ์๋ง ์คํ
if: |
github.event_name == 'push' ||
(github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Deploy to Vercel
uses: amondnet/vercel-action@v41.1.4
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: '--prod'
github-token: ${{ secrets.GITHUB_TOKEN }}
1. on ์ค์
- push ํค์๋๋ก main ๋ธ๋์น์ pushํ ๋ ์ฆ์ ๋ฐฐํฌํ๋๋ก ํ๋ค. 1์ธ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฒฐํ๋ค.
- workflow_run์ผ๋ก CI ์ํฌ ํ๋ก์ฐ๊ฐ ๋๋ ํ์ ๋์ํ๋๋ก ํ๋ค. ํ ์คํธ๋ฅผ ํต๊ณผํ ์ฝ๋๋ง ๋ฐฐํฌํ๋ ๊ฒ์ด๋ค.
2. jobs ์ค์
- if ์กฐ๊ฑด๋ฌธ์ด ๋ค์ด๊ฐ์๋ค. 'push'๋ก ์ง์ ํธ๋ฆฌ๊ฑฐ ๋์๊ฑฐ๋', 'ci๊ฐ ์ฑ๊ณตํ์ ๋๋ง' ์๋ ๋ด์ฉ์ ์คํํ๋๋ก ํ๋ค.
- ์ด ์กฐ๊ฑด์ด ์์ผ๋ฉด ๋ญ๊ฐ ๊ผฌ์ฌ์ CI๊ฐ ์คํจํด๋ Deploy๊ฐ ์คํ๋ ์๋ ์๋ค.
- vercel์ด ๋ฐฐํฌํ ์์ค์ฝ๋๋ฅผ checkout์ผ๋ก ๊ฐ์ ธ์ค๊ณ , ๋ฒ์
๋ก ๋ฐฐํฌ๋ฅผ ์งํํ๋ค.
amondnet/vercel-action์ ์ฌ์ฉํ๋ค.
→ vercel cli๋ฅผ ๋์ ์คํํด์ฃผ๋ Action์ผ๋ก, ๋ด๋ถ์์ ํ๋ก์ ํธ ์๋ณ, ๋น๋, ๋ฐฐํฌ๊น์ง ์ํํ๋ค.
3. vercel ๊ด๋ จ ์ค์ ๊ฐ
- vercel-token : github๊ฐ vercel ๊ณ์ ์ผ๋ก ๋ฐฐํฌํ ๊ถํ (ํ์)
- vercel-org-id, vercel-project-id : ์ด๋ค ์กฐ์ง/ํ๋ก์ ํธ์ ๋ฐฐํฌํ ์ง ๋ช ์
- vercel-args: '--prod' : preview๊ฐ ์๋ production์ผ๋ก ๋ฐฐํฌ
- github-token : ๋ฐฐํฌ ๊ฒฐ๊ณผ๋ฅผ github pr/commit์ ์ฐ๊ฒฐํ์ฌ ๋ฐฐํฌ ์ํ ํ์
์ฌ๊ธฐ์ github-token์ ๋ด๊ฐ ๋ฐ๋ก ์ค์ ํ์ง ์์๋ ๋์ง๋ง ๋ฒ์ ํ ํฐ๋ค์ ๋ด๊ฐ ๋ฐ์์ ๋ ํฌ์งํ ๋ฆฌ ์ค์ ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
vercel-token ๋ฐ๊ธฐ

vercel์ ํ๋กํ์ ๋๋ฅด๋ฉด ๋์ค๋ ํ์ ์์ Settings - Tokens - Create๋ก ์ป์ ์ ์๋ค.
ํ ํฐ๊ฐ์ ๋ชจ๋ฌ๋ก ํ ๋ฒ ๋ณด์ฌ์ฃผ๊ณ ๋ค์๋ ์๋ณด์ฌ์ฃผ๋๊น ํ์ํ๋ฉด ์ ๊ฐ์งํด์ผํ๋ค.
organization id, project id๋ ์กฐ์ง, ํ๋ก์ ํธ์ ๊ฐ Settings/General/ ์์ ์ป์ ์ ์๋ค.



4. pr-title-check.yml - pr title ๊ฒ์ฌ
name: PR Title Check
on:
pull_request:
types: [opened, edited, synchronize]
jobs:
validate-title:
name: Validate PR Title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |
feat
fix
docs
style
refactor
test
chore
requireScope: false
subjectPattern: ^#\\d+-.+
subjectPatternError: |
PR ์ ๋ชฉ ํ์์ด ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.
์์: feat/#13-์ด๋ฏธ์ง-์
๋ก๋-์ถ๊ฐ
pr ํ์ง ์ ์ง๋ฅผ ์ํด์ ์ถ๊ฐํ๋ค. ์๊ทผ pr ์ ๋ชฉ์์ ์ค์๋ฅผ ๋ง์ดํด์ ๋ฃ์๋ค.
1. on ์ค์
- pr ์์ฑ, ์ ๋ชฉ ์์ , ์ปค๋ฐ ์ถ๊ฐ๋ง๋ค ๊ฒ์ฌ ํ๋ค.
2. amannn/action-semantic-pull-request
- PR ์ ๋ชฉ์ ๋ถ์ํด์ type์ ํด๋นํ๋ ํ์์ธ์ง ํ์ธํ๋ค.
ํ์ฉํ๋ ํ์ ์ ๊ฐ๋จํ๊ฒ๋ง ๋์๋ค.
3. GITHUB_TOKEN
- gihub token์ ์ฃผ์ด์ PR ์ ๋ณด ์กฐํ ๊ถํ์ ์ค๋ค.
4. subjectPattern
- feat/#13-description๊ณผ ๊ฐ์ด /#num์ ๋ถ์ด๋๋ก ๊ฐ์ ํ๋ค.
5. ์ฝ๋๋๋น ๋ฆฌ๋ทฐ
์ฝ๋๋๋น๋ yml๋ก ์์ฑํ ๊น ํ๋ค๊ฐ ๊ทธ๋ฅ ์น์์ ์ธํ ํ๋ค.
CodeRabbit: AI Code Reviews
CodeRabbit: AI Code Reviews
www.coderabbit.ai

๋ก๊ทธ์ธํ๊ณ organization ์์ฑํด์ github repo๋ฅผ ๋ถ๋ฌ์์ ์ธํ ํ๋ฉด ๋๋ค.
๊ธฐ๋ณธ ์ธํ ์ผ๋ก ๋๋ฉด ๋ค์ด์ด๊ทธ๋จ๋ ๊ทธ๋ฆฌ๊ณ ์๋ ์ฐ๊ณ ์ด๊ฒ์ ๊ฒ ํ๋๊ฒ ๋ง์์ ๊บผ์ผํ๋ ๊ฒ ์ข ๋ง๋ค.
์ด๊ฑด ์์ธํ ์์๋ณด์ง๋ ์๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ธํ ํ ๊ฑฐ ๊ฑฐ์ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ผ๋ค.
์ธํ ๋ง๋ค ํ์ดํ ์์ ๋ถ์ info ๋ฒํผ์ผ๋ก ํดํ์ ๋์์ค์ ๋ฐ๋ก ๋ฌด์จ ์ธํ ์ธ์ง ํ์ธํ ์ ์๋ค.
6. ์ธํ ์๋ฃ

์ฐธ๊ณ
'Projects > WooniePangee' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ด๋ฏธ์ง ๋ค์ด ๋งํฌ ๋ฐ์ดํฐ ๋ฃ๊ธฐ (feat. cloudflare) (0) | 2026.02.22 |
|---|---|
| Three.js๋ก ์นํ์ด์ง์ 3D ๊ทธ๋ํฝ ๋ฃ๊ธฐ (feat.blender) (0) | 2026.02.02 |
| ESLint + Prettier์์ Delete cr ์๋ฌ๊ฐ ๋๋ ์ด์ (0) | 2026.01.28 |
| ํ๋ก์ ํธ ์์ : ๋ง์ค์ฝํธ ์๊ฐ ์นํ์ด์ง MVP (1) | 2026.01.22 |
GitHub