참고: 벨로그
이번 Spring boot
를 통해 웹 개발을 처음 공부하는데,
Project 생성하는데 있어서 Gradle
, Maven
으로 나뉘어서 생성을 해야 한다. 이번 인터넷 강의를 들을때에는 Maven
으로 생성했지만 중간에 막히는 부분이 있을 때 서칭을 하다보면 Maven
으로 생성된 프로젝트 구성이랑 다르게 코딩을 진행하는 분들을 목격했다. 예를 들어 Maven
엔 pom.xml
이 있는데 참고하는 사이트에는 없다던가?
이 둘 차이가 궁금해서 알아보고 정리해보려고 한다.
Spring boot
로 프로젝트를 진행하다 보면 외부 라이브러리를 이용하여 여러 가지 기능을 구현해야 한다. 이 때 이 외부 라이브러리를 의존성 라이브러리라고 한다.
pom.xml
에 보면<dependencies>
하위에 여러가지 라이브러리를 추가한 것을 볼 수 있다. 이렇게 라이브러리를 사용하기 위해서는 임의로 추가해줘야 한다.
이 의존성 라이브러리를 추가할 때 사용하는 도구가 Maven
또는 Gradle
이다.
위 Maven
또는 Gradle
를 Build Tool이라고 한다. 여기서 Build는 소스코드 파일(예를 들어 Spring boot는 .java
파일), 기타 프로젝트에서 사용되는 파일(.xml
, .jpg
등등)을 컴퓨터에서 실행할 수 있게 독립적인 형태로 변환하는 것이다. 이러한 파일들을 jvm
, 톰캣
같은 WAS가 인식할 수 있도록 패키징하는 것이다.
WAS
는 Web 서버처럼 HTTP 프로토콜을 기반으로 동작하고 웹 서버 기능을 포함하여 동적 리소스도 제공할 수 있는 에플리케이션 서버이다. 반면에Web
은 정적 리소스를 제공하는 서버.
WAS
의 대표적인 것으로는Tomcat
이 있다.WAS
는JSP
,Servlet
구동환경을 제공하여 웹 컨테이너 또는 서블릿 컨테이너라고 불린다.
- 동적 리소스: 데이터베이스 조회, 로직 처리 등...
- 정적 리소스: HTML문서, CSS, 이미지 파일 등...
✔️ Clinet -> Web Server -> WAS -> DB 동작 과정
다시 돌아와서, Build Tool은 저 Build 과정을 어떻게 진행하나?
Build Tool은 아래 과정을 통해 소스코드에서 에플리케이션에 필요한 외부 라이브러리를 자동으로 관리해준다.
- 종속성 다운로드 (전처리)
- 소스코드의 바이너리 코드로 컴파일
- 바이너리 코드를 패키징
- 테스트 진행
- 프로덕션 시스템에 배포
그럼 Maven
과 Gradle
은 어떤 차이가 있을까>
아파치에서 제작된 Build Tool로써, LifeCycle
관리 목적 Build Tool이다.
Maven
은 정해진 LifeCycle
로 작업을 수행하며, 전반적인 프로젝트 관리 기능을 포함한다.
LifeCycle
엔 다음과 같은 과정이 있다.
- Clean: 빌드 시 생성되었던 파일 삭제
- Validate: 프로젝트의 타당성 검토. 필요한 모든 정보를 사용할 수 있는지 확인
- Compile: 프로젝트 소스코드 컴파일
- test: 단위 테스트 진행. 테스트 실패 시 빌드 실패 처리. 스킵 가능
- Package: 컴파일된 소스 코드와 리소스들을 jar, war 등 파일의 배포를 위한 패키지로 만든다.
- Verify: 통합 테스트 결과에 대한 검사 진행. 품질 기준 충족 확인
- Site: 프로젝트 문서와 사이트 작성, 생성
- Deploy: 생성된 package를 원격 저장소에 release
Maven
은 많은 과정을 통해 빌드를 진행한다. 직관적으로 Maven
은 빌드 속도가 느리다는 것을 알 수 있다❗️
Maven
은 pom.xml
에 필요한 라이브러리를 정의함으로써 의존성을 주입한다.
pom.xml
에는
을 정의한다.
Maven
을 대체할 수 있는 프로젝트 구성 관리 및 범용 Build Tool. Ant Builder와 Groovy script를 기반으로 구축되어 Ant 역할과 배포 스크립의 기능을 모두 사용 가능. Spring boot와 안드로이드에서 사용된다.
Gradle
는 Spring boot와 안드로이드에서 사용가능하다 했다. 그러면 맨 위 사진을 다시 봐보자.
Gradle
를 보면Groovy
와Kotlin
로 나뉘어진 것을 알 수 있다. 여기서 Spring boot로 사용하려면Groovy
로 사용!
안드로이드에서 사용하려면Kotlin
으로 사용!
근데Kotlin
은 알겠지만Groovy
는 뭔지 모른다.
Groovy
는 JVM에서 실행되는 Script 언어이다. JVM에서 동작하지만 소스코드를 컴파일할 필요 없다. Java와 호환되며, Java class 파일들을 Groovy class로 사용 가능하다. Java 문법과 유사하여 빌드 처리를 관리할 수 있다.
Groovy
기반의 DSL(Domail Specific Language
를 사용하여 코드로써 설정 정보를 구성하므로 구조적인 정점이 있다.Gradle
설치 없이 Gradle wrapper
을 이용하여 빌드 지원Gradle
은 멀티 프로젝트 빌드를 지원하기 위해 설계된 Build Tool이다.Maven
을 완전 지원위 두 Build Tool중에 누가 좋을까?
❗️ Gradle이 Maven보다 좋다라는게 정설
1. Build라는 동적인 요소를 XML로 정의하기엔 어렵다.