Spring Boot 공부하기 전에 프로젝트 구조가 어떻게 되는지 살펴보려고 한다!
여기서 프로젝트 구조라는 건 파일 구조를 어떻게 가져갈지 이런 것들을 이야기 하는 것이 아니라, 진짜 https://start.spring.io/ 로 프로젝트를 만들었을 때 생기는 파일들은 뭐고 이런 내용을 말한다.
Gradle은 뭐고.. 파일은 또 너무 많고 해서 복잡해서 한번 정리해야겠다고 생각했다.
처음 프로젝트를 만들 때 선택할 수 있는 옵션들은 다음과 같다.
Gradle
VS Maven
일단 둘 다 모두 빌드 관리 도구
💡 Build란?
소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 것
컴파일
+링크
단계를 말한다. 소스코드를 컴파일 해서 Java의 경우 .class 파일로 변환한다.
.class
파일은 컴파일러에 의해 만들어진 java bytecode로 구성된 파일이다. JVM이 실행할 수 있는 형태.
JVM은 이 java bytecode를 인터프리터 방식으로 한 줄 씩 기계어로 번역하며 프로그램을 실행한다.
즉, 다시 말해 build는 컴파일 → 링크 → 패키징 → 테스트 단계로 이루어진다. 그 결과물로는 소스코드를 실행할 수 있는 독립적인 산출물이 나온다.자바에서는 build 산출물이 다음과 같은 종류를 지닌다.
- JAR(Java Archive) : 자바에서 사용되는 압축 양식, 클래스+리소스 파일로 구성
- WAR(Web Archive) : 웹 어플리케이션을 압축하고 배포하는데 사용되는 파일 형태. JAR에 비해 Java 서블릿, XML 파일, 정적 파일 등 필요한 자원이 더 많다.
이렇게 빌드를 할 때, 여러 외부 라이브러리를 사용하는데 이런 거를 사용자가 일일이 관리할 필요 없이, 자동으로 필요한 라이브러리들을 관리해주는 게 빌드 도구
라고 한다.
이런 빌드 관련 다양한 작업을 수행하고 라이브러리는 자동으로 관리해주어, 빌드를 도와주는 게 빌드 관리 도구
이런 빌드 관리 도구의 종류에 Ant
, Maven
, Gradle
등이 있다.
pom.xml
에 정의한다.Gradle wrapper
로 빌드를 할 수 있다.Gradle 공식 문서에서 제공하는 둘의 비교
Gradle | Gradle vs Maven Comparison
요약을 해보자면
호환성이 좋아서 다른 생태계와 확장에 유리하고, build 시 변경된 파일만 처리하거나 동일한 부분 재사용 등으로 성능을 올리고, CLI를 통해서 더 좋은 user experience를 제공하고 등등.. 좋은 점이 많다고 한다. 아무래도 Gradle 공식 문서니..
아예 성능을 비교해놓은 것도 있다.
Gradle이 Maven 보다 최대 100배 빠르다고 한다.
Gradle | Gradle vs Maven: Performance Comparison
Java를 발전시킨 객체지향 프로그래밍 언어로, Java에 Python이나 루비 등 다른 언어의 특징을 더한 동적 객체 지향 프로그래밍 언어. JVM에서 실행되는 스크립트 언어.
JVM 위에서 동작하지만 소스코드를 컴파일할 필요가 없다. Java와 호환되어 Java class file을 Groovy class로도 사용 가능하다.
Java 문법과 유사해서 빌드 처리를 관리할 수 있다.
.
├── HELP.md
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── demo
│ │ └── DemoApplication.java
│ └── resources
│ └── application.properties
└── test
└── java
└── com
└── example
└── demo
└── DemoApplicationTests.java
15 directories, 10 files
start.spring.io로 프로젝트를 만들고 구조를 찍어보면 이렇게 나온다. 하나씩 알아보자.
프로젝트 빌드 정보 및 구성을 표현하는 스크립트
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.0'
id 'io.spring.dependency-management' version '1.1.5'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
compileOnly
implementation
(supersedes compile
)runtimeOnly
(supersedes runtime
)testCompileOnly
compileOnly
except it’s for the teststestImplementation
implementation
testRuntimeOnly
runtimeOnly
gradle build
를 써서 빌드하면 컴퓨터에 설치된 gradle과 java를 기준으로 build 된다.
./gradlew build
를 실행하면 build.gradle 파일에 정의된 내용을 기준으로 build 된다.
rootProject.name = 'demo'
https://docs.gradle.org/current/userguide/gradle_wrapper.html
https://docs.gradle.org/current/userguide/building_java_projects.html
https://docs.gradle.org/current/samples/sample_building_java_applications.html
와 정리 너무 잘해두셨어요 .. ㅠㅠ 이런 기본기가 중요하드라구요 ㅠ...