피드로 돌아가기
Leiningen — Complete Tutorial & Best Practices
Dev.toDev.to
DevOps

AOT 컴파일과 Profile 전략을 통한 Clojure 빌드 최적화

Leiningen — Complete Tutorial & Best Practices

ivan.gavlik2026년 4월 12일8intermediate

Context

Clojure의 동적 컴파일 특성으로 인한 JVM 표준 Entry Point 부재 문제 분석. 런타임 시점에 코드를 컴파일하는 방식은 개발 효율은 높으나 독립 실행 가능한 JAR 배포 시 JVM의 main method 인식 불가라는 제약 발생.

Technical Solution

  • :gen-class 지시어를 통한 JVM 표준 클래스 파일 생성 구조 설계
  • :aot 설정을 활용하여 빌드 타임에 바이트코드를 미리 생성하는 Ahead-of-Time 컴파일 도입
  • :profiles 설정을 통한 환경별 의존성 및 빌드 전략 분리(dev/test/prod/uberjar)
  • :uberjar 프로필 내 :aot :all 설정을 통한 프로덕션 환경의 실행 속도 확보 및 Cold Start 지연 해소
  • :aliases를 통한 복잡한 Shell 명령어 집합의 단일 커맨드 추상화로 CI/CD 파이프라인 효율화
  • 개발 환경의 빌드 속도 저하 방지를 위해 AOT 적용 범위를 프로덕션 빌드로 제한하는 Trade-off 전략 채택

- JVM 기반 동적 언어 배포 시 Entry Point의 클래스 파일 존재 여부 확인 - 환경별 의존성 분리를 통해 프로덕션 아티팩트의 크기 최소화 및 보안 강화 - 개발 주기 단축을 위해 빌드 타임 비용이 높은 AOT 설정은 특정 프로필에만 할당 - 반복적인 빌드/테스트/배포 시퀀스는 Alias를 통해 표준화하여 휴먼 에러 방지

원문 읽기