[기타] Maven프로젝트와 Gradle프로젝트의 차이점
이번에 스프링부트 프로젝트를 생성하면서 나는 평소에 쓰던 Maven프로젝트를 생성하였는데,
Maven 프로젝트 말고도 Gradle프로젝트 라는 녀석이 있었다. 그래서 이게 뭐지.. 싶어서
조금 찾아보니까. Gradle이 Maven의 상위호한(?) 같은 느낌이었다. 장점들도 많고..
단지 지금까지 Maven를 주로 써왔으니까. 그 익숙함에 계속 쓰는 것 같은데
배달의민족으로 유명한 우아한형제들이나, 스타트업같이 신기술을 쓰는 회사에서는
Maven보다 Gradle을 더 많이 사용한다고 한다.
오늘은 그냥 Maven과 Gradle의 차이점에 대해서만 알아보고자 한다..
그래서 Maven이 뭔데??
============================================================================
우리가 프로젝트를 진행하다보면 여러 라이브러리를 쓰게 된다. 근데 프로젝트에 기능들이
추가되면 더 많은 라이브러리가 필요하게 되고, 사용자가 직접 관리하기가 어려워진다.
이때 Maven을 활용하게 되는데, 즉 "Maven은 라이브러리 관리를 지원해주는 도구"이다. ( 다른 기능도 많지만.. )
Maven은 내가 사용 할 라이브러리 뿐만 아니라, 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지
"관리" 해주어 네트워크를 통해 자동으로 다운로드 받아준다.
Maven프로젝트를 생성하면 POM.xml 파일이 자동으로 생성된다.
POM은 Project Object Model의 약자로, 이름 그대로 Project Object Model의 정보를 담고 있는 파일이다.
이 파일에서 주요하게 다루는 기능들은 다음과 같다.
POM.xml 포함기능
-프로젝트 정보 : 프로젝트의 이름, 개발자 목록, 라이센스 등
-빌드 설정 : 소스, 리소스, 라이프 사이클별 실행한 플러그인(goal)등 빌드와 관련된 설정
-빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
-POM연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등
( Maven프로젝트 생성 및 라이브러리 추가 참조글 )
그래서 Gradle이 뭔데??
============================================================================
현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이라고 한다.
물론 웹에서도 사용가능.. Java, C/C++, Python과 같은 여러 언어를 지원한다.
그레이들(Gradle)은 Groovy라는 언어를 기반으로 한 빌드 도구이다. <- 여기까지 공식소개
자세한 내용은 생략하고,
기존의 Maven을 많이 사용해본 사용자라면 알겠지만, Maven의 XML을 기반으로 빌드 처리를 작성한다.
이게 몇개만 넣으면 간단하겠지만, 라이브러리가 많아지면 점점 복잡해지고, 관리하기도 힘들어진다.
그런데 Gradle은 Java와 거의 비슷한 코드를 써서 빌드 처리를 관리 할 수 있다..
즉 코드가 간결해지고 가독성이 올라가며, 속도 또한 Maven에 비해 빠르다고 한다.
아직까지는 Maven이 점유율 면에서 높지만 점점 Gradle이 추월해가는 상태..
( 데이터형식을 예로 들면 XML에서 JSON형태로 넘어온 것과 같은 느낌.. )
솔직히 아직 Maven밖에 사용해보지 않아서 Gradle에 대해서는 잘모르지만,
Maven이 더 친숙한 느낌이 들면서도 Gradle에서의 build.gradle의 코드를 보면
확실히 가독성도 좋아지고, 간결한 코드에 약간 끌린다.. 진짜 이걸 보면서 느끼는게,
API를 받아올 때 XML형식에서 JSON형식으로 바뀐 현재 상황가 비슷한 양상이 되지 않을까? 라는 생각이 든다
결국 XML형식보다는 JSON형식이 가독성도 좋고, 코드도 간결했던 것과 똑같기 때문이다..
나중에 기회가 된다면, Maven프로젝트와 Gradle프로젝트에 대해서도 정리해보고 싶다.