[Spring] Spring Initializr로 프로젝트 시작하기 (Maven/Gradle 비교)

zzangveloper·2022년 10월 15일

Spring

목록 보기
1/2

그냥 프로젝트를 만들지 말고, 왜 이렇게 선택해 만드는가 생각하고 만들자!

Spring Initializr

🎯 https://start.spring.io/
🎯 https://github.com/spring-io/initializr/
🎯 Spring Initializr 참조 가이드

Spring Initializr를 사용하면 간편하게 스프링 프로젝트를 만들 수 있다. Spring Initializr는 JVM 기반 프로젝트를 생성해준다. 사용 가능한 스프링 부트 버전을 비롯한 선택 사항들을 제공하고 프로젝트를 생성하는데 사용되는 메타데이터를 검사하는 API를 제공하기도 한다.

빌드 도구, 사용 언어, 스프링 부트 버전 등을 선택하고 프로젝트 정보를 입력해주면 간편하게 프로젝트를 생성할 수 있다.

오른쪽의 ADD DEPENDENCIES 버튼으로 필요한 라이브러리를 추가해 프로젝트를 생성할 수도 있다. (라이브러리에 대한 자세한 내용은 여기 를 참조하기)

생성한 프로젝트를 사용하는 개발 도구에 import 해주면 드디어 개발을 시작할 준비가 된 것이다!


자바 빌드 도구

Maven과 Gradle 둘 중 어떤 빌드 도구를 사용해야할까?

빌드는 작성한 소스코드를 실행가능한 형태로 컴파일링, 링킹, 패키징 하는 과정이다. Maven과 Gradle은 이러한 빌드를 자동화하고 빌드 라이프 사이클을 관리해주는 빌드 도구이다.

  • 컴파일링: 프로그래머가 작성한 소스코드를 컴퓨터가 읽을 수 있는 바이너리 파일로 변환하는 과정 (.java ➡️ 컴파일러 ➡️ .class ➡️ JVM 클래스 로더)
  • 링킹: 여러 개의 코드와 데이터를 모아 연결해 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업
  • 패키징: 어플리케이션을 배포하고 구동시킬 수 있도록 관련 파일들을 하나로 묶어주는 과정

Maven과 Gradle은 프로젝트에 필요한 라이브러리를 자동으로 추가하고 관리해주며 버전을 동기화해준다. 이러한 빌드 도구를 사용하는 것으로 직접 라이브러리를 추가해 사용하는 번거로움이 사라졌다.

과거의 레거시 프로젝트에서는 Maven을 많이 사용했지만 요즘은 Gradle로 많이 넘어가는 추세라고한다. 왜 Gradle로 넘어갈까?

Ant

Maven과 Gradle 이전에 앤트가 있었다. 이클립스 IDE에 기본적으로 탑재되었던 빌드도구로 XML 파일을 기반으로 한다. 최근 빌드 도구들과 달리 라이브러리 버전을 자동으로 업데이트 하는 기능이 없어 주로 레거시 시스템에서만 사용한다.

Maven

앤트 이후에 나온 자바 빌드 도구로 XML을 기반으로 하며 pom.xml 파일로 의존성을 관리한다. 라이프 사이클 개념이 도입되어 빌드 순서를 정의할 수도 있다.

Gradle

그루비를 이용한 빌드 자동화 시스템으로 자바 뿐만 아니라 C/C++, 파이썬과 같은 다양한 언어를 지원한다. build.gradle에 스크립트를 작성하며, 대규모 프로젝트에서 XML 스크립트에 비해 관리가 편하다. 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다.

그래서 왜 Gradle을 많이 쓰는가?

우선 작성 방법이 간단해졌다. 매번 태그를 사용해야하는 XML에 비해 Gradle은 그루비 문법으로 간결한 스크립트를 작성할 수 있다.

그리고 빌드 속도가 빨라졌다. Gradle 문서에 따르면 빌드 속도가 Maven에 비해 최소 2배, 빌드 캐시를 사용하는 대규모 빌드의 경우에는 100배까지 빨라질 수 있다고 한다.

Gradle이 더 빠를 수 있는 이유는 작업을 추적해 필요한 항목만 실행하고 가능한 경우 변경된 파일만 처리하며, 빌드 캐시를 사용해 이전 빌드 과정 중 캐시된 파일을 재사용할 수 있기 때문이다.

더 자세한 Maven과 Gradle의 차이는 여기를 통해 확인할 수 있다.


버전 접미사

Spring Initializr에서는 사용할 수 있는 스프링 버전 목록을 나열해 주는데 각 버전마다 다른 접미사를 가지고 있는 것을 볼 수 있다.

SNAPSHOT

아직 개발 중인 버전
언제든지 기능이 추가되고 삭제될 수 있기 때문에 가장 불안정한 버전

M (Milestone)

테스트 버전
특정 집합의 기능이 완성되면 공개

RC (Release Candidate)

정식 버전이 될 수 있는 베타(시험판) 버전
정식 릴리즈 버전은 아니므로 안정적인 사용은 불가

GA (General Availability)

최종 릴리즈 버전
기능이 완전하고 안정적

이러한 버전 접미사는 스프링 뿐만 아니라 오픈소스나 라이브러리 release 시 사용되고는 한다. 추가적으로 Java 버전에서 자주 볼수 있는 LTS는 아래와 같은 의미를 가진다.

LTS (Long Term Support)

장기 지원 버전
일반 버전보다 장기적으로 지원하도록 특별히 고안된 버전



참고

https://gradle.org/maven-vs-gradle/
https://ko.wikipedia.org/wiki/소프트웨어_배포_생명_주기

profile
짱발자가 되기 위한 개발 일기

0개의 댓글