[Spring Boot] 1. 스프링 부트 프로젝트를 만든다

0. 목표

 

Mission 01, 스프링 부트 프로젝트를 만든다. · Issue #1 · ssoyeong/spring-boot-study

목표 Spring Initializr로 스프링 부트 프로젝트를 세팅한다. (IntelliJ에 내장되어 있는 기능을 사용해도 괜찮음) 세부 내용(아래 조건은 모두 만족해야 함) 빌드 툴은 Gradle을 이용하고 빌드 스크립트

github.com

- Spring Initializr로 스프링 부트 프로젝트 세팅하기

- 이때 무엇을 설정하는 것인지 알기

etc-image-0
이런 항목들!

 

1. Spring과 Spring Boot

1.1. Spring

- 풀네임은 Spring Framework

- Java 기반의 오픈소스 프레임워크로, 복잡하고 규모가 큰 엔터프라이즈 애플리케이션을 개발하기 위한 여러 기능을 제공함

- 모듈화가 잘 되어있어 필요한 기능을 선택적으로 사용할 수 있음

 

1.2. Spring Boot

- 스프링 애플리케이션을 빠르게 구축하고 실행할 수 있도록 도와주는 도구

- 스프링 프레임워크의 설정과 관련된 많은 복잡성을 제거하고, 기본 설정을 제공함으로써 개발자가 최소한의 노력으로 애플리케이션을 시작할 수 있도록 함

 

1.3. 주요 차이점

  Spring Spring Boot
설정의 복잡성 설정 파일(XML 또는 JavaConfig)에 수동으로 Bean과 의존성을 설정해야 함 기본 설정을 제공함
내장 서버 웹 애플리케이션을 배포하기 위해 별도의 서버(Tomcat 등) 설정이 필요함 내장 서버를 제공함
의존성 관리 스프링 프로젝트에서 필요한 의존성을 개발자가 직접 관리해야 함 의존성 관리를 자동화하고, 의존성 버전을 일관되게 관리해줌

 

그렇다면 Spring Initializr는 스프링 부트 기반의 프로젝트를 빠르게 생성하고 초기 설정할 수 있는 도구이다.

이때 설정하는 항목들에 대해 알아보자.

 

2. Maven과 Gradle

2.1. 빌드 툴이란?

- 소프트웨어 프로젝트를 개발하고 관리하는 데 사용되는 도구로, 소스 코드를 컴파일하고 실행 가능한 소프트웨어로 만드는 역할을 함

- 프로젝트의 의존성 관리, 빌드 프로세스 자동화, 테스트 실행, 배포 파일 생성 등을 담당하여 개발자가 효율적으로 프로젝트를 관리할 수 있도록 도움

- 빌드 툴로 주로 Maven 또는 Gradle이 사용됨

 

빌드 툴 없이 자바 프로그램 실행?

아래와 같은 단계를 거쳐 java 파일을 직접 실행할 수도 있음

(1) 컴파일
javac HelloWorld.java

(2) JAR 파일 생성
jar cfe HelloWorld.jar HelloWorld HelloWorld.class

(3) JAR 파일 실행
java -jar HelloWorld.jar

 

2.2. Maven

- Apache Maven은 자바 기반의 빌드 도구

- XML 기반의 설정 파일인 pom.xml을 사용해 프로젝트 정보, 의존성, 빌드 설정, 플러그인 설정 정보 등을 정의함

