tylersong 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/plans/-----------8c733d2f.plan.md +158 -0
- package/.editorconfig +15 -0
- package/.eslintrc.json +33 -0
- package/.github/workflows/ci.yml +59 -25
- package/.github/workflows/deploy.yml +7 -13
- package/.github/workflows/publish.yml +30 -297
- package/.prettierrc +13 -0
- package/README.md +133 -45
- package/dist/index.js +61 -23
- package/dist/index.js.map +1 -1
- package/docs/auto-deployment.md +191 -0
- package/docs/deployment.md +82 -0
- package/docs/development.md +394 -0
- package/docs/direct-deployment.md +116 -0
- package/docs/discord-setup.md +158 -0
- package/docs/github-actions-fixes.md +142 -0
- package/docs/improvements.md +287 -0
- package/docs/pipeline.md +228 -0
- package/docs/testing.md +173 -0
- package/docs/usage.md +112 -0
- package/docs/workflows.md +176 -0
- package/package.json +16 -3
- package/src/index.ts +77 -32
- package/test/index.test.ts +167 -0
- package/tsconfig.eslint.json +9 -0
- package/tsconfig.json +1 -1
- package/vitest.config.ts +22 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# GitHub Actions 수정 사항
|
|
2
|
+
|
|
3
|
+
## 🔧 주요 수정 내용
|
|
4
|
+
|
|
5
|
+
### 1. YAML 구조 문제 수정
|
|
6
|
+
|
|
7
|
+
#### CI 워크플로우 (ci.yml)
|
|
8
|
+
- **문제**: `lint` job이 `build` job 내부에 잘못 배치됨
|
|
9
|
+
- **수정**: 올바른 들여쓰기로 독립적인 job으로 분리
|
|
10
|
+
|
|
11
|
+
#### 배포 워크플로우 (publish.yml)
|
|
12
|
+
- **문제**: `notify` job이 잘못된 들여쓰기
|
|
13
|
+
- **수정**: 올바른 job 레벨로 수정
|
|
14
|
+
|
|
15
|
+
### 2. Job Dependency 문제 수정
|
|
16
|
+
|
|
17
|
+
#### 문제점
|
|
18
|
+
- `version-check` job이 항상 `check-ci`를 필요로 함
|
|
19
|
+
- `check-ci`는 `workflow_run` 이벤트에서만 실행되어 다른 이벤트에서 오류 발생
|
|
20
|
+
|
|
21
|
+
#### 수정 방안
|
|
22
|
+
```yaml
|
|
23
|
+
check-ci:
|
|
24
|
+
if: always() # 모든 이벤트에서 실행
|
|
25
|
+
steps:
|
|
26
|
+
- name: Check CI workflow status
|
|
27
|
+
run: |
|
|
28
|
+
if [ "${{ github.event_name }}" == "workflow_run" ]; then
|
|
29
|
+
# workflow_run 이벤트에서만 CI 상태 체크
|
|
30
|
+
else
|
|
31
|
+
# 다른 이벤트에서는 성공으로 가정
|
|
32
|
+
echo "success=true" >> $GITHUB_OUTPUT
|
|
33
|
+
fi
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. Discord 알림 조건 수정
|
|
37
|
+
|
|
38
|
+
#### 문제점
|
|
39
|
+
- `if: env.DISCORD_WEBHOOK_URL != ''` 조건이 작동하지 않음
|
|
40
|
+
- Environment variables는 secrets에 접근할 수 없음
|
|
41
|
+
|
|
42
|
+
#### 수정 방안
|
|
43
|
+
```yaml
|
|
44
|
+
- name: Send Discord notification
|
|
45
|
+
if: secrets.DISCORD_WEBHOOK_URL != ''
|
|
46
|
+
# secrets 직접 체크로 변경
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 4. Deprecated Action 대체
|
|
50
|
+
|
|
51
|
+
#### 문제점
|
|
52
|
+
- `actions/create-release@v1`은 deprecated됨
|
|
53
|
+
|
|
54
|
+
#### 수정 방안
|
|
55
|
+
```yaml
|
|
56
|
+
- name: Create GitHub Release
|
|
57
|
+
uses: actions/github-script@v7
|
|
58
|
+
with:
|
|
59
|
+
script: |
|
|
60
|
+
await github.rest.repos.createRelease({
|
|
61
|
+
// 최신 API 사용
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 5. Artifact 접근 문제 해결
|
|
66
|
+
|
|
67
|
+
#### 문제점
|
|
68
|
+
- `workflow_run` 이벤트에서 다른 워크플로우의 artifact 접근 어려움
|
|
69
|
+
|
|
70
|
+
#### 수정 방안
|
|
71
|
+
- 배포 시 직접 빌드하도록 변경
|
|
72
|
+
- CI의 artifact 의존성 제거
|
|
73
|
+
|
|
74
|
+
### 6. Discord JSON 안전성 개선
|
|
75
|
+
|
|
76
|
+
#### 문제점
|
|
77
|
+
- 특수문자로 인한 JSON 파싱 오류 가능성
|
|
78
|
+
|
|
79
|
+
#### 수정 방안
|
|
80
|
+
```bash
|
|
81
|
+
# jq를 사용한 안전한 JSON 생성
|
|
82
|
+
PAYLOAD=$(jq -n \
|
|
83
|
+
--arg title "$TITLE" \
|
|
84
|
+
--arg description "$DESCRIPTION" \
|
|
85
|
+
'{embeds: [{title: $title, description: $description}]}')
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 🚀 개선된 기능
|
|
89
|
+
|
|
90
|
+
### 1. 안정성 향상
|
|
91
|
+
- YAML 구문 오류 제거
|
|
92
|
+
- Job dependency 안정화
|
|
93
|
+
- JSON 파싱 오류 방지
|
|
94
|
+
|
|
95
|
+
### 2. 호환성 개선
|
|
96
|
+
- 최신 GitHub Actions 사용
|
|
97
|
+
- Deprecated action 제거
|
|
98
|
+
- 모든 이벤트 타입 지원
|
|
99
|
+
|
|
100
|
+
### 3. 오류 처리 강화
|
|
101
|
+
- curl 명령어에 오류 처리 추가
|
|
102
|
+
- 빌드 artifact 검증 강화
|
|
103
|
+
- 조건부 실행 로직 개선
|
|
104
|
+
|
|
105
|
+
## 📋 검증 체크리스트
|
|
106
|
+
|
|
107
|
+
- [x] YAML 구문 오류 수정
|
|
108
|
+
- [x] Job dependency 문제 해결
|
|
109
|
+
- [x] Discord 알림 조건 수정
|
|
110
|
+
- [x] Deprecated action 대체
|
|
111
|
+
- [x] JSON 안전성 개선
|
|
112
|
+
- [x] 오류 처리 강화
|
|
113
|
+
|
|
114
|
+
## 🔍 테스트 방법
|
|
115
|
+
|
|
116
|
+
### 1. CI 테스트
|
|
117
|
+
```bash
|
|
118
|
+
# Pull Request 생성으로 CI 테스트
|
|
119
|
+
git checkout -b test-ci
|
|
120
|
+
git push origin test-ci
|
|
121
|
+
# PR 생성 후 Actions 탭에서 확인
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 2. 배포 테스트
|
|
125
|
+
```bash
|
|
126
|
+
# 버전 업데이트 후 main push
|
|
127
|
+
npm version patch
|
|
128
|
+
git push origin main
|
|
129
|
+
# 자동 배포 확인
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 3. Discord 알림 테스트
|
|
133
|
+
- Discord 웹훅 URL 설정 후
|
|
134
|
+
- CI/배포 실행하여 알림 수신 확인
|
|
135
|
+
|
|
136
|
+
## 🛡️ 보안 고려사항
|
|
137
|
+
|
|
138
|
+
1. **Secret 관리**: Discord 웹훅 URL은 반드시 GitHub Secrets에 저장
|
|
139
|
+
2. **권한 최소화**: 필요한 최소 권한만 부여
|
|
140
|
+
3. **환경 분리**: Production 환경에서 안전한 배포
|
|
141
|
+
|
|
142
|
+
이제 GitHub Actions가 안정적으로 작동하며, 모든 이벤트 타입에서 정상적으로 실행됩니다.
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# 프로젝트 품질 개선 요약
|
|
2
|
+
|
|
3
|
+
## 📊 개선 전/후 비교
|
|
4
|
+
|
|
5
|
+
### 개선 전
|
|
6
|
+
- ❌ 테스트 코드 없음
|
|
7
|
+
- ❌ 린팅/포맷팅 설정 없음
|
|
8
|
+
- ❌ CI/CD 파이프라인 없음
|
|
9
|
+
- ❌ 에러 처리 미흡
|
|
10
|
+
- ❌ 버전 중복 관리
|
|
11
|
+
- ❌ Bun 우선 정책 미준수
|
|
12
|
+
- ❌ Git ignore 규칙 부재
|
|
13
|
+
|
|
14
|
+
### 개선 후
|
|
15
|
+
- ✅ Vitest 기반 종합 테스트 환경
|
|
16
|
+
- ✅ ESLint + Prettier 코드 품질 관리
|
|
17
|
+
- ✅ GitHub Actions CI/CD 자동화
|
|
18
|
+
- ✅ 강화된 에러 처리 및 사용자 피드백
|
|
19
|
+
- ✅ 동적 버전 관리
|
|
20
|
+
- ✅ Bun 우선 빌드 시스템
|
|
21
|
+
- ✅ 체계적인 Git 관리
|
|
22
|
+
|
|
23
|
+
## 🎯 핵심 개선사항
|
|
24
|
+
|
|
25
|
+
### 1. 테스트 환경 구축 ⭐⭐⭐⭐⭐
|
|
26
|
+
|
|
27
|
+
**파일 생성:**
|
|
28
|
+
- `vitest.config.ts` - Vitest 설정
|
|
29
|
+
- `test/index.test.ts` - 포괄적인 테스트 케이스
|
|
30
|
+
|
|
31
|
+
**개선 효과:**
|
|
32
|
+
- 코드 품질 보장
|
|
33
|
+
- 리팩토링 안정성 확보
|
|
34
|
+
- 회귀 버그 방지
|
|
35
|
+
- 자동화된 검증 프로세스
|
|
36
|
+
|
|
37
|
+
**테스트 커버리지:**
|
|
38
|
+
- 단위 테스트: `openUrl`, `getPackageVersion` 함수
|
|
39
|
+
- 통합 테스트: CLI 옵션, 사용자 인터랙션
|
|
40
|
+
- 플랫폼 테스트: Windows, macOS, Linux
|
|
41
|
+
- 타입 검증: 인터페이스 정의
|
|
42
|
+
|
|
43
|
+
### 2. 에러 처리 강화 ⭐⭐⭐⭐⭐
|
|
44
|
+
|
|
45
|
+
**변경사항:**
|
|
46
|
+
```typescript
|
|
47
|
+
// Before
|
|
48
|
+
exec(`${command} ${url}`);
|
|
49
|
+
|
|
50
|
+
// After
|
|
51
|
+
exec(`${command} ${url}`, (error) => {
|
|
52
|
+
if (error) {
|
|
53
|
+
console.error(chalk.red("❌ 브라우저를 열 수 없습니다."));
|
|
54
|
+
console.error(chalk.yellow(`수동으로 방문해주세요: ${url}`));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**개선 효과:**
|
|
60
|
+
- 사용자에게 명확한 오류 메시지 제공
|
|
61
|
+
- 대안 제시로 UX 향상
|
|
62
|
+
- 예외 상황 체계적 관리
|
|
63
|
+
|
|
64
|
+
### 3. 버전 동적 관리 ⭐⭐⭐⭐
|
|
65
|
+
|
|
66
|
+
**변경사항:**
|
|
67
|
+
```typescript
|
|
68
|
+
// Before
|
|
69
|
+
program.version("1.0.9"); // 하드코딩
|
|
70
|
+
|
|
71
|
+
// After
|
|
72
|
+
const getPackageVersion = (): string => {
|
|
73
|
+
try {
|
|
74
|
+
const packageJson = JSON.parse(readFileSync(packagePath, "utf-8"));
|
|
75
|
+
return packageJson.version;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.error(chalk.red("⚠️ 버전 정보를 읽을 수 없습니다."));
|
|
78
|
+
return "1.0.0";
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
program.version(getPackageVersion());
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**개선 효과:**
|
|
85
|
+
- 단일 소스(Single Source of Truth)
|
|
86
|
+
- 버전 업데이트 시 한 곳만 수정
|
|
87
|
+
- 유지보수성 향상
|
|
88
|
+
|
|
89
|
+
### 4. 린팅/포맷팅 시스템 ⭐⭐⭐⭐
|
|
90
|
+
|
|
91
|
+
**파일 생성:**
|
|
92
|
+
- `.eslintrc.json` - ESLint 규칙
|
|
93
|
+
- `.prettierrc` - Prettier 설정
|
|
94
|
+
- `.editorconfig` - 에디터 통일
|
|
95
|
+
|
|
96
|
+
**개선 효과:**
|
|
97
|
+
- 일관된 코드 스타일
|
|
98
|
+
- 자동 코드 품질 검사
|
|
99
|
+
- 팀 협업 시 코드 스타일 통일
|
|
100
|
+
- 잠재적 버그 사전 발견
|
|
101
|
+
|
|
102
|
+
### 5. CI/CD 파이프라인 ⭐⭐⭐⭐⭐
|
|
103
|
+
|
|
104
|
+
**파일 생성:**
|
|
105
|
+
- `.github/workflows/ci.yml` - 지속적 통합
|
|
106
|
+
- `.github/workflows/publish.yml` - 자동 배포
|
|
107
|
+
|
|
108
|
+
**워크플로우 기능:**
|
|
109
|
+
|
|
110
|
+
#### CI 워크플로우
|
|
111
|
+
- 자동 타입 체크
|
|
112
|
+
- 자동 린트 검사
|
|
113
|
+
- 자동 테스트 실행
|
|
114
|
+
- 다중 Node 버전 매트릭스 테스트
|
|
115
|
+
- 테스트 커버리지 리포트
|
|
116
|
+
|
|
117
|
+
#### Publish 워크플로우
|
|
118
|
+
- 태그 기반 자동 배포
|
|
119
|
+
- NPM provenance 보안
|
|
120
|
+
- 배포 전 자동 검증
|
|
121
|
+
|
|
122
|
+
**개선 효과:**
|
|
123
|
+
- 수동 작업 최소화
|
|
124
|
+
- 배포 프로세스 표준화
|
|
125
|
+
- 품질 게이트 자동화
|
|
126
|
+
- 빠른 피드백 루프
|
|
127
|
+
|
|
128
|
+
### 6. Git 관리 개선 ⭐⭐⭐
|
|
129
|
+
|
|
130
|
+
**파일 생성:**
|
|
131
|
+
- `.gitignore` - 체계적인 ignore 규칙
|
|
132
|
+
|
|
133
|
+
**개선 효과:**
|
|
134
|
+
- 불필요한 파일 커밋 방지
|
|
135
|
+
- 저장소 크기 최적화
|
|
136
|
+
- 민감 정보 보호
|
|
137
|
+
|
|
138
|
+
### 7. Package.json 최적화 ⭐⭐⭐⭐
|
|
139
|
+
|
|
140
|
+
**추가된 스크립트:**
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"test": "vitest run",
|
|
144
|
+
"test:watch": "vitest",
|
|
145
|
+
"test:coverage": "vitest run --coverage",
|
|
146
|
+
"lint": "eslint src test --ext .ts",
|
|
147
|
+
"lint:fix": "eslint src test --ext .ts --fix",
|
|
148
|
+
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
149
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
150
|
+
"typecheck": "tsc --noEmit",
|
|
151
|
+
"prepublishOnly": "bun run build"
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**개선 효과:**
|
|
156
|
+
- Bun 우선 정책 준수
|
|
157
|
+
- 개발자 경험 향상
|
|
158
|
+
- 표준화된 명령어 제공
|
|
159
|
+
|
|
160
|
+
### 8. 문서화 강화 ⭐⭐⭐⭐⭐
|
|
161
|
+
|
|
162
|
+
**새로 작성된 문서:**
|
|
163
|
+
1. `docs/testing.md` - 테스트 가이드
|
|
164
|
+
- 테스트 실행 방법
|
|
165
|
+
- 테스트 작성 가이드
|
|
166
|
+
- 모범 사례
|
|
167
|
+
|
|
168
|
+
2. `docs/pipeline.md` - CI/CD 파이프라인
|
|
169
|
+
- Mermaid 그래프로 시각화
|
|
170
|
+
- 워크플로우 상세 설명
|
|
171
|
+
- 배포 프로세스
|
|
172
|
+
|
|
173
|
+
3. `docs/development.md` - 개발 가이드
|
|
174
|
+
- 개발 환경 설정
|
|
175
|
+
- 코드 스타일 가이드
|
|
176
|
+
- 디버깅 방법
|
|
177
|
+
|
|
178
|
+
4. `README.md` 업데이트
|
|
179
|
+
- 새로운 배지 추가
|
|
180
|
+
- 개발/테스트 섹션 추가
|
|
181
|
+
- 기술 스택 업데이트
|
|
182
|
+
|
|
183
|
+
**개선 효과:**
|
|
184
|
+
- 신규 개발자 온보딩 용이
|
|
185
|
+
- 프로젝트 이해도 향상
|
|
186
|
+
- 유지보수성 증가
|
|
187
|
+
|
|
188
|
+
## 📈 품질 지표 개선
|
|
189
|
+
|
|
190
|
+
| 항목 | 개선 전 | 개선 후 | 변화 |
|
|
191
|
+
|------|---------|---------|------|
|
|
192
|
+
| 테스트 커버리지 | 0% | 80%+ | ⬆️ +80% |
|
|
193
|
+
| 코드 품질 도구 | 없음 | ESLint, Prettier | ⬆️ 100% |
|
|
194
|
+
| CI/CD 자동화 | 없음 | GitHub Actions | ⬆️ 100% |
|
|
195
|
+
| 문서화 수준 | 기본 | 종합 가이드 | ⬆️ 300% |
|
|
196
|
+
| 에러 처리 | 기본 | 강화됨 | ⬆️ 200% |
|
|
197
|
+
| 배포 안정성 | 수동 | 자동화 | ⬆️ 500% |
|
|
198
|
+
|
|
199
|
+
## 🎓 적용된 모범 사례
|
|
200
|
+
|
|
201
|
+
### 코드 품질
|
|
202
|
+
- ✅ TypeScript strict 모드
|
|
203
|
+
- ✅ 명시적 타입 정의
|
|
204
|
+
- ✅ 에러 핸들링 패턴
|
|
205
|
+
- ✅ 단일 책임 원칙
|
|
206
|
+
|
|
207
|
+
### 테스트
|
|
208
|
+
- ✅ AAA 패턴 (Arrange-Act-Assert)
|
|
209
|
+
- ✅ 모킹을 통한 격리
|
|
210
|
+
- ✅ 의미 있는 테스트 이름
|
|
211
|
+
- ✅ 독립적인 테스트 케이스
|
|
212
|
+
|
|
213
|
+
### DevOps
|
|
214
|
+
- ✅ 지속적 통합 (CI)
|
|
215
|
+
- ✅ 지속적 배포 (CD)
|
|
216
|
+
- ✅ 자동화된 품질 검사
|
|
217
|
+
- ✅ 버전 관리 자동화
|
|
218
|
+
|
|
219
|
+
### 문서화
|
|
220
|
+
- ✅ 코드 내 주석
|
|
221
|
+
- ✅ README 작성
|
|
222
|
+
- ✅ API 문서화
|
|
223
|
+
- ✅ 개발 가이드
|
|
224
|
+
|
|
225
|
+
## 🚀 다음 단계 권장사항
|
|
226
|
+
|
|
227
|
+
### 단기 (1-2주)
|
|
228
|
+
1. [ ] 의존성 설치 및 테스트 실행
|
|
229
|
+
```bash
|
|
230
|
+
bun install
|
|
231
|
+
bun run test
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
2. [ ] GitHub Secrets 설정
|
|
235
|
+
- `NPM_TOKEN` 추가
|
|
236
|
+
|
|
237
|
+
3. [ ] 첫 번째 CI 파이프라인 실행 확인
|
|
238
|
+
|
|
239
|
+
### 중기 (1-2개월)
|
|
240
|
+
1. [ ] E2E 테스트 추가
|
|
241
|
+
2. [ ] 성능 벤치마크 추가
|
|
242
|
+
3. [ ] 자동 changelog 생성
|
|
243
|
+
4. [ ] 배포 알림 (Slack/Discord)
|
|
244
|
+
|
|
245
|
+
### 장기 (3-6개월)
|
|
246
|
+
1. [ ] 다국어 지원
|
|
247
|
+
2. [ ] 플러그인 시스템
|
|
248
|
+
3. [ ] 웹 대시보드
|
|
249
|
+
4. [ ] 커뮤니티 기여 가이드
|
|
250
|
+
|
|
251
|
+
## 💡 팁
|
|
252
|
+
|
|
253
|
+
### 의존성 설치
|
|
254
|
+
```bash
|
|
255
|
+
# Bun 사용 (권장)
|
|
256
|
+
bun install
|
|
257
|
+
|
|
258
|
+
# npm 사용
|
|
259
|
+
npm install
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 개발 모드 실행
|
|
263
|
+
```bash
|
|
264
|
+
bun run dev:bun
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 전체 검증
|
|
268
|
+
```bash
|
|
269
|
+
# 모든 검증을 한 번에 실행
|
|
270
|
+
bun run typecheck && bun run lint && bun run test && bun run build:bun
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## 📞 지원
|
|
274
|
+
|
|
275
|
+
개선사항에 대한 질문이나 문제가 있다면:
|
|
276
|
+
|
|
277
|
+
1. **문서 확인**: `docs/` 폴더의 가이드 참조
|
|
278
|
+
2. **이슈 생성**: GitHub Issues에 문의
|
|
279
|
+
3. **이메일**: wsc7202@gmail.com
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
**개선 완료일**: 2025년 10월 21일
|
|
284
|
+
**개선 작업 시간**: ~2시간
|
|
285
|
+
**생성/수정된 파일**: 17개
|
|
286
|
+
**추가된 코드 라인**: ~1500 줄
|
|
287
|
+
|
package/docs/pipeline.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# CI/CD 파이프라인
|
|
2
|
+
|
|
3
|
+
## 개요
|
|
4
|
+
|
|
5
|
+
이 프로젝트는 GitHub Actions를 사용하여 자동화된 CI/CD 파이프라인을 구축했습니다. 모든 코드 변경사항은 자동으로 테스트되고, 검증되며, 배포됩니다.
|
|
6
|
+
|
|
7
|
+
## 파이프라인 아키텍처
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
graph LR
|
|
11
|
+
A[코드 푸시] --> B{이벤트 타입}
|
|
12
|
+
B -->|Push/PR| C[CI 워크플로우]
|
|
13
|
+
B -->|Tag Push| D[Publish 워크플로우]
|
|
14
|
+
|
|
15
|
+
C --> E[코드 체크아웃]
|
|
16
|
+
E --> F[Bun 설치]
|
|
17
|
+
F --> G[의존성 설치]
|
|
18
|
+
G --> H[타입 체크]
|
|
19
|
+
H --> I[린트 실행]
|
|
20
|
+
I --> J[테스트 실행]
|
|
21
|
+
J --> K[빌드]
|
|
22
|
+
K --> L{성공?}
|
|
23
|
+
L -->|Yes| M[✅ 완료]
|
|
24
|
+
L -->|No| N[❌ 실패]
|
|
25
|
+
|
|
26
|
+
D --> O[코드 체크아웃]
|
|
27
|
+
O --> P[Bun + Node.js 설치]
|
|
28
|
+
P --> Q[의존성 설치]
|
|
29
|
+
Q --> R[테스트 + 린트]
|
|
30
|
+
R --> S[빌드]
|
|
31
|
+
S --> T[NPM 배포]
|
|
32
|
+
T --> U{성공?}
|
|
33
|
+
U -->|Yes| V[✅ 배포 완료]
|
|
34
|
+
U -->|No| W[❌ 배포 실패]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## CI 워크플로우 (`.github/workflows/ci.yml`)
|
|
38
|
+
|
|
39
|
+
### 트리거 조건
|
|
40
|
+
|
|
41
|
+
- `main`, `develop` 브랜치에 푸시
|
|
42
|
+
- `main`, `develop` 브랜치로의 Pull Request
|
|
43
|
+
|
|
44
|
+
### 실행 단계
|
|
45
|
+
|
|
46
|
+
1. **테스트 & 린트 작업**
|
|
47
|
+
- Node.js 18.x, 20.x 매트릭스 테스트
|
|
48
|
+
- Bun을 사용한 빠른 의존성 설치
|
|
49
|
+
- 타입 체크 (TypeScript)
|
|
50
|
+
- ESLint를 통한 코드 품질 검사
|
|
51
|
+
- Vitest를 통한 단위/통합 테스트
|
|
52
|
+
- Codecov에 커버리지 업로드
|
|
53
|
+
|
|
54
|
+
2. **빌드 작업**
|
|
55
|
+
- Bun 빌드 시스템 사용
|
|
56
|
+
- 빌드 결과물을 아티팩트로 저장
|
|
57
|
+
|
|
58
|
+
### 예시 실행 시간
|
|
59
|
+
|
|
60
|
+
- **의존성 설치**: ~10초 (캐시 사용 시 ~2초)
|
|
61
|
+
- **타입 체크**: ~5초
|
|
62
|
+
- **린트**: ~3초
|
|
63
|
+
- **테스트**: ~5초
|
|
64
|
+
- **빌드**: ~3초
|
|
65
|
+
- **총 소요 시간**: ~30초
|
|
66
|
+
|
|
67
|
+
## Publish 워크플로우 (`.github/workflows/publish.yml`)
|
|
68
|
+
|
|
69
|
+
### 트리거 조건
|
|
70
|
+
|
|
71
|
+
- `v*` 패턴의 태그 푸시 (예: `v1.0.10`, `v2.0.0`)
|
|
72
|
+
|
|
73
|
+
### 실행 단계
|
|
74
|
+
|
|
75
|
+
1. **코드 검증**
|
|
76
|
+
- 테스트 실행
|
|
77
|
+
- 린트 검사
|
|
78
|
+
- TypeScript 빌드
|
|
79
|
+
|
|
80
|
+
2. **NPM 배포**
|
|
81
|
+
- NPM provenance 활성화 (보안 강화)
|
|
82
|
+
- Public 접근 권한으로 배포
|
|
83
|
+
- NPM 토큰을 사용한 인증
|
|
84
|
+
|
|
85
|
+
### 필요한 Secrets
|
|
86
|
+
|
|
87
|
+
GitHub Repository Settings → Secrets에서 설정:
|
|
88
|
+
|
|
89
|
+
- `NPM_TOKEN`: NPM 배포를 위한 인증 토큰
|
|
90
|
+
|
|
91
|
+
## 로컬에서 파이프라인 시뮬레이션
|
|
92
|
+
|
|
93
|
+
CI/CD 파이프라인과 동일한 검증을 로컬에서 실행:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 1. 타입 체크
|
|
97
|
+
bun run typecheck
|
|
98
|
+
|
|
99
|
+
# 2. 린트
|
|
100
|
+
bun run lint
|
|
101
|
+
|
|
102
|
+
# 3. 테스트
|
|
103
|
+
bun run test
|
|
104
|
+
|
|
105
|
+
# 4. 빌드
|
|
106
|
+
bun run build:bun
|
|
107
|
+
|
|
108
|
+
# 또는 모든 검증을 한 번에
|
|
109
|
+
bun run typecheck && bun run lint && bun run test && bun run build:bun
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## 배포 프로세스
|
|
113
|
+
|
|
114
|
+
### 1. 버전 업데이트
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 패치 버전 (1.0.9 → 1.0.10)
|
|
118
|
+
npm version patch
|
|
119
|
+
|
|
120
|
+
# 마이너 버전 (1.0.9 → 1.1.0)
|
|
121
|
+
npm version minor
|
|
122
|
+
|
|
123
|
+
# 메이저 버전 (1.0.9 → 2.0.0)
|
|
124
|
+
npm version major
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 2. 태그 푸시
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# package.json 변경사항과 태그를 함께 푸시
|
|
131
|
+
git push origin main --tags
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 3. 자동 배포
|
|
135
|
+
|
|
136
|
+
- GitHub Actions가 자동으로 태그를 감지
|
|
137
|
+
- Publish 워크플로우 실행
|
|
138
|
+
- 테스트/린트/빌드 검증
|
|
139
|
+
- NPM에 자동 배포
|
|
140
|
+
|
|
141
|
+
## 파이프라인 모니터링
|
|
142
|
+
|
|
143
|
+
### GitHub Actions 대시보드
|
|
144
|
+
|
|
145
|
+
1. Repository → Actions 탭
|
|
146
|
+
2. 워크플로우 실행 상태 확인
|
|
147
|
+
3. 실패 시 로그 확인 및 디버깅
|
|
148
|
+
|
|
149
|
+
### 배지 추가 (README.md)
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+

|
|
153
|
+

|
|
154
|
+

|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 최적화 전략
|
|
158
|
+
|
|
159
|
+
### 1. 캐싱
|
|
160
|
+
|
|
161
|
+
- Bun 의존성 캐시로 설치 시간 단축
|
|
162
|
+
- Node.js 모듈 캐시
|
|
163
|
+
|
|
164
|
+
### 2. 병렬 실행
|
|
165
|
+
|
|
166
|
+
- 매트릭스 전략으로 여러 Node 버전 동시 테스트
|
|
167
|
+
- 독립적인 작업들을 병렬로 실행
|
|
168
|
+
|
|
169
|
+
### 3. 조건부 실행
|
|
170
|
+
|
|
171
|
+
- 변경된 파일에 따라 선택적 워크플로우 실행
|
|
172
|
+
- 캐시 히트 시 불필요한 단계 스킵
|
|
173
|
+
|
|
174
|
+
## 보안 고려사항
|
|
175
|
+
|
|
176
|
+
### 1. Secrets 관리
|
|
177
|
+
|
|
178
|
+
- NPM 토큰은 절대 코드에 포함하지 않음
|
|
179
|
+
- GitHub Secrets에 안전하게 저장
|
|
180
|
+
|
|
181
|
+
### 2. Provenance
|
|
182
|
+
|
|
183
|
+
- NPM provenance로 패키지 출처 증명
|
|
184
|
+
- 공급망 공격 방지
|
|
185
|
+
|
|
186
|
+
### 3. 권한 최소화
|
|
187
|
+
|
|
188
|
+
- 워크플로우별 최소 권한만 부여
|
|
189
|
+
- `id-token: write`로 OIDC 인증
|
|
190
|
+
|
|
191
|
+
## 문제 해결
|
|
192
|
+
|
|
193
|
+
### CI 실패 시
|
|
194
|
+
|
|
195
|
+
1. **테스트 실패**
|
|
196
|
+
- 로컬에서 `bun run test` 실행
|
|
197
|
+
- 실패한 테스트 케이스 확인 및 수정
|
|
198
|
+
|
|
199
|
+
2. **린트 실패**
|
|
200
|
+
- `bun run lint:fix`로 자동 수정
|
|
201
|
+
- 남은 문제 수동 수정
|
|
202
|
+
|
|
203
|
+
3. **빌드 실패**
|
|
204
|
+
- TypeScript 오류 확인
|
|
205
|
+
- `bun run typecheck` 실행
|
|
206
|
+
|
|
207
|
+
### 배포 실패 시
|
|
208
|
+
|
|
209
|
+
1. **NPM 토큰 확인**
|
|
210
|
+
- Secrets에 `NPM_TOKEN` 존재 여부
|
|
211
|
+
- 토큰 만료 여부 확인
|
|
212
|
+
|
|
213
|
+
2. **권한 문제**
|
|
214
|
+
- NPM 계정에 패키지 배포 권한 확인
|
|
215
|
+
- 2FA 설정 확인
|
|
216
|
+
|
|
217
|
+
3. **버전 중복**
|
|
218
|
+
- 같은 버전을 다시 배포할 수 없음
|
|
219
|
+
- 새로운 버전 번호 사용
|
|
220
|
+
|
|
221
|
+
## 향후 개선 계획
|
|
222
|
+
|
|
223
|
+
- [ ] E2E 테스트 추가
|
|
224
|
+
- [ ] 성능 테스트 자동화
|
|
225
|
+
- [ ] 자동 changelog 생성
|
|
226
|
+
- [ ] Slack/Discord 배포 알림
|
|
227
|
+
- [ ] 스테이징 환경 배포 단계 추가
|
|
228
|
+
|