Spring 을 사용하게 되면 프로젝트 생성시 빌드 도구를 maven이나 gradle 중에 하나를 선택하게 된다.
나의 경험으로는 안드로이드 앱을 관리할때는 gradle을 주로 사용해왔고, 웹이나 스프링 등의 프로젝트를 관리할때는 maven을 주로 사용해왔다.
어떤걸 써야한다의 정답도 없고 뭐가 더 많이쓰이니 미래를 위해서 어떤걸 써야 도움이 된다의 그런 것도 없지만 사람마다, 기업마다, 프로젝트마다 maven과 gradle을 사용하는데 둘의 차이를 작성해보려고 포스팅을 작성하게 되었다.
우선 앞서 빌드 관리를 한다는 것에 대한 정의를 알아보도록 할것이다.
빌드 관리 도구
우리가 프로젝트에서 작성한 java 코드와 프로젝트 내에 필요한 기타 파일들을 WAS, JVM등에서 인식을 할수 있도록 패키징 하는 과정인데 배포까지 포함되는 작업일 수도 있다.
빌드 자동화 도구라고 생각하면 편하다.
프로젝트 내에서 다양하게 외부의 라이브러리를 가져와야할 상황도 생기고 로컬레포지토리에서도 라이브러리 별로 버전 관리를 해야하는데 이 작업을 도와주는 친구가 빌드관리 도구 이다.
필요한 버전 정보를 셋팅 파일에 명시를 해주는것이다.
Maven
maven은 apache의 ant 대안으로 만들어졌다.
빌드 중인 프로젝트, 빌드 순서, 다양한 외부 라이브러리 종속성 관계를 pom.xml에 명시한다.
maven은 외부에서 받아온 라이브러리 플러그인을 다운로드 하여 로컬 m2 폴더를 생성하여 로컬의 캐시에 저장을 한다.
Gradle
maven과 ant의 개념 대안으로 나온 프로젝트 빌드 관리 툴이다.
Groovy 언어를 사용한 Domain-specific-language 를 사용하고 설정하일 자체가 xml을 사용하는 maven보다 간결하다.
큰 규모로 예상되는 multi project 빌드를 도울수 있도록 디자인 되었다.
둘의 차이를 명시해보면 gradle은 작업 의존성 그래프 기반이고 maven은 고정적이고 선형적인 단계 모델을 기반으로 한다.
성능에서는 둘다 다중 모듈 빌드를 사용하여 병렬로 가능하지만 gradle은 어떤 task가 업데이트 되었고 안되었는지를 체크까지 할수 있기에 incremental build를 허용한다.
그래서 시간이 좀더 단축 된다는 장점이 있다.
또한 gradle에서는 concurrent 에 안전한 캐시를 허용한다.
둘중 정답은 없지만 스펙상 gradle이 더 좋긴 한건 사실이다.
하지만 오래된 프로젝트일 경우는 maven으로 구축되어있는 경우가 많다.
하지만 maven을 gradle로 변경할수 있는 기능도 있다.
상황에 맞게 잘 선택해서 사용을 하면 되겠다.
'IT > Java' 카테고리의 다른 글
ROOT CONTEXT (44) | 2022.06.28 |
---|---|
스프링 스케줄러(@Scheduled) (19) | 2022.05.04 |
스프링부트 동작 원리 (20) | 2022.04.30 |
equals 와 hashCode의 재정의를 같이 해야하는 이유 (17) | 2022.04.26 |
com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. (41) | 2022.04.22 |
댓글