- 중앙 저장소(https://mvnrepository.com/)에서 필요한 라이브러리 및 의존성을 관리하며, 이를 통해 프로젝트에서 필요한 라이브러리를 쉽게 가져올 수 있음

- 미리 정의된 빌드 라이프사이클을 가지고 있어 빌드 과정을 표준화하고 간소화할 수 있음

(mvn compile, mvn package, mvn clean 등의 명령어를 사용하여 각 단계를 실행)

 

2.3. Gradle

- Gradle은 Groovy 또는 Kotlin 기반의 빌드 도구

- Maven의 기능을 유지하면서 DSL을 사용해 더 간결하고 유연하게 빌드 스크립트를 작성할 수 있음

- 다양한 플러그인을 사용할 수 있어 높은 확장성을 가짐

 

DSL이란?

- Domain Specific Language, 한정된 도메인이나 특정 문제에 특화된 언어를 의미함

- Kotlin DSL이라면, Kotlin의 특징으로 빌드 스크립트를 간결하게 작성한다는 의미

 

3. Semantic Versioning이란?

- 소프트웨어 버전 관리를 위한 규칙을 정의하는 표준화된 형식

- 소프트웨어의 버전이 어떤 의미를 가지며, 어떻게 업데이트 되는지에 대한 규약을 제공하여 개발자들이 버전 관리를 일관되게 할 수 있도록 도와줌

etc-image-1
이런 항목!

- Semantic Versioning은 주로 'MAJOR.MINOR.PATCH' 형식을 따름

- '3.1.4'인 경우, 3은 MAJOR, 1은 MINOR, 4는 PATCH를 나타냄

 

- MAJOR 버전: 호환되지 않는 API 변경이 있을 증가함

- MINOR 버전: 기존 API 호환되면서 기능이 추가되었을 증가함

- PATCH 버전: 기존 기능의 버그 수정이나 작은 개선이 있을 증가함

- SNAPSHOT: 해당 버전이 아직 안정화되지 않았거나 실험적인 변경이 포함되어 있을 때, 미완성 버전임을 나타냄

 

GA란?

- General Availability, 정식 버전

- 소프트웨어가 안정화되어 상용 제품 또는 서비스로 출시되었음을 나타내는 데 사용됨

- GA 상태에서는 범위 내의 새로운 기능이나 업데이트를 수행할 때에도 Semantic Versioning에 따라 버전을 적절히 업데이트하게 됨

 

5. Project Metadata에 들어가는 항목들

  1. Group (Group):
    • Group은 보통 회사 또는 조직의 리버스 이름을 따르며, 역쉬의 도메인을 리버스 형태로 사용합니다.
    • 예를 들어, 회사의 도메인이 "example.com"이라면 "com.example"과 같이 사용될 수 있습니다.
  2. Artifact (Artifact):
    • Artifact는 프로젝트의 고유한 이름을 나타냅니다. 보통 소문자로 작성하고, 공백이나 특수문자 대신 하이픈(-)을 사용하여 단어를 구분합니다.
    • 예를 들어, "my-application"과 같이 사용될 수 있습니다.
  3. Name (Name):
    • Name은 프로젝트의 공식적인 이름을 나타냅니다. 일반적으로 대문자로 시작하고, CamelCase나 PascalCase와 같은 규칙에 따라 작성됩니다.
    • 예를 들어, "My Application"과 같이 사용될 수 있습니다.
  4. Description (Description):
    • Description은 프로젝트의 간단한 설명을 나타냅니다. 보통 한 문장으로 프로젝트의 목적이나 기능을 간략하게 설명합니다.
  5. Package Name (Package Name):
    • Package Name은 Java 패키지의 네이밍 규칙을 따릅니다. 보통 소문자로 작성하고, 역쉬를 사용하여 계층적으로 구분합니다.
    • 예를 들어, "com.example.myapplication"과 같이 사용될 수 있습니다.
  6. Packaging (Packaging):
    • Packaging은 주로 "jar" 또는 "war"과 같은 표준적인 빌드 결과물의 형식을 지정합니다.
  7. Java (Java):
    • Java는 프로젝트에서 사용할 자바 버전을 나타내며, 보통 "8", "11", "16"과 같이 사용됩니다.

 

6. Jar와 War

6.1. 패키징

- 소프트웨어 개발에서 소스 코드와 다른 리소스들을 하나의 단일 artifact로 묶는 프로세스를 의미함

- 이 artifact는 소프트웨어를 배포하고 실행하기 위해 사용됨

- 보통 패키징은 빌드 프로세스의 일부로 이루어지며, 빌드된 결과물을 특정 형식(jar, war, zip 등)의 artifact로 만들어줌

- 자바 기반의 소프트웨어에서 주로 사용되는 패키징 형식에는 'jar'와 'war'가 있음

 

6.2. Jar

- Java Archive

- 독립적인 자바 애플리케이션을 패키징할 때 주로 사용하며, 단독으로 실행 가능

- 클래스, 라이브러리 파일을 포함함

 

6.3. War

- Web Application Archive

- 자바 웹 애플리케이션을 패키징할 때 주로 사용하며, WEB 또는 WAS에 배포하여 실행함

- 웹 관련 자원 JSP, Servlet, HTML, JavaScript 등을 포함함

 

Spring Boot에서 가이드하는 표준은 Jar

- Jar 형식은 내장된 서버(Tomcat)를 사용해 간단하게 애플리케이션을 실행할 수 있기 때문 

 

참고자료

 

‘Gradle Kotlin DSL’ 이야기 | 우아한형제들 기술블로그

{{item.name}} Developer life is Coding between Build and Deploy. 개발자 인생은 (프로젝트) 빌드와 배포 사이 삽질(=코딩)이다. — #월급쟁이개발자 허니몬 빌드도구(Build tool) 이야기 새로운 프로젝트를 시작하

techblog.woowahan.com

 

Kotlin DSL 간단히 알아보기

나만의 언어 만들기

myungpyo.medium.com

 

 

[Spring Boot]배포 방법 비교 (JAR vs WAR)

스프링 부트의 장점 중 하나는 실행 가능한 JAR (Executable Jar)로 빌드하여 프로젝트를 바로 실행시킬 수 있다는 점이다. 실제로 스프링부트 관련 문서를 보다 보면 "Executable Jar"라는 단어를 많이 볼

hye0-log.tistory.com