- 자동설정 (AutoConfiguration)
스프링부트의 "자동설정" 방법이 등장하게 됩니다.
예컨데, 클래스 패스와 H2.jar에 JDBC 템플릿을 추가했다면 스프링 부트는 자동으로 인메모리 데이터베이스와 JDBC 템플릿을 자동으로 구성해줍니다
스프링부트의 자동설정은 200개 이상의 비슷한 설정을 해결하고 JAR 디펜던시를 검사하여 많은 기능을 자동으로 구성해줍니다.
(예를 들어 spring-mvc.jar가 존재한다면, 자동으로 DispatcherServle과 InternalViewResolver 등을 구성해줍니다.)
JPA와 Hibernate를 사용한다면 이와 관련된 설정을 구성해주고, spring-security를 사용한다면 마찬가지로 기본적인 어플리케이션 보안을 위한 basic security를 설정해줍니다.
(Main 클래스에 어노테이션을 사용하며 embedded 톰캣서버를 사용합니다.)
스프링부트 1.2 이후버전에서 @SpringBootApplication 어노테이션을 사용하는 것이 좋습니다. 다른 어노테이션을 결합하여 코드를 더 읽기 쉽게 만들어줍니다.
- Starter POMs
공통적인 기능들에 대한 자동설정으로 설정에 대한 어려움을 날려버리는 동안, Starter POMs는 프로젝트에서 디펜던시를 찾고 추가하는 것에 대한 어려움을 없애주었습니다.
Jackson을 지원하는 간단한 스프링 MVC 기반 REST 어플리케이션을 빌드하고 임베디드 컨테이너를 실행하려면 최소한
다음의 디펜던시가 필요합니다.
이러한 모든 디펜던시들을 추가하고 호환이 맞는 편리한 버전을 걱정하기보다, 그냥 하나만 추가하면 됩니다.
또한 모든 버전이 테스트되고 호환성의 문제가 없을 것이라고 확신합니다.
요컨데, Starter POMs 혹은 starter 디펜던시는 또하나의 스프링 부트의 개발 단순화를 위한 멋진 특징입니다.
자동설정과 비슷하게 자주 사용하게 될것입니다.
- 스프링 부트 CLI
스프링 부트 CLI는 Command Line Interface의 약자로 스프링 부트프레임워크에서 제공하는 것입니다. 이는 Groovy 언어를 통해서 프로젝트를 구성하는 것입니다. 사실 Groovy와 스프링 부트는 완전히 상호 보완적입니다. Groovy는 자바 개발을 쉽게 하는 것이 목표이고, 스프링 부트도 마찬가지로 스프링 어플리케이션 개발을 쉽고 간단하게 개발하기 위한 도구입니다.
스프링부트의 자동설정과 starter 디펜던시가 스프링부트의 전체적인 기능이라면, CLI는 선택적인 것입니다. 또한 사용하기 위해 install 하는 과정이 필요합니다.
Groovy가 @RestController 및 @RequestMapping 어노테이션에 대해 어떻게 알고 있는지와 같이 이러한 모든 기능이 어떻게 작동하는지 궁금하다면 Spring Boot CLI가 자동 구성 및 스타터 POM 기능을 활용하여 응용 프로그램 코드 작성에만 집중할 수 있었음을 알려 드리겠습니다.
(예를 들어, spring-boot-web-starter가 읽어들여지면 spring-mvc.jar를 다운로드하고 DispatcherServlet을 자동으로 설정하고 스프링 MVC를 활성화합니다. )
- Actuator
Actuator는 또하나의 놀라운 스프링 부트의 특징입니다. 이는 스프링 부트 어플리케이션이 실행 중 무슨 일이 일어나고 있는지를 볼 수 있습니다. 자동 설정의 모든 장점들로 인해 응용프로그램 내부에 무엇이 있는지 알지 못할 위험이 있으며 해당 위험은 Spring Actuator에 의해 해결됩니다.
이는 프로덕션 환경에서 어플리케이션을 실행하는데 많은 통찰력과 메리트를 제공합니다. 예를 들어, Actuator를 사용하면 어플리케이션 컨텍스트에서 구성되는 Bean을 정확하게 찾을 수 있고, 자동 설정 결정사항, 응용프로그램에 사용하능한 환경변수, 시스템 변수, 커맨드라인 인수 등이 있습니다.
또한, 다양한 애플리케이션 지표와 함께 애플리케이션에서 처리 한 HTTP 요청의 흔적을 얻을 수도 있습니다. CPU 및 메모리 사용량, 가비지 콜렉션 세부 사항, 웹 요청 및 데이터 소스 사용량 등이 있습니다.
(예를 들어 : RESTful API를 사용하여 이 모든 것을 얻거나 원격 쉘 기능을 사용하여 애플리케이션 내부로 안전하게 들어가서 명령을 실행하여이 모든 정보를 얻을 수 있습니다.)
또한, JMX MBean을 사용하여 이 모든 기능을 제공하므로 JConsole과 같은 JMX 클라이언트를 사용하여 런타임에
제어 할 수 있습니다.
동시에 기밀 정보를 노출 할뿐만 아니라 위험하기 때문에 Actuator 엔드 포인트에 대한 액세스를 보호해야합니다.
예를 들어, 누구나 / shutdown 엔드 포인트를 사용하여 애플리케이션을 중지 할 수 있습니다. 하지만 걱정할 필요는 없습니다. 다른 Spring 애플리케이션과 마찬가지로 Spring Security를 사용하여 Actuator 엔드 포인트를 보호 할 수 있습니다.
- 스프링 부트 Initializer
GUI의 Project MetaData 만 제공하면됩니다.
(예를 들어, 프로젝트 이름, 그룹, 아티팩트 등. 또한 큰 목록에서 스타터 종속성을 선택할 수 있습니다. 웹, JPA 또는 보안 스타터)
Spring Initializer 프로젝트는 https://start.spring.io/. 여기서 접근할 수 있습니다.
프로젝트를 생성하면, Zip 파일을 다운로드하여 IDE(Eclipse or IntelliJ 같은 개발도구)에서 프로젝트를 구성하면 됩니다. 그런다음 코드를 작성하면 됩니다.
Spring 프레임 워크의 많은 내부 세부 사항을 알지 않아도 Spring 기반 Java 어플리케이션을 쉽게 개발할 수 있도록 합니다.