์น ์๋น์ค ๊ฐ๋ฐ์ ์ํ ํ๋ก์ ํธ ์ด๊ธฐ ์ธํ ๊ฐ์ด๋
์๋ ํ์ธ์! ์ค๋์ ์ด๋ค ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ์น ์๋น์ค ๊ฐ๋ฐ์ ์์ํ ๋ ํ์ํ ๊ธฐ๋ณธ์ ์ธ ์ธํ ๊ณผ ์ค๋น์ฌํญ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ํ๋ก์ ํธ๋ฅผ ์์ํ ๋๋ง๋ค ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ธฐ๋ณด๋ค๋, ์ฒดํฌ๋ฆฌ์คํธ์ฒ๋ผ ํ์ฉํ ์ ์๋ ๊ฐ์ด๋๋ฅผ ๋ง๋ค์ด ๋ดค์ต๋๋ค. ์ด ๊ธ์ ๋ฐ๋ผ๊ฐ๋ค ๋ณด๋ฉด ํ๋ก์ ํธ ์ด๊ธฐ ์ธํ ์ ๋๋ฑ ๋ง์น ์ ์์ ๊ฑฐ์์!
์์คํ ๊ตฌ์๋ ์์ฑ
1. ์์คํ ์ํคํ ์ฒ ์ค๊ณ
ํ๋ก์ ํธ์ ๊ธฐ์ ์ ๊ตฌ์กฐ๋ฅผ ์๊ฐํํ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์.
๊ฟํ:
- Draw.io, Lucidchart, Miro ๋ฑ์ ๋๊ตฌ ํ์ฉ
- ์ํคํ ์ฒ๋ ๋๋ฌด ๋ณต์กํ์ง ์๊ฒ, ํ์ ๋ชจ๋๊ฐ ์ดํดํ ์ ์๋ ์์ค์ผ๋ก ์์ฑ
- ๋ฐฑ์๋, ํ๋ก ํธ์๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ธ๋ถ API ์ฐ๋ ๋ฑ์ ๋ช ํํ ๊ตฌ๋ถ
2. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
์๋น์ค์ ํ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํฉ๋๋ค.
๊ฟํ:
- ERD(Entity-Relationship Diagram)๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ์๊ฐํ
- ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์ค๊ณ ํ ๊ฒ
3. API ์ค๊ณ
๋ฐฑ์๋์ ํ๋ก ํธ์๋ ๊ฐ์, ๋๋ ์ธ๋ถ ์๋น์ค์์ ํต์ ๋ฐฉ์์ ์ ์ํฉ๋๋ค.
๊ฟํ:
- RESTful API ์ค๊ณ ์์น์ ๋ฐ๋ฅด๊ณ , Swagger ๊ฐ์ ๋๊ตฌ๋ก ๋ฌธ์ํ
- ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ฒซ์ฝ๋ถํฐ!
๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
1. ์ฝ๋ ์๋ํฐ/IDE ์ธํ
- VS Code, IntelliJ, WebStorm ๋ฑ ์ ํธํ๋ ์๋ํฐ ์ค์น
- ํ์ ํ์ฅ ํ๋ก๊ทธ๋จ/ํ๋ฌ๊ทธ์ธ:
- ์ฝ๋ ํฌ๋งทํฐ (Prettier, ESLint ๋ฑ)
- ํ ๋ง ๋ฐ ์์ด์ฝ
- ์ธ์ด๋ณ ํ์ฅ ํ๋ก๊ทธ๋จ
- Git ๊ด๋ จ ํ์ฅ ํ๋ก๊ทธ๋จ
2. ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ธํ
- Git ์ค์น ๋ฐ ์ค์
- GitHub/GitLab/Bitbucket ๊ณ์ ์ฐ๊ฒฐ
.gitignoreํ์ผ ์ค์ (node_modules, build ํด๋, ํ๊ฒฝ๋ณ์ ํ์ผ ๋ฑ)- ์ปค๋ฐ ๋ฉ์์ง ์ปจ๋ฒค์ ์ค์ (์: Conventional Commits)
3. ํจํค์ง ๋งค๋์
- npm/yarn/pnpm ์ค์น (Node.js ๊ธฐ๋ฐ)
- pip (Python ๊ธฐ๋ฐ)
- Composer (PHP ๊ธฐ๋ฐ)
- ๋ฑ๋ฑ ํ์ํ ํจํค์ง ๋งค๋์ ์ค์น
GitHub ์ธํ ๊ฐ์ด๋
1. ์ ์ฅ์(Repository) ๊ตฌ์กฐ ์ค์
๊ฟํ:
- ๋ชจ๋ ธ๋ ํฌ(Monorepo) vs ๋ฉํฐ๋ ํฌ(Multi-repo) ๊ณ ๋ฏผ
- README.md ์ด์๊ฒ ๊พธ๋ฏธ๊ธฐ
.gitignore์ธํ (์ธํ ๋ฆฌ์ ์ด์ ์ดํด๋ฆฝ์ค์ ํผ์ฉํ๊ณ ์๋์ง?)
2. ๋ธ๋์น ์ ๋ต ์๋ฆฝ
๊ฟํ:
- Git-flow(master, develop, feature, release, hotfix) or GitHub-flow(main, feature)
- ๋ธ๋์น ๋ค์ด๋ฐ ์ปจ๋ฒค์ (์: feature/login, bugfix/user-profile)
- ๋ธ๋์น ๋ณดํธ ๊ท์น์ ์ค์ ํ์ฌ ์ค์๋ก ์ธํ ์ฝ๋ ์์ ๋ฐฉ์ง
- master ๊ถํ์ ํ๋ช ์๊ฒ!
3. PR(Pull Request) ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค ์ค์
๊ฟํ:
- PR ํ ํ๋ฆฟ์ ๋ง๋ค์ด ๋ณ๊ฒฝ ๋ด์ฉ, ๊ด๋ จ ์ด์, ํ ์คํธ ๋ฐฉ๋ฒ ๋ฑ์ ๋ช ์
- GitHub Actions โ PRโ ๋ฆฐํธ ๊ฒ์ฌ ๋์
4. ์ด์(Issue) ๋ฐ ํ๋ก์ ํธ ๊ด๋ฆฌ
๊ฟํ:
- ์ด์ ํ ํ๋ฆฟ์ ๋ง๋ค์ด ๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์์ฒญ ๋ฑ์ ํ์์ ํ์คํ
- GitHub Projects ์นธ๋ฐ ๋ณด๋๋ฅผ ๊ตฌ์ฑ
- ์ด์์๋ ํญ์ ๋ด๋น์(Assignee), ๋ผ๋ฒจ(Label), ๋ง์ผ์คํค(Milestone)์ ์ง์
- ์งง์ ๋ชฉํ๋ ๋ง์ผ์คํค, ๊ธด ๋ชฉํ๋ ํ๋ก์ ํธ๋จ์
- ๋ฒ๊ทธ ๋ฆฌํฌํธ์ ์ ์ ํ ๋ผ๋ฒจ ์ถ๊ฐ
5. GitHub Actions ํ์ฉ
๊ฟํ:
- CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์ฌ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ์๋ํ
- ์ค๋ฒ์คํ์ ํญ์ ๊ฒฝ๊ณ
- SonarQube ํ์ฉ
- Dependabot ํ์ฉ
ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค๊ณ
1. ํด๋ ๊ตฌ์กฐ ์ค๊ณ
project/
โโโ src/ # ์์ค ์ฝ๋
โโโ public/ # ์ ์ ํ์ผ
โโโ tests/ # ํ
์คํธ ์ฝ๋
โโโ docs/ # ๋ฌธ์
โโโ config/ # ์ค์ ํ์ผ
โโโ scripts/ # ์ ํธ๋ฆฌํฐ ์คํฌ๋ฆฝํธ
2. ๋ช ๋ช ๊ท์น ์ ํ๊ธฐ
- ํ์ผ๋ช : camelCase vs kebab-case vs snake_case
- ์ปดํฌ๋ํธ/ํด๋์ค: PascalCase
- ํจ์/๋ณ์: camelCase
- ์์: UPPER_SNAKE_CASE
๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ํ์ผ
1. ํ๊ฒฝ ๋ณ์ ์ค์
.env,.env.development,.env.productionํ์ผ ์ค์ - ํ๊ฒฝ๋ณ ๋ณ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ๊ฒฐ์
- ๋ฏผ๊ฐ ์ ๋ณด ๊ด๋ฆฌ ๋ฐฉ๋ฒ ๊ฒฐ์ (API ํค, ๋น๋ฐ๋ฒํธ ๋ฑ)
2. ์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋๊ตฌ
- ESLint ์ค์ (JavaScript/TypeScript)
- Prettier ์ค์
- StyleLint (CSS)
- ํด๋น ์ธ์ด์ ๋ง๋ ์ ์ ๋ถ์ ๋๊ตฌ
์์ .eslintrc.json ํ์ผ:
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"react",
"@typescript-eslint",
"prettier"
],
"rules": {
"prettier/prettier": "error",
"react/react-in-jsx-scope": "off",
"no-console": "warn",
"no-unused-vars": "warn"
}
}
๋ฐฑ์๋ ๊ธฐ๋ณธ ์ธํ
1. ์๋ฒ ํ๊ฒฝ ๊ตฌ์ฑ
- ์น ์๋ฒ ์ ํ (Nginx, Apache ๋ฑ)
- ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ์ ํ (Express, Django, Spring Boot, Laravel ๋ฑ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ (MySQL, PostgreSQL, MongoDB ๋ฑ)
- ์บ์ฑ ์์คํ ์ ํ (Redis, Memcached ๋ฑ)
์ฃผ์ ๊ธฐ์ ์ ํ ์์์ ๊ทผ๊ฑฐ:
Spring Boot, Spring Data JPA
- ์คํ๋ง ๋ถํธ๋ ๋ง์ ์ค์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ถ๊ณ ์๊ณ Apache Tomcat์ด ๋ด์ฅ๋์ด ์์ต๋๋ค.
- ์คํ๋ง Data JPA๋ JPA๋ฅผ ๋ ์ฝ๊ณ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
Spring Security + JWT
- ์คํ๋ง ์ํ๋ฆฌํฐ๋ ๋ณด์๊ณผ ๊ด๋ จ๋ ๋ง์ ์ต์ ์ ์ ๊ณตํ๋ฏ๋ก ์ผ์ผ์ด ๋ณด์ ๊ด๋ จ ๋ก์ง์ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค.
- JWT๋ ์๋ฒ๊ฐ ํ ํฐ์ ๋ฐ๊ธํ๊ณ ๋ณด๋ด์ฃผ๋ฉด, ํ ํฐ์ด ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ํ์ฅ์ฑ์ด ์ข์ต๋๋ค. ๋ํ, ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ๋ค์ํ ๋๋ฉ์ธ์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ฝ์ต๋๋ค.
MySQL
- ์คํ ์์ค ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ด์ ์ฌ์ฉํ์ต๋๋ค.
- ์ ํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ํํ์ต๋๋ค.
Docker
- ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ๋์ผํ ๊ฐ๋ฐํ๊ฒฝ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ์ต๋๋ค.
2. API ์ค๊ณ
- REST API vs GraphQL ์ ํ
- API ์๋ํฌ์ธํธ ๋ช ๋ช ๊ท์น ์ ํ๊ธฐ
- API ๋ฌธ์ํ ๋๊ตฌ ์ ํ (Swagger, Postman ๋ฑ)
- ์๋ฌ ํธ๋ค๋ง ์ ๋ต ๊ฒฐ์
3. ์ธ์ฆ/์ธ๊ฐ ์์คํ
- ์ธ์ฆ ๋ฐฉ์ ์ ํ (JWT, OAuth, Session ๋ฑ)
- ์ฌ์ฉ์ ์ญํ ๋ฐ ๊ถํ ์ค๊ณ
- ๋ณด์ ์ค์ (CORS, XSS ๋ฐฉ์ง, CSRF ๋ฐฉ์ง ๋ฑ)
ํ๋ก ํธ์๋ ๊ธฐ๋ณธ ์ธํ
1. UI ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ
- React, Vue, Angular, Svelte ๋ฑ
- CSS ํ๋ ์์ํฌ (Tailwind CSS, Bootstrap, MUI ๋ฑ)
- ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Redux, MobX, Zustand, Recoil ๋ฑ)
2. ๋ผ์ฐํ ์ค์
- ํด๋ผ์ด์ธํธ ๋ผ์ฐํ ์ค๊ณ
- ํ์ด์ง ๊ตฌ์กฐ ์ค๊ณ
- ๋ ์ด์์ ์ปดํฌ๋ํธ ์ค๊ณ
3. ์์ ๊ด๋ฆฌ
- ์ด๋ฏธ์ง, ํฐํธ, ์์ด์ฝ ๋ฑ ์์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ
- CDN ํ์ฉ ๋ฐฉ์
ํ๋ก ํธ์๋ ์๋ฒ ์ธํ๋ผ ์์:
- S3์ CloudFront๋ก ๊ตฌ์ฑ
- S3์ ์ ์ ์ธ ์นํธ์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ, ์ ์ ์ธ ์ปจํ ์ธ ์ ๊ฐ๋จํ๊ณ ์ ์ฐํ๊ฒ ์ ๊ทผ
- Cloud Front๋ฅผ ํตํด, ์น ์ปจํ ์ธ ๋ฅผ ์ฌ์ฉ์์ ๊ฐ๊น์ด ๊ณณ์ ์ ์กํจ์ผ๋ก์จ ์ ์ก์๋๋ฅผ ๋์
ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ฑ
1. ํ ์คํธ ๋๊ตฌ ์ ํ
- ๋จ์ ํ ์คํธ (Jest, Mocha, Pytest ๋ฑ)
- ํตํฉ ํ ์คํธ (Supertest, pytest-django ๋ฑ)
- E2E ํ ์คํธ (Cypress, Playwright, Selenium ๋ฑ)
2. ํ ์คํธ ์ ๋ต ์๋ฆฝ
- TDD vs BDD
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋ชฉํ ์ค์
- ๋ชจํน ์ ๋ต ๊ฒฐ์
CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ
1. CI ๋๊ตฌ ์ ํ
- GitHub Actions, GitLab CI, Jenkins, CircleCI ๋ฑ
2. ๋ฐฐํฌ ์ ๋ต ์๋ฆฝ
- ๋ฐฐํฌ ํ๊ฒฝ ๊ตฌ์ฑ (๊ฐ๋ฐ, ์คํ ์ด์ง, ํ๋ก๋์ )
- ๋ฐฐํฌ ์๋ํ ์คํฌ๋ฆฝํธ ์์ฑ
- ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ, ์นด๋๋ฆฌ ๋ฐฐํฌ ๋ฑ ์ ๋ต ๊ฒฐ์
์์ GitHub Actions ์ํฌํ๋ก์ฐ:
name: CI/CD Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Run tests
run: npm test
- name: Build
run: npm run build
- name: Deploy to staging
if: github.ref == 'refs/heads/develop'
run: |
echo "Deploying to staging..."
# ์คํ
์ด์ง ๋ฐฐํฌ ์คํฌ๋ฆฝํธ
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: |
echo "Deploying to production..."
# ํ๋ก๋์
๋ฐฐํฌ ์คํฌ๋ฆฝํธ
๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น ์์คํ ๊ตฌ์ฑ
1. ๋ก๊น ์์คํ
- ๋ก๊น ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ (Winston, Logback ๋ฑ)
- ๋ก๊ทธ ์์ง ๋๊ตฌ ์ ํ (ELK Stack, Papertrail ๋ฑ)
- ๋ก๊ทธ ๋ ๋ฒจ ๋ฐ ํฌ๋งท ๊ฒฐ์
2. ๋ชจ๋ํฐ๋ง ๋๊ตฌ
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง (New Relic, Datadog ๋ฑ)
- ์๋ฌ ํธ๋ํน (Sentry, Rollbar ๋ฑ)
- ์๋ฒ ๋ชจ๋ํฐ๋ง (Prometheus, Grafana ๋ฑ)
๋ฌธ์ํ
1. ์ฝ๋ ๋ฌธ์ํ
- JSDoc, PyDoc ๋ฑ ์ฝ๋ ์ฃผ์ ๊ท์น
- README.md ํ์ผ ์์ฑ
- API ๋ฌธ์ ์๋ํ
2. ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฌธ์
- ๊ธฐ๋ฅ ๋ช ์ธ์
- ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ
- ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋
ํ์ ๋๊ตฌ ์ค์
1. Notion ์ํฌ์คํ์ด์ค ๊ตฌ์กฐ ์ค๊ณ
๊ฟํ:
- ์ต์์ ํ์ด์ง๋ โํ๋ก์ ํธ ๊ฐ์โ, โ๊ฐ๋ฐ ๋ฌธ์โ, โ๋์์ธโ, โํ์๋กโ, โ๋ฆฌ์์คโ ๋ฑ์ผ๋ก ์นดํ ๊ณ ๋ฆฌํ
- ํ ํ๋ฆฟ์ ํ์ฉํ์ฌ ์ผ๊ด๋ ๋ฌธ์ ํ์์ ์ ์ง
- API ๋ฌธ์, ๊ธฐ์ ์คํ, ํธ๋ฌ๋ธ์ํ ๊ฐ์ด๋ ๋ฑ ๊ฐ๋ฐ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌ
2. Slack ์ฑ๋ ๊ตฌ์กฐ ์ค์
๊ฟํ:
- ์ฑ๋์ ๋ชฉ์ ์ ์ ์ ์๋๋ก!(์: #general, #dev, #design, #marketing)
- ํ๋ก์ ํธ ๋จ์ ๋๋ ๊ธฐ๋ฅ ๋จ์๋ก ์ฑ๋์ ์์ฑ (์: #project-login, #feature-payment)
- @channel, @here์ ์ฌ์ฉ ๊ธฐ์ค์ ๋ช ํํ ํ์ฌ ๋ถํ์ํ ์๋ฆผ ๋ฐฉ์ง
3. ์ด์ ํธ๋ํน
- GitHub Issues, Jira, Trello ๋ฑ ์ค์
- ์ด์ ํ ํ๋ฆฟ ์์ฑ
4. ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค
- PR ํ ํ๋ฆฟ ์์ฑ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๊ท์น ์ ํ๊ธฐ
- ๋ณํฉ ์ ๋ต ๊ฒฐ์ (Squash, Rebase, Merge ๋ฑ)
5. ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋
- Slack, Discord, Microsoft Teams ๋ฑ ์ค์
- ์๋ฆผ ์ค์ (CI/CD, ๋ฐฐํฌ, ์ด์ ๋ฑ)
ํ์ ๊ท์น ๋ฐ ์ปจ๋ฒค์ ์ค์
1. ์ฝ๋ ์ปจ๋ฒค์
๊ฟํ:
- ์ธ์ด/ํ๋ ์์ํฌ๋ณ ์ฝ๋ฉ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ๋ฌธ์ํ
- ESLint, Prettier ๋ฑ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ ์คํ์ผ์ ์๋์ผ๋ก ํต์ผ
- ๋ณ์๋ช , ํจ์๋ช , ํด๋์ค๋ช ๋ฑ์ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ๋ช ํํ ์ ์
์ฐธ๊ณ : ๋ค์ด๋ฒ ํต๋ฐ์ด Java ์ฝ๋ฉ ์ปจ๋ฒค์ https://naver.github.io/hackday-conventions-java/
2. ์ปค๋ฐ ๋ฉ์์ง ์ปจ๋ฒค์
๊ฟํ:
- ์ผ๊ด๋ ์ปค๋ฐ ๋ฉ์์ง ํ์์ ์ฌ์ฉ (์: โ[feat] ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํโ)
- ํ์คํ ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํธํจ
- Conventional Commits(feat, fix, docs, style, refactor, test, chore ๋ฑ)์ ํ์ฉ
- ์ปค๋ฐ ๋ฉ์์ง์ ๊ด๋ จ ์ด์ ๋ฒํธ ํฌํจ
3. ๋ฌธ์ํ ์ปจ๋ฒค์
๊ฟํ:
- ๋ฒ์ ๊ด๋ฆฌ ๊ท์น(Semantic Versioning)์ ์ ํ๊ณ CHANGELOG.md๋ฅผ ์ ๋ฐ์ดํธ
ํ๋ก์ ํธ ํฅ์คํ ์ฒดํฌ๋ฆฌ์คํธ
๋ง์ง๋ง์ผ๋ก, ํ๋ก์ ํธ๋ฅผ ๊ณต์์ ์ผ๋ก ์์ํ๊ธฐ ์ ์ ํ์ธํด์ผ ํ ์ฒดํฌ๋ฆฌ์คํธ์ ๋๋ค:
- ์์คํ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ ์์ฑ
- ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ ์๋ฃ
- GitHub ์ ์ฅ์ ์์ฑ ๋ฐ ๊ธฐ๋ณธ ์ค์ ์๋ฃ
- ๋ธ๋์น ์ ๋ต ๋ฐ PR ํ๋ก์ธ์ค ๋ฌธ์ํ
- Notion ์ํฌ์คํ์ด์ค ๊ตฌ์กฐ ์ค์
- ํ๋ก์ ํธ ๋ก๋๋งต ๋ฐ ๋ง์ผ์คํค ์ค์
- Slack ์ฑ๋ ๊ตฌ์กฐ ๋ฐ ํตํฉ ์ค์
- ์ฝ๋ ์ปจ๋ฒค์ ๋ฐ ํ์ ๊ท์น ๋ฌธ์ํ
- ํ ๋ฉค๋ฒ ๊ถํ ๋ฐ ์ญํ ์ ์
- ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ๊ฐ์ด๋ ์์ฑ
- ์ฒซ ์คํ๋ฆฐํธ ๊ณํ ์๋ฆฝ
๋ง์น๋ฉฐ
์ด๋ ๊ฒ ์น ์๋น์ค ๊ฐ๋ฐ์ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ธํ ์ฌํญ๋ค์ ์ ๋ฆฌํด๋ดค์ต๋๋ค. ๋ฌผ๋ก ๋ชจ๋ ํ๋ก์ ํธ์ ์ด ๋ชจ๋ ๊ฒ์ ์ ์ฉํ ํ์๋ ์์ด์. ํ๋ก์ ํธ์ ๊ท๋ชจ๋ ์ฑ๊ฒฉ์ ๋ง๊ฒ ํ์ํ ๋ถ๋ถ๋ง ๊ณจ๋ผ์ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค.
ํ๋ก์ ํธ ์ด๊ธฐ์ ์ด๋ฐ ๊ธฐ๋ณธ ์ธํ ์ ์ ๋๋ก ํด๋๋ฉด ๋์ค์ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ ์ฝํ ์ ์์ด์. ํนํ ํ ํ๋ก์ ํธ๋ผ๋ฉด ๋ชจ๋๊ฐ ๊ฐ์ ๊ท์น๊ณผ ํ๊ฒฝ์์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ์ฃ .
๋ค์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ์ด ๊ธ์ ์ฐธ๊ณ ํด์ ์ฒดํฌ๋ฆฌ์คํธ์ฒ๋ผ ํ์ฉํด๋ณด์ธ์. ๋๋ฑ ์ธํ ์๋ฃํ๊ณ ๋ณธ๊ฒฉ์ ์ธ ๊ฐ๋ฐ์ ์ง์คํ ์ ์์ ๊ฑฐ์์! ๐
ํน์ ํน์ ๋ถ๋ถ์ ๋ํด ๋ ์์ธํ ์ค๋ช ์ด ํ์ํ๊ฑฐ๋, ํน์ ์ธ์ด๋ ํ๋ ์์ํฌ์ ๋ง๋ ์ธํ ๋ฐฉ๋ฒ์ ์๊ณ ์ถ์ผ์๋ค๋ฉด ์ธ์ ๋ ๋ฉ์ผ์ผ๋ก ์๋ ค์ฃผ์ธ์!