diff --git a/docs/troubleshooting/250723_happybell80_CI빌드시간단축.md b/docs/troubleshooting/250723_happybell80_CI빌드시간단축.md new file mode 100644 index 0000000..c5a36a3 --- /dev/null +++ b/docs/troubleshooting/250723_happybell80_CI빌드시간단축.md @@ -0,0 +1,115 @@ +# rb10508_test CI/CD 빌드 시간 단축 + +**날짜**: 2025-07-23 +**작업자**: happybell80 & Claude + +## 오후 1시 00분 + +### CI/CD 빌드 시간 지연 문제 발견 + +**증상**: +- 첫 빌드: 5분 소요 +- 이후 빌드: 30초 소요 +- pip install 단계에서 대부분의 시간 소비 + +**원인 분석**: +1. Docker 캐시 미사용 시 전체 재빌드 +2. requirements.txt의 대용량 패키지들 + - torch>=2.0.0 (2GB 이상) + - sentence-transformers>=2.2.0 + - chromadb>=0.4.0 + - langchain>=0.1.0 + +## 오후 1시 10분 + +### 사용하지 않는 의존성 분석 + +**분석 방법**: +- grep으로 실제 import 확인 +- 코드베이스 전체 검색 + +**발견된 미사용 패키지**: +1. **큰 패키지 (제거 시 가장 효과적)**: + - torch (2GB+) - 전혀 사용 안함 + - sentence-transformers - 사용 안함 + - alembic - DB 마이그레이션 사용 안함 + +2. **Google 관련 (전부 미사용)**: + - google-auth + - google-auth-oauthlib + - google-auth-httplib2 + - google-api-python-client + +3. **기타 미사용**: + - openai (langchain-openai로 충분) + - pymupdf + - email-validator + - passlib[bcrypt] + - python-jose[cryptography] + - pyjwt + +## 오후 1시 20분 + +### 의존성 정리 + +**작업 내용**: +- requirements.txt에서 미사용 패키지 제거 +- 총 13개 패키지 제거 + +**결과**: +- pip install 시간 예상: 3분 → 30초 이하 + +## 오후 1시 30분 + +### Docker 빌드 최적화 + +**재확인된 문제**: +- Dockerfile에 `--no-cache-dir` 옵션 사용 +- 매번 모든 패키지 새로 다운로드 +- 54초 소요 (전체 빌드의 83%) + +**해결 방안 구현**: + +### 1. pip 캐시 활성화 +```dockerfile +# 기존 +RUN pip install --no-cache-dir --upgrade -r requirements.txt + +# 변경 +RUN --mount=type=cache,target=/root/.cache/pip \ + pip install --upgrade -r requirements.txt +``` + +### 2. 베이스 이미지 전략 +**Dockerfile.base 생성**: +- 모든 의존성 사전 설치 +- 베이스 이미지로 재사용 + +**Dockerfile.optimized 생성**: +- 베이스 이미지 활용 +- 코드만 복사하여 빠른 빌드 + +**build-base.sh 스크립트**: +- 베이스 이미지 빌드 자동화 +- 버전 관리 및 태깅 + +## 교훈 + +1. **의존성 관리의 중요성** + - 사용하지 않는 패키지는 즉시 제거 + - 특히 ML/AI 패키지는 용량이 크므로 주의 + - 정기적인 의존성 감사 필요 + +2. **Docker 최적화 전략** + - `--no-cache-dir`는 CI/CD에서 피하기 + - 베이스 이미지 전략으로 빌드 시간 대폭 단축 + - BuildKit 캐시 마운트 활용 + +3. **CI/CD 성능 개선** + - 첫 빌드 5분 → 30초로 90% 단축 가능 + - 베이스 이미지 업데이트는 requirements.txt 변경 시에만 + +## 다음 단계 +1. 서버에서 베이스 이미지 빌드 및 푸시 +2. CI/CD 파일에서 Dockerfile.optimized 사용하도록 변경 +3. 성능 측정 및 모니터링 \ No newline at end of file