[SPRING] Maven, Gradle

빌드 관리 도구

 

프로젝트에서 작성한 코드와 xml, yml, properties, jar 파일을 JVM이나 Tomcat이 인식할 수 있도록 패키징 해주는 빌드 과정을 빌드 자동화 도구라고 말할 수 있으며 앱 개발 시 다양한 외부 라이브러리를 설치하고 해당 라이브러리를 사용한다. 이때 라이브러리를 모두 다운받지 않고 빌드도구 설정파일에 의해 필요한 라이브러리 종류와 버전과 종속성을 명시하여 명시된 내용을 바탕으로 다운로드 해주는 도구를 빌드 관리 도구라고 한다.

 

[ Maven ]

더보기

 

Java 용 프로젝트 관리도구로서 Apache의 Ant 대안으로 만들어짐.

프로젝트, 빌드 순서, 외부 라이브러리 종속성 관계를 pom.xml에 명시

외부 저장소에서 필요한 라이브러리와 플러그인을 설치 후 로컬 캐시에 모두 저장

 

setting.xml을 통해 중앙저장소에서 로컬저장소로 다운로드로 저장하는데 여기서 저장소의 경로 변경 가능.

 

[ Gradle ]

 

더보기

 

Maven과 Ant 에 개념들을 사용하는 대안으로써 나온 프로젝트 관리 툴이다. ( Open Source )

Groovy 언어 (JVM에서 사용되는 스크립트 언어로 JAVA와 유사)를 사용한 DSL (Domain Specific Language)를 사용하여 xml 파일보다 코드가 간결하다는 장점이 있다.

큰 규모의 프로젝트에 적합하도록 모델링 되었으며 업데이트 된 시점을 알기에 점진적으로 추가할 수 있다.

 

setting.gradle 프로젝트 구성을 설정할 때 작성하는 파일로 싱글 프로젝트의 경우 생략 가능.

 

<Gradle library Structure>

  • src/main/java :
    • 배포할 자바 소스코드 디렉토리
  • src/main/resources :
    • 배포한 설정 파일 디렉토리
  • gradle/wrapper 디렉토리 :
    • 내장 task wrapper. 개발자들이 직접 gradle을 설치하지 않아도 빌드가 가능하다.
  • gradlew :
    • 리눅스 또는 맥 OS 용 실행 쉘 스크립트 파일이다.
  • gradlew.bat :
    • 윈도우용 실행 배치 스크립트 파일이다.
  • gradle-wrapper.jar :
    • JAR 형식으로 압축된 wrapper파일이다. gradlew나 gradlew.bat 파일이 프로젝트 안에 설치되는 이 파일을 사용하여 gradle task를 실행한다.
  • gradle-wrapper.properties :
    • gradle wrapper 설정정보 파일이다. wrapper의 버전등을 확인할 수 있다.
  • build.gradle :
    • 프로젝트의 라이브러리 의존성, 플러그인, 라이브러리 저장소등을 설정하는 빌드 스크립트 파일이다.
  • settings.gradle :
    • 프로젝트의 구성 정보 파일. 멀티 프로젝트를 구성하여 프로젝트를 모듈화할 경우, 하위 프로젝트의 구성을 설정할 수 있다.

[ build.gradle ]

 

더보기

 

  1. Plugin
    1. 프로젝트 빌드를 위해 필요한 작업 지원하는 플러그인 설정
    2. 웹 표준 기능을 확장하는 프로그램
  2. Configurations
    1. 자바에서 의존성을 그룹화
    2. Compile 
      1. 프로젝트 컴파일할 때 필요한 의존 라이브러리
    3. Runtime
      1. 프로젝트를 실행할 때 필요한 의존 라이브러리 ( Complie을 포함 )
  3. Repository
    1. gradle 이 필요한 라이브러리를 자동으로 다운받는 저장소
    2. mavenCental()은 gralde의 메소드로 Maven 중앙 저장소를 뜻한다.
  4. ext
    1. 여러 라이브러리 간에 공유할 수 있는 전역 변수를 설정하는 곳이다.
  5. dependencies
    1. 저장소에 필요한 라이브러리를 사용하기 위한 문장
  6. dependencyManagement
    1. 어떤 버전을 사용할 것인지 기술함.

 

[ Maven , Gradle 차이점 ]

더보기

 

Maven은 고정적이고 선형적인 단계의 모델을 Gradle 은 작업 의존성 (Configuration Injection)를 기반으로 한다.

Gradle은 어떤 작업이 업데이트 되었는지를 알고 있기에 이미 빌드 된 작업을 실행시키지 않으므로 빌드 시간 단축.

Gradle이 늦게 출시 된 만큼 사용성, 성능이 띄어나다고 한다.

Gradle은 concurrent에 안전한 캐시를 허용한다.

 

[ Maven, Gradle 코드 비교 ]



// Maven -> pom.xml


<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<scope>runtime</scope>
	<optional>true</optional>
</dependency>

	생략


// Gradle -> application.yml

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

 

 

'🍃 스프링' 카테고리의 다른 글

[SPRING] 남의 코드 이해하기  (1) 2023.05.07
[SPRING] Filter, Interceptor  (0) 2022.10.06
[SPRING] Dispatcher Servlet  (0) 2022.10.02
[SPRING] JPA, ORM  (0) 2022.09.27
[SPRING] JAVA8  (0) 2022.09.25