평소에 개인적으로 웹 서비스를 만든다면 Spring Boot를 사용해 서비스를 만들거나 연습을 해왔는데 지금까지 Spring Initilalizr로 프로젝트를 생성해왔지만 어떤 특징을 가졌는지 이번에 확인해보기로 했다.
상단의 이미지는 이 글을 작성한 시점의 Spring Initializr이다. Spring Boot는 공식적으로 프레임워크의 버그등을 의무적으로 수정해주고 있는데. 여기로 들어가서 확인해보면 본인이 사용하고 싶은 버전이 언제까지 지원해주는지 나온다.
설명하기 전에 우선 Groovy가 무엇인가를 알아보면
Java를 발전시킨 객체지향 프로그래밍 언어로, Java에 Python이나 루비 등 다른 언어의 특징을 더한 동적 객체 지향 프로그래밍 언어. JVM에서 실행되는 스크립트 언어.
라고 명시되어있다. 간단히 현재 전세계어서 제일 많이 사용되는 방식이다.
# build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.0'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
프로젝트를 생성하고 gradle파일을 열면 이렇게 나오는데 이렇게 말고도 dependencies를 추가하거나 특정 기능을 쓰고싶을 때 gradle파일에 코드를 작성하기도 한다.
Gradle 장점
kotlin은 안드로이드 개발에서 사용되는 대표적인 언어인데 Spring Boot에서 사용이 가능하다.
# build.gradle.kts
plugins {
java
id("org.springframework.boot") version "3.4.0"
id("io.spring.dependency-management") version "1.1.6"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
tasks.withType<Test> {
useJUnitPlatform()
}
kotlin으로 설정하고 프로젝트를 생성하면 groovy와는 다르게 .gradle이 아니라 .kts로 생성이 되는데 groovy방식과 비교했을 때 작성 방식이 약간 다른 것을 볼 수 있다.
kotlin방식으로 작성하는 것은 Gradle 5.0버전이 나오고 지원하게 되었다.
여기서는 kotlin방식의 장점이라기 보다는 kotlin을 왜 사용하는가에 대해 말해야 할 거같다.
현재 새로 나오고 있는 프로젝트들은 gradle-groovy방식을 많이 사용하지만 maven이 gradle이전에 사용된 만큼 maven으로 만들어진 프로젝트가 많을 것이다.
maven은 간단히 말하자면 자바 프로젝트들을 위한 빌드 자동화 도구중 하나이다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven</name>
<description>maven project for Spring Boot</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
maven으로 설정하고 프로젝트를 실행하면 이렇게 나온다. 이렇게 xml방식으로 작성한다.
두 개의 방식은 결국 빌드 자동화 도구인데 gradle을 많이 사용하는 이유는 가독성이 좋고, 빌드속도가 maven보다 빠르기 때문이다. 자세한 것은 하단의 글을 참고 해주길 바란다.
언어는 java
Kotlin
Groovy
중에 하나를 정해서 사용한다. 무엇이 가장 좋다라고는 말할 수 없지만 java로 많이 작성하고 java에서 되는 기능이 kotlin에서 안되는 경우도 있어서 java로 Spring Boot를 사용하는 경우가 많다.
이 항목은 말 그대로 Spring Boot의 버전을 선택하는 것 인데 현재는 기본값이 3.4.0 버전으로 되어있다. 그이유는 아마도 서포트를 해주는 기간이 가장길어서 일 것이다. 여기서 궁금한점이 있을 수 있는데 (SNAPSHOT) 버전이 있는 것을 볼 수 있는데 SNAPSHOT은 일종의 완성단계는 아니고 개발하고 있는 중간버전이라고 할 수 있다.
이 항목은 Spring Boot의 디렉터리 구조와 프로젝트 이름 그리고 패키징 방식 사용할 자바 버전을 작성하는 곳이다.
Group : 모든 프로젝트 중에서 해당 프로젝트를 식별하게 해주는 식별자
Artifact : 해당 프로젝트의 실제 이름이다 Generate를 클릭하면 작성한 대로 파일이 생성된다.
Name : 물리적으로 생성되는 프로젝트의 이름이다.
Description : 프로젝트의 부가 설명 같은 것이다.
Packaging : 패키징 방식을 정하는 부분이다.
Jar (Java Archive) : java 어플리케이션이 동작하도록 압축한 파일이다.
War (Web Application Archive) : Servlet / Jsp 컨테이너에 배치할 수 있는 웹 애플리케이션 압축파일 포맷이다. War를 실행하기 위해서는 Tomcat같은 웹서버가 필요하다.
패키징 방식이 고민 될때
java
사용할 자바버전을 선택하는 항목이다. 왜 자바 17부터냐면 3.3 버전의 최소 자바사양이 17이기 때문이다.
본인의 프로젝트에 사용하고 싶은 기능을 선택하는 부분이다. 여기서 웹 템플릿 엔진이나 특정 DB JDBC Driver등을 선택한다.
https://velog.io/@tmd0110/Spring-Boot-프로젝트-구조
https://docs.gradle.org/current/userguide/gradle_wrapper.html
https://velog.io/@chaeeun2030/Spring-Project%EC%9D%98-Metadata