빌드
- 의존성 라이브러리 다운
- 컴파일 (소스코드 -> 바이너리코드로 변경)
- 바이너리코드 패키징
- 테스트 실행
- 운영시스템 배포
빌드 도구(Build Tool)
- 소스 코드를 실행가능한 Application으로 자동으로 생성하는 프로그램
- 즉 소스 코드를 컴파일하고 연결하고 패키징하여 실행가능한 상태로 가공
Java에서 주로 사용하는 빌드도구는 Gradle, Maven, Ant등이 있다
Gradle이란?
- 유연함과 성능에 초점을 둔 오픈소스 빌드도구
- Wrapper 지원(빌드 도구를 실행할 수 있는 jar 파일과 이를 실행하는 스크립트를 함께 등록하여 관리하는 방식)
- Maven의 POM개념을 활용
* POM (xml형식의 프로젝트 객체 모델)
- build.gradle 파일에서 Maven 중앙 저장소를 설정하고, Maven 방식으로 의존성을 선언할 수 있다.
*Maven
-Project Object Model의 개념을 기반으로 하여 프로젝트 빌드, 보고서 생성 및 문서화
maven은 xml로 설정하는 반면 gradle은 Groovy(JVM 안에서 작동되는 스크립트 언어)로 구성되어 있어 변수선언, if, else, for 등의 로직이 구현가능하며 간결하게 구성 가능하다.
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework:spring-core:5.3.9'
}
빌드 단계
Gradle은 빌드 라이프사이클의 세 가지 단계에서 빌드 스크립트를 평가하고 실행한다:
- 초기화
빌드 환경을 설정하고 빌드에 참여할 프로젝트를 결정한다. - 구성
빌드에 대한 태스크 그래프를 구성하고 설정한다. 사용자가 실행하려는 태스크에 따라 어떤 태스크를 어떤 순서로 실행해야 하는지 결정한다. - 실행
선택된 태스크들을 구성 단계의 마지막에 실행한다.
Gradle DSL(Domain Sepcific Language)
- 빌드 스크립트를 정의하는데 사용되는 언어
- 빌드 , 테스트, 배포 등을 관리하도록 도와줌
- Groovy DSL은 Gradle의 기본 DSL로 많이 사용되며,
Kotlin DSL은 타입 안정성과 IDE 지원이 강화되어 있어 점점 더 많이 사용되고 있다
- 빌드 구성
// Groovy DSL 예제
plugins {
id 'java'
}
group = 'com.example'
version = '1.0.0'
// Kotlin DSL 예제
plugins {
id("java")
}
group = "com.example"
version = "1.0.0"
의존성 관리
// Groovy DSL 예제
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework:spring-core:5.3.9'
}
// Kotlin DSL 예제
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework:spring-core:5.3.9")
}
플러그인 적용
- Gradle 플러그인을 적용하여 빌드 스크립트를 확장하고, 추가 기능을 사용할 수 있다. 예를 들어, Java 플러그인, Kotlin 플러그인, Spring Boot 플러그인 등을 적용할 수 있다.
// Groovy DSL 예제
plugins {
id 'java'
id 'org.springframework.boot' version '2.5.4'
}
// Kotlin DSL 예제
plugins {
id("java")
id("org.springframework.boot") version "2.5.4"
}
커스텀 로직 추가:
- 빌드 스크립트에 커스텀 로직을 추가하여, 프로젝트의 특수한 요구사항을 충족시킬 수 있다.
- 예를 들어, 특정 파일을 복사하거나, 환경 변수에 따라 다른 작업을 수행할 수 있다.
// Groovy DSL 예제
task copyFiles(type: Copy) {
from 'src/main/resources'
into 'build/resources/main'
}
// Kotlin DSL 예제
tasks.register<Copy>("copyFiles") {
from("src/main/resources")
into("build/resources/main")
}
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.0' // Spring Boot의 최신 버전으로 설정
id 'io.spring.dependency-management' version '1.1.0' // Dependency management 플러그인 추가
}
group = 'com.devduck'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
repositories
- 각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지를 정함
- mavenCentral를 많이 사용하지만 업로드하기 위해 많은 과정과 설정이 필요
- 최근에 라이브러리 업로드를 간단하게 하는 jcenter 많이 사용
- jcenter는 mavenCentral에도 업로드 될 수 있도록 자동화 할 수 있음
dependencies
- 프로젝트 개발에 필요한 의존성들을 선언하는 곳
'SpringBoot' 카테고리의 다른 글
Model1 -> Model2 -> SpringMVC (0) | 2024.11.22 |
---|---|
WAS란? (0) | 2024.09.03 |
SQL Mapper - Mybatis (4) | 2024.09.02 |
[Spring Boot] JPA를 왜 써야할까?? (0) | 2024.06.27 |