CI/CD가 필요한 이유
1인 개발이라도 수동 배포는 실수를 만듭니다. "빌드 안 됨 → 롤백 → 다시 수정" 사이클을 경험하면 자동화의 가치를 체감합니다.
기본 워크플로우 구조
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run build
- name: Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
command: pages deploy .vercel/output/static --project-name=my-project환경 분리
- name: Deploy Preview
if: github.event_name == 'pull_request'
run: wrangler pages deploy --branch=preview
- name: Deploy Production
if: github.ref == 'refs/heads/main'
run: wrangler pages deploy --branch=main캐싱 전략
- `actions/cache`로 node_modules 캐싱: 빌드 시간 60% 단축
- Gradle 프로젝트는 `~/.gradle/caches` 캐싱
모바일 앱 배포
React Native 앱의 경우 Android는 GitHub Actions에서, iOS는 Codemagic에서 처리합니다. Play Store 업로드는 r0adkll/upload-google-play 액션을 사용합니다.
시크릿 관리
API 토큰, 서명 키 등은 반드시 Repository Secrets에 저장합니다. 절대 코드에 하드코딩하지 마세요.
결론
한 번 설정하면 이후 모든 배포가 git push 한 줄로 끝납니다. 초기 투자 대비 효율이 가장 높은 개발 인프라입니다.