개발, 상용 배포를 반복하는 과정에서 빌드와 배포 시간이 너무 오래 걸려 답답함을 느꼈다. 프로젝트의 코드량에 비해 도커 이미지 크기가 비정상적으로 컸고, 이를 해결하기 위해 원인을 분석했다.
1. 도커 이미지 크기 확인
빌드된 도커 이미지를 확인한 결과, 750MB에 달하는 용량으로 인해 배포 속도가 저하되고 있었다.
2. 원인 분석
베이스 이미지
•
알파인(Alpine) 기반 이미지를 사용하고 있어 문제 없음
JAR 파일 크기
•
app.jar 크기가 700MB 이상
•
예상보다 큰 JAR 파일로 인해 도커 이미지 크기 증가
-rw-r--r--@ 1 thlee staff 705M Mar 15 09:22 app.jar
Bash
복사
JAR 내부 라이브러리 확인
•
JAR 파일을 압축 해제 후 라이브러리 용량을 분석
•
용량이 큰 라이브러리를 정렬하여 확인
$ jar -xvf app.jar
$ ls -alSSh ./BOOT-INF/lib
-rw-r--r--@ 1 thlee staff 20M Mar 15 00:18 ec2-2.29.8.jar
Bash
복사
•
AWS SDK 관련 라이브러리가 상당한 용량을 차지하고 있었음
3. 문제 원인
AWS SDK 전체를 포함한 문제
•
S3 SDK만 필요했으나, AWS SDK 전체를 의존성으로 추가함
•
불필요한 라이브러리가 포함되어 JAR 파일 크기 증가
잘못된 의존성 설정
# AWS SDK 전체 포함 (잘못된 설정)
aws-s3 = { module = "software.amazon.awssdk:aws-sdk-java", version = "2.29.8" }
TOML
복사
올바른 의존성 설정
# S3 SDK만 포함 (최적화)
aws-s3 = { module = "software.amazon.awssdk:s3", version = "2.29.8" }
TOML
복사
4. 결론
S3 SDK를 사용하는 기능을 내가 담당했으며, 잘못된 의존성 추가로 인해 도커 이미지 크기가 비정상적으로 커지는 문제가 발생했다. 이로 인해 배포 속도가 지연되었으며, 다행히 아무도 인지하지 못한 상황에서 직접 원인을 발견하여 해결할 수 있었다.
GitHub Actions + Self Hosted Runner 사용으로 추가적인 비용이 없어서 다행이고, 만약 과금 모델을 사용했고 발견하지 못했더라면 비용 손해 발생 가능성도 있을 수 있었다.