[Spring] Spring Boot Initilalizr

LDB·2024년 12월 17일
0

Spring

목록 보기
1/6
post-thumbnail

작성계기

평소에 개인적으로 웹 서비스를 만든다면 Spring Boot를 사용해 서비스를 만들거나 연습을 해왔는데 지금까지 Spring Initilalizr로 프로젝트를 생성해왔지만 어떤 특징을 가졌는지 이번에 확인해보기로 했다.

Spring Boot Initilalizr


상단의 이미지는 이 글을 작성한 시점의 Spring Initializr이다. Spring Boot는 공식적으로 프레임워크의 버그등을 의무적으로 수정해주고 있는데. 여기로 들어가서 확인해보면 본인이 사용하고 싶은 버전이 언제까지 지원해주는지 나온다.

Project

1. Gradle - Groovy

설명하기 전에 우선 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 장점

  • 간결한 정의가 가능하기에 가독성이 좋다.
  • Maven을 대체할 수 있다.
  • Configuration Injection(설정 주입)을 사용하기 때문에 재사용에 용이하다.
  • Gradle로 빌드하기 위해 실행 환경에 직접 설치할 필요가 없이 Gradle wrapper 로 빌드를 할 수 있다.

2. Gradle - Kotlin

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을 왜 사용하는가에 대해 말해야 할 거같다.

  • kotlin으로 gradle을 작성한다면 Kotlin DSL라는 것을 사용하는데 정적 타이핑으로 인해 IDE에서 코드 완성 및 오류 감지가 강력하게 지원되는기능을 가지고 있기 때문에 사용한 것 같다.

3. Maven

현재 새로 나오고 있는 프로젝트들은 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방식으로 작성한다.


maven vs gradle

두 개의 방식은 결국 빌드 자동화 도구인데 gradle을 많이 사용하는 이유는 가독성이 좋고, 빌드속도가 maven보다 빠르기 때문이다. 자세한 것은 하단의 글을 참고 해주길 바란다.

https://velog.io/@half-phycho/Spring-Gradle이란

Language

언어는 java Kotlin Groovy중에 하나를 정해서 사용한다. 무엇이 가장 좋다라고는 말할 수 없지만 java로 많이 작성하고 java에서 되는 기능이 kotlin에서 안되는 경우도 있어서 java로 Spring Boot를 사용하는 경우가 많다.

Spring Boot

이 항목은 말 그대로 Spring Boot의 버전을 선택하는 것 인데 현재는 기본값이 3.4.0 버전으로 되어있다. 그이유는 아마도 서포트를 해주는 기간이 가장길어서 일 것이다. 여기서 궁금한점이 있을 수 있는데 (SNAPSHOT) 버전이 있는 것을 볼 수 있는데 SNAPSHOT은 일종의 완성단계는 아니고 개발하고 있는 중간버전이라고 할 수 있다.

Project Metadata

이 항목은 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이기 때문이다.

Dependencies

본인의 프로젝트에 사용하고 싶은 기능을 선택하는 부분이다. 여기서 웹 템플릿 엔진이나 특정 DB JDBC Driver등을 선택한다.

참조 사이트

https://velog.io/@tmd0110/Spring-Boot-프로젝트-구조

https://docs.gradle.org/current/userguide/gradle_wrapper.html

https://jinhos-devlog.tistory.com/entry/Spring-Initializr%EC%97%90%EC%84%9C-Gradle-groovy%EC%99%80-Kotlin%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://velog.io/@chaeeun2030/Spring-Project%EC%9D%98-Metadata

https://old-developer.tistory.com/m/171

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글

관련 채용 정보