최근 졸업 작품 및 포트폴리오용으로 개인 프로젝트를 시작했는데 새롭게 프로젝트를 생성한 김에 스프링 부트 프로젝트 생성 및 의존성 버전 관리에 대해 정리하고자 한다.
빌드 툴은 Gradle, IDE 는 인텔리제이를 사용했다.
프로젝트 생성
스프링 이니셜라이저
스프링 이니셜라이저는 프로젝트 생성을 도와주는 웹 애플리케이션이다. 스프링 부트 뿐만 아니라 빌드 툴, 언어, 패키징 방식, 라이브러리들을 선택하여 간편하게 프로젝트를 생성할 수 있어 많은 개발자들이 사용하는 방법이다. 사실 너무 편해서 사용하지 않을 이유가 없는 것 같다.
LINK → https://start.spring.io/
다음의 링크를 클릭하거나 검색 엔진에 Spring Initializr 을 클릭하여 웹 페이지에 접속하자.
프로젝트 생성 방법은 정말 간단하다. 자신의 프로젝트 목적에 맞게 빌드 툴이나 언어, 의존성들을 추가한 다음, 하단의 GENERATE 버튼을 클릭하면 된다.
각 속성에 대해 간단히 설명하자면 다음과 같다.
- Project → 빌드 툴 선택
- Language → 프로그래밍 언어 선택
- Spring Boot → 스프링 부트 버전 선택 (버전 뒤에 아무 접미사가 없는 버전이 가장 안정된 버전이다.)
- M(Milestone build) : 완전하지 않은 기능이 포함된 버전. SNAPSHOT보다는 안정적이다.
- RC(Release Candidate) : 출시 후보 버전. 후보 버전이기 때문에 여전히 문제가 있을수 있다.
- GA(General availability) : 최종 릴리즈 버전. 특별한 기능을 필요로하지 않는다면 그냥 이거 쓰면 된다.
- SNAPSHOT : 아직 개발중인 버전. 언제든지 기능의 추가, 삭제가 가능하기 때문에 가장 불안정하다.
- Group → 기본 패키징 경로 설정 (위와 같이 설정하면 프로젝트에 com.example."프로젝트 이름" 경로가 생성됨)
- Artifact, Name → 프로젝트 이름 설정
- Packaging → 패키징 방식 설정 (따로 서블릿이나 톰캣을 만질게 아니라면 일반적으로 Jar 선택)
의존성 추가
- 오른쪽 Dependencies 에서 ADD DEPENDENCIES 버튼을 누르면 다음과 같은 화면이 보여진다.
- 여기에서 Lombok, Spring Data JPA 등 필요한 라이브러리들을 클릭하여 의존성에 추가하면 된다. 카테고리로 묶여있어서 찾기 쉽다.
프로젝트 파일 생성 및 사용
페이지 하단의 GENERATE 버튼을 누르면 설정에 맞춰 프로젝트 파일이 압축파일로 다운로드된다.
원하는 폴더에서 압축을 풀고, 인텔리제이에서 File → Open.. & OPEN 버튼을 클릭하여 해당 프로젝트를 연다.
프로젝트 압축파일을 푼 경로를 선택(폴더)하고 OK
프로젝트를 열면 자동으로 프로젝트를 Build 해주는데 조금 기다리면 스프링 부트를 사용할 준비가 끝난다.
Gradle 환경에서 의존성 추가하기
Gradle 환경에서 의존성을 추가하기 위해서는 build.gradle 파일에 코드를 추가해주면 된다.
build.gradle 파일에서 의존성 추가에 대한 내용으로 눈여겨 보아야 할 부분을 빨간색으로 표시해놓았다.
의존성 버전 관리
- 스프링 부트 Gradle plugin은 스프링 부트 의존성 관리 및 애플리케이션 패키징을 지원한다.
- "io.spring.dependency-management" 플러그인을 적용하면 사용중인 스프링 부트 버전에 맞는 의존성을 자동으로 가져온다.
- 사진처럼 plugins 태그 안에 넣어도 되고 다음과 같이 apply plugin 해도 된다.
apply plugin: 'io.spring.dependency-management'
의존성 저장소 설정
- repositories는 각종 의존성들을 어떤 원격 저장소에서 받을지 결정한다.
- mavenCentral은 이전부터 많이 사용하는 저장소이지만 최근에는 jcenter도 많이 사용한다.
- 원격 저장소를 두개 이상 등록해도 상관없다.
의존성 추가
- dependencies는 프로젝트 개발에 필요한 의존성들을 선언하는 곳이다.
- implementation, api, compileOnly등의 의존성 설정을 붙여 의존성 경로를 추가해주면 된다. 의존성 설정에 따라 빌드 속도에도 영향을 미치기 때문에 적당한 설정을 사용하는 것이 필요하다. 간단하게 알아보자
- api - 내부 의존성을 컴파일과 런타임 모두에 보이는 API 의존성
- Implement - 내부 의존성을 런타임에서만 보이는 구현 의존성 (컴파일 런타임 둘다 사용 할 때)
- compileOnly - 컴파일에만 사용되는 의존성 정의
- runtileOnly - 런타임에만 사용되는 의존성 정의
- test + [ Implement, CompileOnly, RuntimeOnly ] - 해당 의존성을 테스트시에만 사용하도록 정의
- 원래는 버전까지 명시해야하지만, "io.spring.dependency-management" 플러그인을 적용했기 때문에 버전을 명시하지 않아야 자동으로 알맞은 의존성 버전을 추가해준다.
- 따로 버전을 명시하면 해당 버전으로 의존성이 추가된다.
- 스프링 부트의 의존성 버전은 다음과 같은 spring 공식 웹 페이지에서 확인할 수 있다. (2.7.4 RELEASE)
build.gradle에서 의존성을 추가하거나, 기타 설정을 변경한 후에는 프로젝트를 다시 빌드해야한다.
- build.gradle에 수정사항이 생기면 인텔리제이에서는 우측 상단에 아이콘이 표시된다. 해당 아이콘을 클릭하자.
- 우측 Gradle(또는 Maven) 탭을 클릭하고 "Reload All Gradle Project" 버튼을 클릭해도 된다.
+++))
개인적으로 프로젝트에 의존성을 추가할 때 항상 의존성 설정을 어떻게 해야할지가 고민이였다. 그래서 한가지 꼼수로 생각해 낸것이 있는데.. 이전에 사용했던 스프링 이니셜라이저를 사용하는 것이다.
스프링 이니셜라이저에서 Depencency 추가 후, 하단의 EXPLORE 버튼을 클릭하면 다음과 같이 생성될 프로젝트를 미리 볼 수 있다.
build.gradle에서 dependencies 태그 안에 의존성 설정을 보고 그냥 그대로 복사 붙여넣기 하면 된다.
처음으로 스프링 프로젝트를 생성했을때는 boot 아닌 legacy spring 에 maven을 사용해서 일일이 pom.xml에 의존성을 추가해줬었다. 버전 관리를 해주는 플러그인도 없었고 의존성 추가하는 파일(pom.xml)도 xml 형식이라 무슨 의존성이 추가되었는지 보기도 힘들었다. 덕분에 공부 시작하기도 전에 스프링을 접을 뻔했다. 하다못해 이클립스로 프로젝트 생성하는 것부터 애먹었으니.. 하지만 그런 삽질 덕분에 현재의 개발 환경이 얼마나 편해졌는지 체감할 수 있었다. 스프링 부트는 신이고 이니셜라이저는 사랑이다.
참고
https://brunch.co.kr/@springboot/186