Gradle에 대해 설명해 주세요.
백엔드와 관련된 질문이에요.
Gradle은 Java, Kotlin, Scala 등 JVM에서 실행되는 언어에서 자주 사용되는 빌드 자동화 도구입니다. 기존의 Ant와 Maven의 단점을 보완하여 증분 빌드, 빌드 캐시, 데몬 프로세스를 활용해 빌드 속도를 최적화하고, 멀티 프로젝트를 쉽게 관리할 수 있도록 설계되었습니다. 또한, 다양한 플러그인과 커스텀 태스크를 사용해 확장성을 높일 수 있으며, Groovy 또는 Kotlin DSL을 사용해 유연한 빌드 스크립트를 작성할 수 있습니다.
빌드 자동화 도구를 왜 사용할까요?
- 컴파일, 테스트, 패키징, 배포와 같은 반복 작업을 자동화하여 개발 생산성을 높일 수 있습니다.
- 일관된 빌드 환경을 제공하여 어떤 환경에서나 동일한 빌드 결과를 보장할 수 있습니다.
- 증분 빌드, 빌드 캐시, 병렬 처리 등을 통해 빌드 속도를 최적화할 수 있습니다.
- 테스트 누락 등 수동 작업 시 발생할 수 있는 휴먼 에러를 방지할 수 있습니다.
- 외부 라이브러리를 자동으로 관리하여 의존성 버전 충돌을 줄일 수 있습니다.
- CI/CD와 연동하여 빌드 후 패키징, 배포까지 연속적으로 처리할 수 있습니다.
Maven과 Gradle의 차이점을 설명해 주세요.
가장 큰 차이점은 빌드 스크립트 작성 방식과 빌드 속도입니다.
Maven은 XML 기반(pom.xml)의 정형화된 방식으로 작성하지만, Gradle은 Groovy 또는 Kotlin DSL을 사용해 더 유연하고 가독성이 좋은 빌드 스크립트를 작성할 수 있습니다. 그리고 Maven은 항상 전체 프로젝트를 빌드하는 방식이라 빌드 속도가 느리지만, Gradle은 증분 빌드와 빌드 캐시를 지원해서 훨씬 빠르게 동작합니다.
자세한 차이는 아래의 표를 참고해 주세요.
Maven | Gradle | |
---|---|---|
빌드 스크립트 | XML | Groovy/Kotlin DSL |
빌드 속도 | 느림 | 빠름 |
의존성 관리 | 기본적인 의존성 관리 | 동적 버전 관리, 의존성 캐싱 최적화 |
확장성 | 한정적인 플러그인 기능 | 다양한 플러그인, 커스텀 태스크 |
Android 지원 | 공식적으로 지원 X | Android 공식 빌드 도구 |
멀티 프로젝트 빌드 | 상속 방식, 설정이 복잡함 | 설정 주입 방식, 멀티 프로젝트 관리 최적화 |
Dependency Configuration이 무엇이고 어떤 종류가 있을까요?
Dependency Configuration은 애플리케이션에 필요한 의존성의 사용 범위를 정의하는 설정입니다. 사용 범위를 명확히 구분하는 이유는 빌드 성능 개선과 불필요한 의존성을 제거해서 빌드 결과물의 크기를 최적화하기 위함입니다.
- implementation은 컴파일 및 런타임 시점에 모두 필요한 의존성입니다. 해당 의존성이 현재 모듈에서만 필요할 때 사용하고, 일반적인 라이브러리나 프레임워크를 추가할 때 주로 사용합니다.
- api는 implementation과 비슷하지만, 다른 모듈에서도 접근할 수 있는 의존성을 정의할 때 사용합니다. 예를 들어, a -> b -> c의 의존성이 있을 때, a에서 c를 사용하려면 b에서 c를 api로 추가해야 합니다.
- compileOnly는 컴파일 시점에만 필요한 의존성으로, Lombok과 같은 라이브러리에서 사용합니다.
- annotationProcessor는 컴파일 시점에 실행되는 어노테이션 프로세서를 추가할 때 사용합니다. 예를 들어, MapStruct와 Lombok과 같이 컴파일 시점에 어노테이션을 기반으로 특정 프로세스를 수행하는 라이브러리에서 사용합니다.
- runtimeOnly는 런타임 시점에만 필요한 의존성입니다. 예를 들어, 데이터베이스 드라이버는 컴파일 시점에 필요하지 않지만, 애플리케이션이 실행될 때만 필요하므로 runtimeOnly로 설정합니다.
- testImplementation, testCompileOnly, testRuntimeOnly와 같이 'test'가 포함된 설정은 테스트 코드에서만 사용되는 의존성을 추가할 때 사용합니다.
추가 학습 자료를 공유합니다.
공유하기
컨텐츠 피드백