Search
💣

JAR Size BOMB!!

Date
2025/03/15
Tag
💩Foo
Gradle
숨기기
개발, 상용 배포를 반복하는 과정에서 빌드와 배포 시간이 너무 오래 걸려 답답함을 느꼈다. 프로젝트의 코드량에 비해 도커 이미지 크기가 비정상적으로 컸고, 이를 해결하기 위해 원인을 분석했다.

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 사용으로 추가적인 비용이 없어서 다행이고, 만약 과금 모델을 사용했고 발견하지 못했더라면 비용 손해 발생 가능성도 있을 수 있었다.
개발 및 배포 환경이 조금이라도 이상하다면 즉시 확인이 필요
의존성 추가 시 불필요한 라이브러리가 포함되지 않도록 주의
 문제가 발생하기 전에 점검하는 습관