"Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run"."
( 스프링부트를 이용하면 단독으로 실행 가능한 상용 수준의 스프링 기반 어플리케이션을 손쉽게 만들 수 있다. )
스프링 프레임워크는 기존 개발 방식의 문제와 한계를 극복하기 위해 다양한 기능을 제공한다. 하지만, 필요한 모듈들을 추가하다 보면 설정이 복잡해지는 문제를 해결하기 위해 등장한 것이 스프링 부트이다.
스프링 부트는 프로덕션 환경에서 실행할 수 있는 어플리케이션 개발을 쉽고 빠르게 할 수 있다. 서드 파티 라이브러리나 스프링 플랫폼 설정이 처음부터 들어 있어 최소한의 작업으로 개발을 시작할 수 있다.
스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했다. 또 호환되는 버전을 명시해야 정상 동작한다.
스프링부트에서는 이를 위해 spring-boot-starter
라는 의존성을 제공한다. 여러 종류가 있고, 각 라이브러리의 기능과 관련하여 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공한다.
spring-boot-starter-web
: 스프링 MVC를 사용하는 RESTful 어플리케이션을 만들기 위한 의존성이다. 기본적으로 내장 톰캣 (Tomcat)이 포함되어 있어 jar 형식으로 실행 가능하다.spring-boot-starter-test
: JUnit Jupiter, Mockito 등의 테스트용 라이브러리를 포함한다.spring-boot-starter-jdbc
: HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공한다.spring-boot-starter-security
: 스프링 시큐리티 (인증, 권한, 인가 등) 기능을 제공한다.spring-boot-starter-data-jpa
: 하이버네이트를 활용한 JPA 기능을 제공한다.spring-boot-starter-cache
: 스프링 프레임워크의 캐시 기능을 지원한다.💡 'spring-boot-starter'의 여러 라이브러리를 함께 사용할 때는 의존성이 겹칠수 있다. 이로 인해 버전 충돌이 발생할 수 있는데, 의존성 조합 충돌 문제가 없도록 'spring-boot-starter-parent'가 검증된 조합을 제공한다.
스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정 (Auto Configuration)을 지원한다. 자동 설정은 어플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아준다.
즉, 어플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해준다.
예를 들어, 스프링부트의 메인 어플리케이션 코드에서 @SpringBootApplication
어노테이션이 있다. 이는 @SpringBootConfiguration
, @EnableAutoConfiguration
, @ComponentScan
을 합쳐놓은 구성이다.
@ComponentScan
어노테이션이 @Component
시리즈 어노테이션이 붙은 클래스를 발견해 빈(bean)을 등록한다.@EnableAutoConfiguration
어노테이션을 통해 'spring-boot-autoconfigure' 패키지 안에 spring.factories 파일을 추가해 다양한 자동 설정이 일부 조건을 거쳐 적용된다.💡
@Component
시리즈
@Controller
@RestController
@Service
@Repository
@Configuration
스프링부트의 각 웹 어플리케이션에는 내장 WAS (Web Application Server)가 존재한다. 'spring-boot-starter-web'의 경우 톰캣을 내장한다. 특별한 설정 없이 톰캣을 실행할 수 있으며, 필요에 따라 다른 웹 서버 (Jetty, Undertow 등)로 대체할 수도 있다.
내장된 컨테이너로 톰캣을 사용해 미리 준비된 환경에 따라 동작한다. 스프링 부트를 사용하여 어플리케이션을 개발하면 명령줄로 실행 가능한 하나의 JAR 파일을 만들 수 있다. 명령줄에서 java -jar <jar파일>
실행하면 내장된 톰캣이 실행된 후 개발한 어플리케이션이 실행된다.
즉, 개발자는 톰캣 등의 어플리케이션 서버를 준비할 필요 없이 단순히 실행만으로 어플리케이션을 동작할 수 있다. 또한 WAR 파일을 만들 수 있어 기존 환경에 어플리케이션 서버가 있다면 스프링 부트를 기존 방법처럼 사용해 어플리케이션을 배포할 수 있다.
개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링해야 한다. 스프링 부트에는 Spring Boot Actuator라는 자체 모니터링 도구가 있다.
요즘에는 Actuator보다 프로메테우스 기반으로 모니터링을 많이 한다.
프로메테우스는 서버나 인프라 등의 메트릭을 얻는 OSS의 통합 모니터링 솔루션이다. 프로메테우스는 설치나 설정이 편리하고, 충분한 기능을 가지고 있기에 관리하기 쉽다.
Go 언어로 개발되고 있으며, 바이너리와 설정 파일을 준비하기만 하면 사용 가능하다. 자빅스와 달리 데이터를 저장하는 데이터베이스를 별도로 준비할 필요도 없다. 또한 도커나 쿠버네티스 같은 컨테이너/클러스터 관리 도구의 연동 기능으로 쉽게 모니터링 대상을 설정할 수 있어 마이크로 서비스 개발을 추진하는 기업들이 프로메테우스를 많이 도입한다.
장점
설치 방법
서비스 디스커버리
프로메테우스는 서비스 디스커버리 (service discovery) 기능을 제공하며, 서비스 확장에 따라 자동으로 대상을 추가한다.