- 모든 .md, .html 파일 권한을 644로 정상화 - .gitignore 파일 권한도 644로 수정 - 문서 파일에 실행 권한은 불필요하고 보안상 바람직하지 않음 - deprecated 아이디어 폴더 생성 및 레벨별 UI 변경 아이디어 이동
115 lines
2.8 KiB
Markdown
115 lines
2.8 KiB
Markdown
# 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. 성능 측정 및 모니터링 |