스프링의 변화
스프링은 JEE나 J2EE로 알려진 자바 엔터프라이즈 에디션을 경량화하려는 대안으로 시작
컴포넌트 코드 작성은 가벼웠으나 개발 구성은 무거웠다. (초기 스프링은 구성에 필요한 XML 코드가 많았다.)
스프링 2.5는 에너테이션을 기반으로 한 컴포넌트 검색 기능 도입 이후 XML 구성을 상당 부분 제거
스프링 3.0에서는 XML 대신 타입 세이프(Type-safe)하고 리팩토링이 가능한 자바 기반의 구성을 도입
그러나 모든 구성 작업은 개발 저항으로 나타난다.
애플리케이션 로직 작성 대신 구성 작업에 쓰는 시간은 모두 낭비다.
스프링은 많은 일을 대신 처리하지만, 그 대가로 여러분이 해야 할 일도 늘어난다.
왜냐하면 라이브러리 상호 의존성을 모두 지키는 부분은 생각 보다 까다롭다.
스프링 부트 특징
자동 구성
스프링 부트는 많은 스프링 애플리케이션에 공통으로 필요한 애플리케이션 기능을 자동으로 구성해주었다.전통적인 스프링 애플리케이션에 있던 많은 보일러 플레이트 구성을 제거하였다.
스프링 Framework 에서 Hello World 웹 애플리케이션을 개발한다고 하자.
필요한 의존성을 비롯한 메이븐이나 그레이들 빌드 파일이 완비된 프로젝트 구조, 적어도 스프링 MVC와 서블릿 API를 의존성으로 지정해야 한다.
스프링의 DispatcherServlet을 선언한 web.xml 파일 또는 WebApplicationInitializer 구현
스프링 MVC를 사용할 수 있는 스프링 구성
HTTP 요청에 "Hello World"라고 응답할 컨트롤러 클래스
애플리케이션을 배포할 웹 애플리케이션 서버(톰캣 등)
보일러 플레이트 란?
스타터 의존성
스프링 부트에 어떤 기능이 필요한지 알려주면 필요한 라이브러리를 빌드에 추가한다는 것을 보장한다. 명시적인 라이브러리 이름이나 버전 대신에 스프링 부트가 제공하는 기능으로 빌드 의존성을 지정할 수 있게 했다 예를 들어 스프링 프레임워크에서 REST API를 스프링 MVC로 만든다고 사정하자.
org.springframework:spring-core
org.springframework:spring-web
org.springframework:spring-webmvc
org.fasterxml.jackson.core:jackson-databind
org.hibernate:hibernate-validator
org.apache.tomcat.embed:tomcat-embed-core
org.apache.tomcat.embed:tomcat-embed-el
org.apache.tomcat.embed:tomcat-embed-logging-juli
그러나 스프링 부트 프레임워크에서는 spring-boot-starter-web 하나의 라이브러리만 추가하면 사용할 수 있다.
org.springframework.boot:spring-boot-starter-web (다른 의존성을 전이적으로 모두 끌어오므로 의존성 전체를 일일이 추가할 필요가 없다.)
명령줄 인터페이스(CLI를 통한 구현)
스프링 부트의 이 부가 기능을 이용하면 애플리케이션 코드만 작성해도 완전한 애플리케이션을 개발할 수 있지만,기존 프로젝트 빌드 방식에는 필요 없는 기능이다. 명령줄에서 그루비를 사용하고 빠르고 간편하게 개발할 수 있게 하여 스프링 부트의 저항 없는 개발 모델을 완전히 새로운 수준으로 끌어올렸다.
액추에이터
작동 중인 애플리케이션 내부를 살펴보면서 스프링 부트가 어떤 식으로 처리하는지 알 수 있게 했다.
스프링 애플리케이션 컨텍스트에 구성된 빈
스프링 부트의 자동 구성으로 구성된 것
애플리케이션에서 사용할 수 있는 환경 변수, 시스템 프로퍼티, 구성 프로퍼티, 명령줄 인자
최근에 처리된 HTTP 요청 정보
메모리 사용량, 가비지 컬렉션, 웹 요청, 데이터 소스 사용량 등 다양한 메트릭 제공
Last updated