0. 목표
Mission 01, 스프링 부트 프로젝트를 만든다. · Issue #1 · ssoyeong/spring-boot-study
목표 Spring Initializr로 스프링 부트 프로젝트를 세팅한다. (IntelliJ에 내장되어 있는 기능을 사용해도 괜찮음) 세부 내용(아래 조건은 모두 만족해야 함) 빌드 툴은 Gradle을 이용하고 빌드 스크립트
github.com
- Spring Initializr로 스프링 부트 프로젝트 세팅하기
- 이때 무엇을 설정하는 것인지 알기

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이란?
- 소프트웨어 버전 관리를 위한 규칙을 정의하는 표준화된 형식
- 소프트웨어의 버전이 어떤 의미를 가지며, 어떻게 업데이트 되는지에 대한 규약을 제공하여 개발자들이 버전 관리를 일관되게 할 수 있도록 도와줌

- 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에 들어가는 항목들
- Group (Group):
- Group은 보통 회사 또는 조직의 리버스 이름을 따르며, 역쉬의 도메인을 리버스 형태로 사용합니다.
- 예를 들어, 회사의 도메인이 "example.com"이라면 "com.example"과 같이 사용될 수 있습니다.
- Artifact (Artifact):
- Artifact는 프로젝트의 고유한 이름을 나타냅니다. 보통 소문자로 작성하고, 공백이나 특수문자 대신 하이픈(-)을 사용하여 단어를 구분합니다.
- 예를 들어, "my-application"과 같이 사용될 수 있습니다.
- Name (Name):
- Name은 프로젝트의 공식적인 이름을 나타냅니다. 일반적으로 대문자로 시작하고, CamelCase나 PascalCase와 같은 규칙에 따라 작성됩니다.
- 예를 들어, "My Application"과 같이 사용될 수 있습니다.
- Description (Description):
- Description은 프로젝트의 간단한 설명을 나타냅니다. 보통 한 문장으로 프로젝트의 목적이나 기능을 간략하게 설명합니다.
- Package Name (Package Name):
- Package Name은 Java 패키지의 네이밍 규칙을 따릅니다. 보통 소문자로 작성하고, 역쉬를 사용하여 계층적으로 구분합니다.
- 예를 들어, "com.example.myapplication"과 같이 사용될 수 있습니다.
- Packaging (Packaging):
- Packaging은 주로 "jar" 또는 "war"과 같은 표준적인 빌드 결과물의 형식을 지정합니다.
- 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
'Spring' 카테고리의 다른 글
[Spring Boot] 5. 간단한 POST API를 만든다(1/2) (0) | 2023.10.23 |
---|---|
[Spring Framework] web.xml, root-context.xml, servlet-context.xml의 차이 (0) | 2023.10.18 |
[Spring Boot] 4. 간단한 GET API를 만든다(3/3) (1) | 2023.10.17 |
[Spring Boot] 3. 간단한 GET API를 만든다(2/3) (0) | 2023.10.14 |
[Spring Boot] 2. 간단한 GET API를 만든다(1/3) (1) | 2023.10.09 |