SpringBoot

박수오·2025년 2월 19일
post-thumbnail

Spring Boot

스프링 부트는 기존 스프링 프레임워크의 여러 단점을 보완하고, 더욱 쉽게 사용 할 수 있도록 만든 프레임 워크이다.

등장배경

스프링은 몇가지 단점을 가지고 있었다.

의존성 관리 문제

스프링에서는 여러 의존성과 버전을 관리하는것이 복잡하다.
의존성 주입(DI)를 구현하기 위해 XML 파일에 많은 수의 Bean을 직접 등록하고 관리해야 했다.

설정의 복잡성

여러가지 강력한 기능을 사용하려면 그많음 많은 설정을 해야하고, 이는 초기 복잡성을 증가시킨다.

별도 웹서버 구성

웹상에서 스프링을 사용하려면 별도의 Wep Application Server를 설치해야 하고, 설정해야 한다.서비스하기 위해선 별도의 서버에 수동으로 배포해야 하는 번거로움이 있었다.


특징

간결한 설정

번거로운 XML 설정이 필요없고, 최소한의 설정으로 Spring을 사용 할수 있게 해준다.
기본적인 설정을 자동으로 해주어 개발자가 많은 설정을 하지 않아도 되기에 애플리케이션 개발에 집중 할 수 있다.

자동설정(Auto Configuration)

애플리케이션 실행시 필요한 기본 설정을 자동으로 구성한다.
Spring Boot는 @EnableAutoConfiguration을 통해 클래스패스(classpath)에 존재하는 라이브러리를 감지하여 적절한 Bean을 자동으로 등록한다.
application.properties 또는 application.yml 파일의 설정값을 기반으로 추가적인 설정을 적용한다.

내장 서버

내장된 서버(Tomcat, Jetty, Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행할 수 있다.

기존 스프링 프레임워크는 톰캣 등의 외장 웹 서버를 설치하여 WAR 파일을 생성하여 배포해야만 했지만 Spring Boot는 JAR 파일 실행만으로 애플리케이션 실행이 가능하다.

의존성 자동 관리

Spring Boot Starter를 사용하면 필요한 라이브러리를 쉽게 추가 할 수 있다.
서드파티 라이브러리의 의존성 관리를 위해 Starter 의존성 통합 모듈을 제공하기 때문에, Maven/Gradle 같은 빌드 도구에 버전을 명시하지 않아도 적합한 라이브러리 버전을 찾아주어 버전 관리가 간편해진다.

JAR 파일 실행(독립 실행형 애플리케이션)

Spring Boot 애플리케이션은 JAR 파일 하나로 실행이 가능하다.
모든 설정과 웹 서버가 포함된 Fat JAR 또는 Uber JAR 형태로 패키징 가능하다.
바로 실행이 가능하다는 것은 별도의 서버 환경 없이 배포가 가능하다는 것을 의미한다.

Actuator 지원

Spring Boot Actuator는 애플리케이션의 상태를 모니터링하고 관리할 수 있도록 다양한 엔드포인트(Endpoint)를 제공한다.

애플리케이션의 실행 상태, 성능, 환경 정보, 로그, 메트릭스 등을 쉽게 확인할 수 있다.

REST API 형태로 엔드포인트를 제공하여 쉽게 접근 가능하며, 운영 환경에서 애플리케이션을 모니터링하고 문제를 빠르게 파악하는 데 유용하다.

Actuator 활성화

build.gradle 또는 pom.xml에 Spring Boot Actuator 라이브러리를 추가한다.

Gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

Maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

이후 application.properties에서 엔드포인트를 활성화 한다.

기본적으로 /actuator/health, /actuator/info만 활성화되어 있다.

# 모든 엔드포인트 노출
management.endpoints.web.exposure.include=*

#특정 엔드포인트만 노출시
management.endpoints.web.exposure.include=health,info,metrics
profile
모호하게 알고있거나 개념없이 사용만 했던 것들을 정리한 내용입니다.

0개의 댓글