반응형
개요
이번에는 Spring에서 사용되는 빌드 도구 maven과 gradle의 차이점에 대해서 알아보도록 하겠습니다.
Spring 빌드도구maven과 gradle 차이점
Maven 장점 및 특징
- 자바 전용 프로젝트 라이프사이클 관리 목적 빌드 도구이며 Apache Ant 불편함을 해결하고자 만들어짐.
- pom.xml을 이용한 정형화된 빌드 시스템(필요한 라이브러리를 정의해 놓으면 알아서 네트워크를 자동으로 다운로드하여줌)
- 간단한 설정을 통한 배포 관리가 가능함.
Maven 설정 파일
- Setting.xml – Maven을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드하는 위치(로컬 저장소)의 경로를 지정, 변경할 수 있다.
- Pom.xml – 의존성 추가를 할 수 있으며 프로젝트의 설정되어있는 라이브러리, 설정 등 알 수 있다.
Gradle 장점 및 특징
- Maven 과 Ant의 장점을 조합하여 만든 빌드 도구이다.
- Build.gradle을 이용한 정형화된 빌드 시스템이다.
- 멀티 프로젝트에 용이하다.
Gradle 설정 파일
- build.gradle – Maven의 pom.xml과 비슷한 플러그인, 의존성 추가를 위한 파일이다.
Gradle 사용이유.
Gradle이 Maven보다 좋은 점.
1. Build라는 동적인 요소를 XML로 정의하기(Maven 방식)에는 어려운 부분이 많다.
- 설정 내용이 길어지고 가독성 떨어짐.
- 의존관계가 복잡한 프로젝트 설정하기에 부적절
- 상속구조를 이용한 멀티 모듈 구현
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야 함.
2. Gradle은 Groovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
- Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버.
- 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
따라서 build 도구로 maven 보다 gradle을 사용한다.
Maven과 Gradle의 차이 및 성능 비교
Gradle이 시기적으로 늦게 나온 만큼 사용성, 성능이 더 뛰어나다.
Groovy 실행 원리
- Groovy 소스는 컴파일하면 Java class가 만들어진다. 이것을 실행하기 위해서는 groovy.jar와 asm.jar 라이브러리 파일이 필요하다.
Groovy 문법 doc
https://docs.groovy-lang.org/next/html/documentation/#_groovy_language_specification
Gradle 환경설정.
<build.gradle> 참조
- Plugin
- 프로젝트를 빌드하기 위해 필요한 작업들은 지원하는 플러그인 설정이다.
- 웹 표준 기능을 확장해주는 프로그램이다.
- Configurations
- 자바에서의 의존성을 그룹화시킨다.
- Compile : 프로젝트를 컴파일할 때 필요한 의존 라이브러리.
- Runtime : 프로젝트를 실행할 때 필요한 의존 라이브러리. - 기본적으로 Compile을 모두 포함.
- Repositories
- gradle이 필요한 라이브러리를 자동으로 다운하기 위해 사용하는 저장소이다.
- jcenter()와 mavenCentral()은 gradle의 메소드이며, 이 둘이 주로 사용된다.
- jcenter는 JCenter 저장소이고 mavenCentral()은 Maven 중앙 저장소이다.
- 해당 코드 세팅에서 두 저장소를 모두 포함했다.
- ext
- 일종의 전역변수를 설정하는 곳이다.
- 여러 라이브러리 모듈이 포함되어 있을 때 모듈간에 공유할 수 있는 변수이다.
- dependencies
- 저장소에서 필요한 라이브러리를 사용하기위한 문장이다.
- 해당 코드에서는 주로 implementation~ 의존문을 썼으며 이는 컴파일시에 의존하는(사용) 라이브러리를 지정하는 것이다.
- 의존문에 사용된 주로 사용하는 엔진 발췌
spring-boot-starter-thymeleaf 텍스트, HTML, XML, Javascript, CSS 그리고 텍스트를 생성할 수 있는 템플릿 엔진이다. org.projectlombok:lombok getter, setter, toString 등의 메서드 작성 org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16 /
mysql:mysql-connector-java/
org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3/
org.springframework.boot:spring-boot-starter-data-jpamybatis와 jpa를 이용한 db 개발 환경 org.apache.httpcomponents:httpclient:4.3.6 http 요청을 하게해주는 라이브러리
- dependencyManagement
- 어떤 artifact의 버전을 사용할 것 인지만 기술하는 곳
Gradle 프로젝트 java library 구조
- 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 : 프로젝트의 구성 정보 파일. 멀티 프로젝트를 구성하여 프로젝트를 모듈화할 경우, 하위 프로젝트의 구성을 설정할 수 있다.
반응형
'서버 > Spring' 카테고리의 다른 글
[Spring] 생명주기 분석 및 - 생명주기에 따른 코드 (Ajax, Json 사용) (0) | 2021.08.06 |
---|---|
[Spring] Mybatis (Interface생성 및 xml 파일과 Mapping) (1) | 2021.08.03 |
[Spring] 자바 ORM 표준 JPA 란? (0) | 2021.07.27 |
[Spring] Spring boot 내장 서버 (Tomcat , Undertow) 및 서블릿, 서블릿컨테이너 (0) | 2021.07.16 |
Spring 프레임워크 (간단한 User DAO) (리펙토링,메소드 추출) (0) | 2020.01.02 |