Search

8. Spring Boot의 이모저모

build.gradle 이해하기

build.gradle

빌드 스크립트라고도 불리며, gradle을 이용해 프로젝트를 빌드하고 의존성을 관리하기 위해 작성되었다.
groovy 언어를 사용해 작성되었고, kotlin이라는 언어를 사용할 수도 있다.
둘다 JVM 계열의 언어다.

이제 build.gradle을 하나씩 살펴보자!

plugins 블락

plugins { id 'org.springframework.boot' version '2.7.6' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java' }
XML
복사
플러그인을 추가할 수 있다!

org.springframework.boot 플러그인 역할

1) 스프링을 빌드했을 때 실행가능한 jar 파일이 나오게 도와주고
2) 스프링 애플리케이션을 실행할 수 있게 도와주고
3) 또다른 플러그인들이 잘 적용될 수 있게 해준다.

프로젝트와 관련된 설정

repositories 블락

repositories { mavenCentral() }
XML
복사
외부 라이브러리/프레임워크를 가져오는 장소 설정
mavenCentral() : maven 중앙 저장소

dependencies 블락

우리가 사용하는 라이브러리/프레임워크를 표시하는 곳

테스트를 수행할 때 Junit5를 사용하겠다!

tasks.named('test') { useJUnitPlatform() }
XML
복사

Spring과 Spring boot

Java EE(Enterprise Edition)으로 서버 개발을 하던 시대... 추운 겨울이었다...! 그러다 Rod Johnson 이라는 분이 한 책을 저술하는데.. 프로그래밍 업계를 뒤집어 놓았다...!
XML 설정이 간단해지고, Java5 지원이 이루어졌다.
Java 기반 설정 (Annotation) 확대, Java6 지원
Java8지원, Bean 정의를 위해 groovy DSL 활용, 웹소켓 지원
spring boot 등장
Java 9 지원, Reactive Programming 추가
스프링 부트 2.0 등장
스프링 부트 3.0 등장

2017년 11월에 등장한 Spring Boot 2.0.x

한글 마이그레이션 자료는?!
바로바로 최신화 하는 것이 원래 어렵습니다...!

그렇다면 Spring Boot가 나오며 무엇이 달라졌을까?!

[1] 간편한 설정

스프링은 강력한 기능을 제공한다! 하지만, 강력한 기능 사용을 위해 xml 설정을 많이 해야 했다! 많아도... 너무 많다!!!
어노테이션 기반의 설정 적극 사용! 기본적으로 필요한 것 모두 자동 설정!

[2] 간단한 의존성 관리

Spring을 사용할 때에는 개발에 필요한 라이브러리/프레임워크를 모두 적어야 했다!
spring-boot-starter-data-jpa
뭐? 의존성 관리가 어려워?! Starter로 다 묶어줄게!!!

[3] 강력한 확장성

Spring과 Spring Boot의 차이점

1. 간편한 설정
2. 간단한 의존성 관리
3. 강력한 확장성
4. MSA에 적합한 모니터링

application.yml 과 application.properties, lombok

application.yml

YAML 문법

spring: config: activate: on-profile: local datasource: url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER" username: "sa" password: "" driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true dialect: org.hibernate.dialect.H2Dialect h2: console: enabled: true path: /h2-console
XML
복사
Yet Another Markup Language 또다른 마크업 언어
YAML Ain’t Markup Language YAML은 마크업 언어가 아니다

YAML

YAML 파일의 확장자 : .yaml 또는 .yml

YAML의 간단 문법

spring: config: activate: on-profile: dev
XML
복사
key: value 형식으로 데이터를 정의한다.
key : spring.config.active.on-profile / value : dev
spring: datasource: url: "jdbc:mariadb://localhost/library" username: "root" password: "test0123" driver-class-name: org.mariadb.jdbc.Driver
XML
복사
각 계층은 들여쓰기를 통해 구분하게 되며, 이를 이용해 중복을 제거할 수 있다! spring.datasource.url
spring.datasource.username
value에는 1) 참 / 거짓 2) 숫자 3) 문자열이 들어갈 수 있다!
value에는 배열도 들어갈 수 있다! – 를 활용한다.
#을 이용하면 주석을 표현할 수 있다. 스프링 설정을 위해 반드시 YAML을 써야 하는 것은 아니다!

application.properties를 사용할 수 있다!

spring.config.activate.on-profile = local
XML
복사
이런식으로 한줄로 쓰는 방식

Dev profile을 사용하려면?!

application-dev.properties

Lombok

getter, setter, 생성자와 같은 반복되는 보일러 플레이트 코드(boiler plate code)를 제거할 수 있다!
1) lombok 의존성 추가
build.gradle에 롬복 추가
annotationProcessor 'org.projectlombok:lombok:1.18.20'
XML
복사
2) IntelliJ lombok 플러그인 추가
3) IntelliJ Annotation Processor 설정
@Getter
@NoArgsConstructor
@RequiredArgsConstructor @Setter
@EqualsAndHashCode
@ToString
Java14+ 를 사용한다면 record class를!
Kotlin을 사용한다면 언어만의 특징을 이용할 수 있다!

Spring Boot 2.7.x 에서 3.0.x로 업데이트

Spring Boot 3.0.x에서 변경된 점!

[1] Java 최소 버전이 17로 업그레이드 되었다!

[2] 많은 스프링 프로젝트, Thrid-party Library 버전업

Spring Framework 6.0.x
Hibrenate 6.1

[3] AOT 기초 작업이 이루어졌다.

AOT(Ahead of Time)
빌드를 할 때 스프링 애플리케이션을 분석하고 최적화하는 도구
AOT(Ahead of Time) 애플리케이션 시작 시간과 메모리 사용량을 줄일 수 있게 해준다

[4] javax 대신 jakarta 패키지를 사용하게 된다.

javax 패키지의 인기가 없어지고, 최신 기술이 반영되지 않음
오라클이 썬 마이크로시스템즈를 인수!
그리고 java EE 프로젝트를 비영리 단체인 이클립스에 이관!
그런데 ”java”라는 이름의 상표권은 오라클이 가지고 있다!
그래서 jarkarta로 이름을 변경!

[5] 모니터링 기능들의 강화

[6] 이 외에도 다양한 세부적인 변경사항이 많다!

3버전으로 바꿔보자

jdk를 17로 바꿔주고
build.gradle
plugins { id 'org.springframework.boot' version '3.0.1' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17'
XML
복사

마이그레이션 툴을 추가해주자

추가해주면 버전업할때 문제가 생기면 뭐가 문제지 알려준다
build.gradle
runtimeOnly 'org.springframework.boot:spring-boot-properties-migrator'
XML
복사
import에 import javax.persistence.*; 를 import jakarta.persistence.*; 로변경

*참고