본문 바로가기

Spring/etc

[Spring Boot] 스프링 부트와 build.gradle

728x90
반응형

 

 

본 글은 인프런의 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 내용을 일부 참고하고 있습니다.

 

 

 

Spring과 Spring Boot

 

 

이전에 스프링과 관련된 강의를 들으면서 필요한 dependency들을 넣는 작업을 한 적이 있습니다.

이 때 사용한 것이 메이븐이었는데, 이를 통해서 필요한 라이브러리를 가져오고, pom.xml에 가져올 라이브러리의 groudID, version 등을 넣어주었습니다.

 

 

그런데 가끔씩 이런 라이브러리의 버전 관련 문제로 에러가 생기기도 하고, 특히나 라이브러리가 많아지면 점점 pom.xml의 길이가 늘어나는 상황이 발생합니다.

그러면 나중에 dependency 관리를 해주기도, 또 보기도 힘들어지겠죠.

 

 

이러한 문제를 해결하기 위해서 도입된 것이 스프링 부트라고 합니다.

스프링부트는 기존에 dependency 설정에서 버전까지 직접 적어줘야 했던 것을, 단순하게 groupID와 aritfactID만 있으면 자동으로 권장 버전으로 설정해주기 때문에 편리합니다.

 

 

- 위: 스프링, 아래: 스프링부트

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

 

 

뿐만 아니라 스프링 부트에서 메이븐을 사용하지 않고 gradle을 사용하면 더더욱 간단해집니다.

아래의 코드 한 줄이면 thymeleaf 라이브러리를 가져다 쓸 수 있습니다.

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

 

 

또, 스프링 부트 스타터(start.spring.io/)를 이용하면 개발을 시작할 때에 필요한 dependency를 미리 설정해주기 때문에 더욱 쉽게 개발할 수 있습니다.

 

 

여담으로 스프링 부트 스타터 페이지에서 Spring Boot 버전을 선택할 때에,

SNAPSHOT은 아직 만들고 있는 버전, M1은 정식으로 릴리즈 된 버전이 아님을 뜻하기 때문에 배울 때에는 다른 것을 선택하는 것이 좋다고 합니다.

 

 

 

build.gradle와 dependency

 

아래는 build.gradle 파일의 내용입니다.

plugins {
	id 'org.springframework.boot' version '2.4.4'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
	useJUnitPlatform()
}

 

sourceCompatibility는 이 프로젝트에서 사용하는 자바의 버전을 의미합니다.

만약 11버전의 자바를 사용하고 있지 않다면 오류가 생기겠죠?

 

repositories 부분의 mavenCentral() 은,

내가 명시한 이 부분에서 라이브러리들을 다운받아라 라고 말해주는 부분입니다.

이 부분은 후에 다른 곳에서 라이브러리를 다운받고 싶다면 변경이 가능합니다.

 

dependencies 는 implementation과 testImplementation으로 나뉘어져 있습니다.

 

implementation은 개발할 때에 내가 필요한 라이브러리를 적어 이 라이브러리를 가져와달라고 하는 부분입니다.

현재 위에서 thymeleaf, web 이라는 라이브러리를 가져오고 있는데

thymeleaf는 html을 만드는 템플릿 엔진이며, web은 웹 프로젝트를 만들기 위해 필요한 라이브러리입니다.

 

testImplementation은 JAVA에서 테스트 코드를 작성할 때에 필요한 라이브러리를 적는 곳으로,

현재 jUnit5 라이브러리를 사용하고 있습니다.

이 테스트 코드는 스프링 프로젝트를 생성하면 기본으로 main코드와 test코드로 나뉘어질만큼 중요도가 높아지고 있다고 합니다.

 

 

이렇게 gradle을 통해 가져온 라이브러리들은, 그 안에도 라이브러리가 존재할 수 있습니다.

즉, 저희가 불러온 라이브러리와 의존성 관계인 다른 라이브러리가 있는 것이죠.

 

하지만 gradle에 라이브러리를 적게 되면, 해당 라이브러리에서 필요로 하는 라이브러리들을 gradle이 찾아 모두 가져와줍니다.

이는 IntelliJ 기준으로 오른쪽 메뉴바의 Gradle에서 다음과 같이 확인할 수 있습니다.

 

라이브러리가 하위의 라이브러리들을 필요로

 

이 때, web 라이브러리가 tomcat 관련 라이브러리들에 의존하고 있는 것을 볼 수 있습니다.

이는 우리가 따로 톰캣 서버를 설치하여 개발한 소스 코드를 넣으려는 작업을 따로 하지 않아도

단순히 코드만 빌드했을 때 서버가 열리면서 그 결과를 한 번에 볼 수 있도록 도와주는 역할을 합니다.

 

즉, 기존에는 톰캣과 라이브러리가 구분되어 있었지만, 현재는 내장형 톰캣과 같은 기술의 도움을 받아 코드만 돌리면 서버까지 같이 돌려주기 때문에 더 편한 환경에서 개발을 진행할 수 있는 것입니다.

 

 

 

 

728x90
반응형