HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏪
TS Store
/
🏉
Gradle
🏉

Gradle

Person
완료율%
상태
완료
나의 블로그
Think Sharing (TS)
🕐
Gradle
주제내용Build 는 무엇일까요?Gradle Dependency ConfigurationsJava 라이브러리 플러그인 구성test 구성 설정뜯어보기implementation vs api (compile)
 

주제

Gradle 에 대해서 알아봅시다.
 

내용

notion image
  • Groovy를 이용한 빌드 자동화시스템으로 여러 가지 언어를 지원하고 있습니다.
  • 라이브러리 버전관리와 의존성 관리를 해줍니다.
  • Maven 보다 적은 양의 스크립트로 짧고 간결하게 작성할 수 있습니다.

Build 는 무엇일까요?

  • 프로젝트를 진행하면서 작성한 소스코드나 파일이나 자원등을 jvm이 인식할 수 있는 패키징하는 과정 및 결과물입니다.
 

Gradle Dependency Configurations

Java 라이브러리 플러그인 구성

   https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph
  • 초록색은 사용자가 종속성을 선언하는데 사용해야하는 구성입니다.
  • 분홍색은 구성 요소가 컴파일되거나 라이브러리에 대해 실행될 때 사용되는 구성입니다.
  • 파란색은 자체 사용을 위해 구성 요소 내부에 있습니다.
 

test 구성 설정

https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph
 

뜯어보기

  • compileClassPath
    • 컴파일 시에 필요한 class path 입니다.
    •  
  • runtimeClassPath
    • 런타임 시에 필요한 class path 입니다.
 
  • compileOnly
    • notion image
    • 컴파일 시에만 필요하여 컴파일할 때 종속성을 사용하고 build 결과물에 넣지 않습니다.
    • compileClassPath에만 dependency를 둡니다.
    • build 결과물의 크기가 작아진다는 장점이 있습니다.
 
  • runtimeOnly
    • notion image
    • 런타임 시에만 필요한 경우
    • runtimeClassPath에만 dependency를 두는 것
    • 컴파일할 때는 사용하지 않기 때문에 컴파일 시간이 빨라집니다.
 
  • annotationProcessor
    • notion image
    • 그래들은 compileClassPath와 annotationProcessorClassPath를 분리하여 빌드 성능을 향상시키는데
    • 기본적으로 포함되어 있는 어노테이션이 아니라면 annotationProcessor를 통해 명시적으로 추가해줘야합니다.
    • lombok 사용시 컴파일러는 lombok 에서 제공하는 어노테이션을 인식하지 못합니다.
      • ⇒ (querydsl 도 사용해줘야하는거 같은데?)

implementation vs api (compile)

class A { B = new B(); } class B { int create { return new C().create(); } } // A 클래스를 사용할 때 // 컴파일 시점에 B 클래스를 의존하고 // 런타임 시점에 B, C 클래스를 의존한다.
 
  • implementation
    • C를 변경하면, B와 C만 recompile하면 된다.
      • B는 C를 직접적으로 의존하고 있기 때문에
    • A 입장에서 compileClassPath에 C가 들어가지 않는다.
 
  • api , compile ( 권장 x)
    • A에서 C에 대한 접근이 가능하다.
    • A 입장에서 compileClassPath에 C 가 존재한다.
    • C가 변경될 경우 A 도 recompile 된다.
    • 소비자 유출
      • A를 사용하는 소비자 입장에서 compileClassPath에 C가 들엉오면서 노출된다.
      • runtimeClassPath에는 C를 사용하기때문에 노출 되는 것이 당연하다.