여느때와 다름없는 화창한 오후, Springboot initializr로 프로젝트를 만드며 버전 선택에서 큰 혼란에 빠졌다. 선택의 자유가 주어졌지만 버전별 차이도 모르는데 무슨 의미가 있는 건가 싶다.
그래서 시작해보는 Spring과 Springboot 버전별 특징 알아보기
Spring 버전별 특징도 궁금해요👀
모든 버전을 살펴보기에는 어려움이 있기에 Spring initializr에서 생성 가능한 최근 release인 3.0 에서의 추가되는 사항을 살펴보자.
Springboot가 뭔지는 알아야할거 아니오.
Spring Boot, 스프링부트는 Java의 Web Framework로 기존 Spring Framework에 Tomcat 서버를 내장하고 여러 편의 기능을 추가하여 인기가 많은 Framework이다.
즉, Spring을 더 쉽게 이용하기 위한 도구로 보면 된다.
Web Framework
- Web Framework란 웹 프로그램을 쉽고 빠르게 만들 수 있도록 도와주는 역할을 한다.
- 웹 프로그램을 만들기 위해서는 Coockie나 Session 처리, 로그인/로그아웃 처리, 권한 처리, 데이터베이스 처리 등 고려해야할 기능이 많다.
- Web Framework를 사용하면 이런 기능을 일일히 만들지 않고 이미 만들어져 있는 것을 익혀서 사용하면 된다.
- 웹 프로그램을 만들기 위한 Starter Kit라고 생각하면 된다.
- Java로 만들어진 Web Framework 중 하나가 Spring Boot인 것이다.
보안 측면
- Spring boot는 SQL 인젝션, XSS, CSRF, Clickjacking 등과 같은 보안 공격을 기본으로 막아준다. 일일히 코드를 짤 필요가 없다는 것
다양한 기능
- 개발자들이 필요로하는 도구와 기능이 대부분 준비되어 있다.
내장 WAS
- Spring만 사용하여 웹 애플리케이션을 개발한다면 Tomcat과 같은 WAS(Web Application Server)가 필요하다.
- WAS는 종류도 다양하고 설정 방식도 제각각이어서 WAS에 대해 공부해야할 내용이 상당하다.
- Spring boot는 Tomcat 서버가 내장되어 있고 설정도 자동 적용되기 때문에 따로 WAS를 공부할 필요가 없다.
- Springboot로 작성하더라도 tomcat 대신 다른 WAS를 사용할 수 있다.
- 또한 배포되는 jar 파일에도 Tomcat 서버가 내장되어 실행되므로 서로 다른 WAS로 인해 발생되는 문제도 없다.
간편한 설정
- Spring을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야한다는 문제점이 있었다.
- 개발자가 실행환경이나 의존성 관리 등 인프라 관련에 에너지를 쏟아야 했다.
- Springboot는 Spring의 복잡한 설정을 자동화하고 단순화하여 누구나 Spring을 쉽게 사용할 수 있게 만들었다.
- 비즈니스를 만들기 위한 프로그래밍에 에너지를 더 쏟을 수 있게 자동화하였다.
Spring Boot 3.0
버전 설명은 Springboot release note를 참고하였습니다.
잠깐 SNAPSHOT은 뭐야?
버전에서 (SNAPSHOT)이 붙은 버전들이 있다.
SNAPSHOT은 release 되기 전 버전을 의미하며 실험 중인 버전이라고 생각하면 된다. 새로 개발 중인 기능이 있기도 하며 수시로 업데이트 되어 인터페이스가 변경될 수도 있다.
Spring Boot 2.x -> 3.0
최소 요구사항이 변경되었다. (M4 기준)
- Gradle 7.5
- Groovy 4.0
- Java EE를 Jakarta EE 9로 대체한다.
javax.*
에서 jakarta.*
로 변경된다.
- Java 17
- Kotlin 1.7+
- Hibernate 6.1
- Spring Framework 6
AOT maven, gradle 플러그인 제공
Spring의 AOT란 (Ahead Of Time)
-
Spring AOT 엔진은 빌드 시 Spring 애플리케이션을 분석화하고 최적하는 도구이다.
-
AOT 엔진은 GraalVM Native Configuration이 필요로 하는 reflection configuration을 생성해준다. 이는 Spring native 실행 파일로 컴파일 하는데 사용되고 이후에 애플리케이션의 시작 시간과 메모리 사용량을 줄일 수 있게 된다.
-
쉽게 말해서 어플리케이션 시작 시간을 빠르게 하는 기술
Spring Boot 3.0 AOT
Spring Boot 3.0 AOT 부분 확대
-
기존의 JVM 방식에서는 프로그램이 올라갈 때 bytecode를 컴파일하지만
-
AOT는 Bytecode를 분석하고 최적화해서 실행하기에 빠르고 메모리적으로 효율적인 코드를 만든다.
- Spring의 native-image는 JVM에서 실행되는 파일에 비해 빌드 시간은 길고 시작 시간이 짧고 메모리는 적게 사용하게 된다.
AOT 적용 효과
- 런타임시 Spring 인프라를 적게 사용한다.
- 런타임시 검증할 조건 수가 감소한다.
- 리플렉션을 줄이고 프로그래밍적 Bean 등록 방식을 사용한다.
native 지원 기능 확대
ref
https://wikidocs.net/160047
http://theeye.pe.kr/archives/2014
https://www.baeldung.com/spring-boot-3-spring-6-new
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
https://marrrang.tistory.com/101
https://revf.tistory.com/260