뭐라도 끄적이는 BLOG

Spring Boot 프로젝트 생성 및 구조 본문

SpringFramework/Spring Boot

Spring Boot 프로젝트 생성 및 구조

Drawhale 2023. 7. 6. 15:19

이제 대부분 Spring Framework 프로젝트를 시작하기 위해 Spring Boot 프로젝트를 생성한다. 이러한 Spring Boot 프로젝트를 생성하는 방법과 프로젝트가 어떻게 구성되어 있는지 살펴본다.

Spring Initializr

Spring Initializr에서 Spring Boot 프로젝트를 생성할 수 있다.

 

Spring Initializr 사이트

먼저 Project Build Tool을 선택할 수 있다. Maven또는 Gradle은 프로젝트의 의존성 관리를 하기 위한 시스템이며 MavenRepository에서 개발자가 필요로하는 라이브러리를 가져와 사용할 수 있도록 도와주는 도구이다. Maven은 Ant와 더불어 인기가 식어가고 있으며 새로운 프로젝트에는 Gradle이 많이 사용되고 있다.

Language는 Java와 Kotlin 그리고 Groovy를 선택할 수 있다. 세가지 언어 모두 JVM에서 동작하는 바이트코드를 생성할 수 있으며 SpringBoot에서도 지원하기때문에 사용할수 있다. Groovy는 Gradle에서 사용하는 언어이기때문에 필요할 정도만 알아두어도 된다. 그리고 Kotlin도 많은 관심을 받고있으니 따로 공부를 해보는것도 좋다.

다음은 Spring Boot의 version을 선택한다. 선택된 버전에 따라서 Spring Framework의 version및 다른 의존성 라이브러리의 version까지 결정된다. Spring Boot version뒤 괄호안에 적혀있는 의미는 아래 링크에서 어떤의미인지 유추해볼 수 있다.

 

Alpha, Beta, Snapshot, Release, Nightly, Milestone, Release Candidate(RC)... When to use which terminology

As a build, release and deployment engineer, there are multiple types of releases as below: Alpha Beta Snapshot Release Nightly Milestone Release Candidate(RC) [Anything else] Would...

stackoverflow.com

dependencis는 프로젝트를 시작하기전 프로젝트에 필요한 라이브러리를 찾아 등록하는 곳이다. 이곳에 등록해 놓으면 Maven또는 Gradle에 필요한 라이프러리 목록이 등록되어 이후 프로젝트를 실행하거나 빌드할때 라이브러리를 가져온다.

Project Metadata는 해당 프로젝트가 어떤 프로젝트인지 그 정보를 기입하는 곳이다. group은 해당 프로젝트의 시작 패키지를 정하게 되고 version은 프로젝트의 시작 버전을 의미한다. Packaging은 프로젝트 Build후 결과물을 Jar로 할지 War로 할지 결정한다. Jar는 독립적으로 실행 가능하지만 War는 Tomcat과 같은 WAS가 필요하다. 마지막의 Java는 Java version을 선택하는 부분이다. Spring Boot의 version에 따라 최소 Java version이 결정되기도 한다.

IntelliJ New Project

IntelliJ Ulimate버전을 사용한다면 start.spring.io에서 프로젝트를 생성하는 것과 같은 형태로 바로 생성이 가능하다.

 

기본적인 폴더 구조

아무런 dependency를 추가하지 않은 프로젝트를 생성하면 아래와 같은 구조로 생성된다.

이중 demo.iml파일은 Intelli J IDEA Module 의 약자로, Intelli J 의 Module 구성에 대해 xml 형태로 기술해 놓은 파일이다. 최근 IntelliJ에서 프로젝트를 생성하더라도 해당 파일이 포함되지 않는다.

DomoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

기본 main 메소드가 보인다. @SpringBootApplication Annotation이 붙어 있는것을 볼 수있는데 간단히 말하자면 프로젝트의 시작 경로를 표시한다고 생각하면 된다. 자세한건 ComponentScan이라는것을 배우면서 알수 있다.

build.gradle

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

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

test {
    useJUnitPlatform()
}

build.gradle은 settings.gradle과 함께 프로젝트 설정에 대한 정보이다. 아무런 의존성을 주입하지 않았더라도 dependencies엔 기본적으로 spring-boot-starter와 spring-boot-starter-test가 있다.

만약 다른 의존성을 주입 받았다면 spring-boot-starter가 추가되지 않을 수도 있는데 이는 추가한 의존성에서 spring-boot-starter를 이미 의존하고 있기 때문에 중복으로 기입할 필요가 없어 사라진 것이다.

gradlew또는 gradlew.bat를 사용하여 build및 실행을 할 수 있다.

SpringBoot CLI

Spring Boot CLI(명령줄 인터페이스)는 SDKMAN! (SDK 관리자)를 사용하여 수동으로 설치하거나 OSX 사용자의 경우 Homebrew 또는 MacPorts를 사용하여 설치할 수 있다.

spring init --dependencies=web,data-jpa my-project

간단한 코드만으로 설정 및 의존성들을 추가한 프로젝트를 생성할 수있다. 다른 설정 정보에 대한것을 spring help init 커맨드를 사용하거나 아래 링크를 참조

 

 

Spring Boot CLI

Once you have installed the CLI, you can run it by typing spring and pressing Enter at the command line. If you run spring without any arguments, a help screen is displayed, as follows: $ spring usage: spring [--help] [--version] [ ] Available commands are

docs.spring.io

반응형