본문 바로가기
Gradle

[Gradle] 프로젝트가 어떻게 생겼을까?

by 개발자의 2025. 6. 9.

Gradle 프로젝트를 일단 한번 만들어보자.

Gradle 학습 프로젝트 생성

 

나는 Intellij Ultimate, JDK 21, Gradle DSL은 Kotlin을 쓴다.

참고! Gradle DSL?
 Gradle DSL은 Gradle 빌드 시스템에서 사용하는 도메인 특화 언어(Domain Specific Language)다. 쉽게 말해서 우리가

프로젝트를 빌드할 때 필요한 설정, 의존성, 플러그인 적용, 태스크 등록 등 모든 작업을 정의하는 언어라고 할 수 있다.

 기존에는 Groovy 기반으로 많이 썼엇는데, 요즘에는 거의 Kotlin 기반으로 쓰고 있는것 같다. 내 경우에 Kotlin을 DSL 언어로 채택한 이유는 엄격한 문법체크 때문이다. 엄격한 문법 체크는 빌드 스크립트 자체의 통일성을 보장해주고, 유지보수를 쉽게 만든다고 생각한다.

 

Advanced Settings > Gradle Distribution에서 Wrapper를 선택하면 Gradle 버전을 선택하게되고, Local Machine을 선택하면, Gradle이 설치된 경로를 선택하게 된다.

 

만들어진 프로젝트를 보면 아래와 같다.

 

 

디렉토리 / 파일별로 역할을 한번씩 짚고 넘어가자.

  •  .gradle/
    • 직접 생성여부 : X
    • 직접 수정여부 : X
    • 소스 관리여부 : X
    • Gradle 프로젝트 구조에서 이 폴더는 항상 자동 생성/갱신됨
    • Gradle이 내부적으로 사용하는 캐시 폴더
    • 빌드 캐시, 의존성 캐시, 빌드 출력물 관리 등에 사용함.
    • 빌드 오류가 반복될 때, 이 디렉토리 자체를 삭제 후 재빌드 하는 리셋 용도로 씀.
  • .idea/
    • 직접 생성여부 : X
    • 직접 수정여부 : X
    • 소스 관리여부 : X
    • JetBrains 계열 IDE(Intellij, Android Studio)가 관리하는 프로젝트 설정 폴더.
    • 이 디렉토리의 gradle.xml은 이 프로젝트에서 Gradle관련 설정을 담고 있는 파일.
  • buildSrc/
    • 직접 생성여부 : O
    • 직접 수정여부 : O
    • 소스 관리여부 : O
    • 커스텀 태스크를 선언할경우 사용하는 디렉토리
    • 디렉토리 루트에 build.gradle.kts 생성
    • /src/main/kotlin/ 패키지 아래로, 코틀린 파일을 위치 시켜야 함.
    • /src/main/java/ 패키지 아래로, 자바 파일도 사용 가능함.
    • buildSrc 디렉토리는 별도의 Gradle 모듈처럼 인식하기 때문에, 코틀린 소스코드, 코틀린 DSL, 코틀린 플러그인 사용 가능.
  • gradle/wrapper/
    • 직접 생성여부 : X
    • 직접 수정여부 : O
    • 소스 관리여부 : O
    • Gradle Wrapper 관련 파일이 존재함.
    • gradle-wrapper.jar, gradle-wrapper.properties
    • 프로젝트 환경에 Gradle가 설치되어 있지 않아도, 정해진 버전으로 프로젝트를 빌드할수 있게 해주는 장치
    • 개발자가 직접 손대는 경우는 거의 없지만, 프로젝트 버전을 올리거나, 특정 설정을 할때 properties 파일을 변경함
  • build.gradle.kts
    • 직접 생성여부 : X(루트 build.gradle.kts), O(각 프로젝트 / buildSrc 하위 build.gradle.kts)
    • 직접 수정여부 : O
    • 소스 관리여부 : O
    • Gradle 프로젝트 구조의 핵심
    • 개발자가 Gradle DSL로 작성하는 빌드 스크립트
    • Plugin, Dependency, Task, Build Option 등 프로젝트 전반의 빌드 설정을 모두 관리하는 파일
  • gradle.properties
    • 직접 생성여부 : O
    • 직접 수정여부 : O
    • 소스 관리여부 : O
    • 전역 공통 변수 관리를 위한 파일 (주로 버전)
    • 빌드 성능 / 환경 설정
      • org.gradle.damon=true
      • org.gradle.parallel=true
      • org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
      • 빌드 속도/ 환경 최적화, 메모리 부족 이슈 대응 등에서 사용 가능
    • 공통속성 관리
      • 루트 gradle.properties에 선언하면 모든 하위 모듈 / 서브 프로젝트에 자동 전파
      • 서브 프로젝트마다 gradle.properties 작성도 가능
    • CI/CD등 자동화 파이프라인 환경변수 연동
      • jenkins, github Actions 등에서 빌드 환경에 따라 gradle.properties 값을 동적으로 주입해 빌드 옵션, 버전, 플러그인 적용 등을 자동화 가능.
  • gradlew(Unix), gradlew.bat(Windows)
    • 직접 생성여부 : X
    • 직접 수정여부 : X
    • 소스 관리여부 : X
    • Gradle Wrapper 실행 스크립트, OS에 따라 적절한 스크립트 사용.
    • Gradle을 전역 설치 하지 않아도, ./gradlew build 명령어만 입력하면 알아서 적절한 버전의 Gradle 다운받아 실행.
    • Gradle 프로젝트에 항상 포함되어야 누구나 동일 환경에서 빌드 가능.
  • settings.gradle.kts
    • 직접 생성여부 : X
    • 직접 수정여부 : O
    • 소스 관리여부 : O
    • 여러 모듈 구성을 위한 프로젝트 구조 선언 파일
    • Gradle 프로젝트 구조에서 멀티모듈이 아니어도 항상 존재함.

정리하자면,

 

대부분의 단일(싱글) 프로젝트에는 루트 디렉토리의 build.gradle.kts 파일만 설정하면 된다.

이 파일만으로도 전체 빌드, 의존성 관리, 플러그인 등 핵심 설정이 가능하다.

 

다만, 아래와 같은 특정한 목적이 있는 경우에 추가로 설정하면 된다.

 

1) 전역 공통 버전관리를 하고 싶다면?

- gradle.properties 파일 생성 / 작성

 

2) 멀티 프로젝트를 설정한다면?
- settings.gradle.kts 로 프로젝트 구조를 설정하고

- 멀티모듈 내부의 build.gradle.kts 파일을 생성 및 설정한다.

 

3) Gradle Wrapper 버전을 바꾸거나, 특정 설정이 필요하다면?

- gradle-wrapper.properties 파일을 수정한다.

 

4) Gradle에 커스텀 Task를 설정하고 싶다면?

- buildSrc 디렉토리를 만들고

- build.gradle.kts를 작성한다.

- buildSrc/src/main/kotlin/ 패키지를 만든다.

- .kt 파일로 커스텀 태스크를 생성한다.