|
| 1 | +# To. 수민님 |
| 2 | + |
| 3 | +베타 릴리스 워크플로우 도입 배경과 개선사항을 공유드립니다. |
| 4 | + |
| 5 | +## 📋 핵심 요구사항 |
| 6 | +- main 브랜치 보호 (직접 push 불가, 1명 이상 승인 필수) |
| 7 | +- 자동 버전 관리 및 체인지로그 업데이트 |
| 8 | +- 모노레포 내 독립적 패키지 버전 관리 |
| 9 | +- 보호 규칙 우회 없이 release 브랜치에서 배포 후 main 동기화 |
| 10 | + |
| 11 | +## 🔄 기존 워크플로우 |
| 12 | + |
| 13 | +```mermaid |
| 14 | +sequenceDiagram |
| 15 | + participant F as feature/* |
| 16 | + participant D as develop |
| 17 | + participant M as main |
| 18 | + participant R as release |
| 19 | + participant NPM as npm |
| 20 | + |
| 21 | + F->>D: PR 요청 |
| 22 | + D->>D: 머지 |
| 23 | + D->>M: PR 요청 (1차 승인) |
| 24 | + M->>M: 머지 승인 |
| 25 | + M->>R: 자동 push |
| 26 | + R->>R: 시멘틱 릴리즈 |
| 27 | + R->>NPM: publish |
| 28 | + R->>M: PR 요청 (main-to-release) |
| 29 | + M->>M: 동기화 승인 (2차 승인) |
| 30 | + |
| 31 | + Note over F,NPM: 총 3회 승인 필요<br/>베타 테스트 불가<br/>실패 시 롤백 어려움 |
| 32 | +``` |
| 33 | + |
| 34 | +## ❌ 실제 발생한 문제 |
| 35 | + |
| 36 | +### TypeScript 전환 시 대참사 |
| 37 | +1. **빌드 실패 무시** → 하위 패키지 빌드 실패했지만 "메인은 괜찮겠지"하고 진행 |
| 38 | +2. **리버트 시도** → 시멘틱 릴리즈가 오작동하여 lazy-table-renderer 버전 의도치 않게 업데이트 |
| 39 | +3. **보호 규칙 해제** → main에 강제 push했지만 JS/TS 버전 충돌 |
| 40 | +4. **완전히 꼬임** → release와 main-to-release 브랜치 간 충돌로 JS 버전이 다시 릴리즈 |
| 41 | + |
| 42 | +## ✨ 새로운 워크플로우 |
| 43 | + |
| 44 | +```mermaid |
| 45 | +sequenceDiagram |
| 46 | + participant F as feature/* |
| 47 | + participant D as develop |
| 48 | + participant M as main |
| 49 | + participant R as release/vX.X.X |
| 50 | + participant NPM as npm |
| 51 | + |
| 52 | + Note over F,D: 1. 개발 |
| 53 | + F->>D: PR + changeset |
| 54 | + D->>D: 머지 |
| 55 | + |
| 56 | + Note over D,NPM: 2. 베타 릴리스 (자동) |
| 57 | + D->>D: changeset 소비 |
| 58 | + D->>D: 버전 bump + beta |
| 59 | + D->>NPM: 베타 퍼블리시 |
| 60 | + D->>D: 커밋 |
| 61 | + |
| 62 | + Note over D,M: 3. 프로덕션 준비 |
| 63 | + D->>M: PR (베타 테스트 완료) |
| 64 | + M->>M: 승인 (1차) |
| 65 | + |
| 66 | + Note over M,NPM: 4. 정식 릴리스 (자동) |
| 67 | + M->>R: release 브랜치 생성 |
| 68 | + R->>R: beta 제거 |
| 69 | + R->>NPM: 정식 퍼블리시 |
| 70 | + R->>M: PR로 동기화 |
| 71 | + M->>M: 자동 머지 |
| 72 | + |
| 73 | + Note over F,NPM: 총 2회 승인<br/>베타로 사전 테스트<br/>실패 시 롤백 용이 |
| 74 | +``` |
| 75 | + |
| 76 | +## 🚀 주요 개선점 |
| 77 | + |
| 78 | +### 1. **Changesets 도입** |
| 79 | +- 각 PR에 변경사항 명시 |
| 80 | +- 모노레포 패키지별 독립 버전 관리 |
| 81 | +- 시멘틱 릴리즈의 오작동 방지 |
| 82 | + |
| 83 | +### 2. **베타 릴리스** |
| 84 | +- develop에서 자동으로 베타 버전 생성 |
| 85 | +- 실제 npm에 퍼블리시하여 테스트 가능 |
| 86 | +- 문제 발견 시 main 머지 전 수정 가능 |
| 87 | + |
| 88 | +### 3. **프로세스 단순화** |
| 89 | +- 승인 횟수: 3회 → 2회 |
| 90 | +- 각 단계별 자동화 |
| 91 | +- 명확한 롤백 전략 |
| 92 | + |
| 93 | +### 4. **안정성 향상** |
| 94 | +- 빌드 실패 시 즉시 중단 (`set -e`) |
| 95 | +- GitHub Release 생성 후 npm 퍼블리시 |
| 96 | +- 타입 선언 파일 문제 해결 (빌드 순서 조정) |
| 97 | + |
| 98 | +## 📊 결과 |
| 99 | +- ✅ 베타 릴리스 성공 |
| 100 | +- ✅ 빌드 오류 감지 및 차단 |
| 101 | +- ✅ 안정적인 배포 프로세스 구축 |
| 102 | + |
| 103 | +이제 TypeScript 버전도 안전하게 배포할 수 있습니다! 🎉 |
0 commit comments