책의 내용 기반으로 내용을 정리하고 더하였음.

스프링부트는 프레임워크가 나오고 약 10년이 지난 2014년에 등장한 프로젝트.
스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 애플리케이션을 간편하고 빠르게 개발할 수 있도록 설계된 프레임워크입니다. 스프링 부트는 설정의 복잡성을 줄이고, 기본 설정을 제공하여 생산성을 높이며, 확장성과 유연성을 제공합니다.
Spring Boot Starter
spring-boot-starter: 기본적으로 필요한 종속성을 포함한 핵심 스타터.- 역할: 특정 기능을 쉽게 사용할 수 있도록 관련 라이브러리를 자동으로 포함.
- 예:
spring-boot-starter-web은 웹 애플리케이션에 필요한 Spring MVC, Embedded Tomcat 등을 포함.Spring Boot Actuator
- 의존성:
spring-boot-starter-actuator- 역할:
- 애플리케이션의 상태를 모니터링하고 관리.
- 다양한 엔드포인트 제공(
/health,/metrics등).- 개발/운영 환경에서 유용한 진단 및 모니터링 기능 제공.
Spring Boot DevTools
- 의존성:
spring-boot-devtools- 역할:
- 개발 편의성을 위한 기능 제공.
- 코드 변경 시 애플리케이션 자동 재시작.
- 브라우저 자동 리로드 지원.
Spring Boot Starter Web
- 의존성:
spring-boot-starter-web- 역할:
- 웹 애플리케이션 개발을 위한 라이브러리 제공.
- Spring MVC, REST API, 내장형 웹 서버(Tomcat, Jetty 등) 포함.
Spring Boot Starter Data JPA
- 의존성:
spring-boot-starter-data-jpa- 역할:
- 데이터베이스와 상호작용을 위한 ORM (JPA, Hibernate 등) 지원.
- Repository 인터페이스를 통해 간단한 데이터 접근 구현.
Spring Boot Starter Security
- 의존성:
spring-boot-starter-security- 역할:
- 애플리케이션 보안을 쉽게 설정.
- 인증 및 권한 부여(Authorization) 기능 포함.
- 기본 사용자 인증 및 암호화된 비밀번호 제공.
Spring Boot Starter Thymeleaf
- 의존성:
spring-boot-starter-thymeleaf- 역할:
- 템플릿 엔진 Thymeleaf와의 통합.
- 서버 사이드 렌더링(View)을 쉽게 구성.
Spring Boot Starter Test
- 의존성:
spring-boot-starter-test- 역할:
- 테스트 환경 구성.
- JUnit, Mockito, AssertJ 등과 통합.
Spring Boot Starter Validation
- 의존성:
spring-boot-starter-validation- 역할:
- 입력 값 검증(BEAN Validation) 기능 제공.
@Valid,@NotNull,@Size등의 애너테이션 지원.Spring Boot Starter Logging
- 의존성:
spring-boot-starter-logging- 역할:
- 기본 로깅 시스템으로 SLF4J와 Logback 사용.
- 애플리케이션의 로그를 효율적으로 관리.
- 스타터 의존성:
- 다양한 기술(웹, 데이터베이스, 보안 등)에 대한 간단한 설정 제공.
- 의존성 선언만으로 관련 라이브러리를 자동으로 구성.
- 내장형 서버 지원:
- Tomcat, Jetty, Undertow 등의 웹 서버가 내장되어 있어 독립 실행형 애플리케이션 개발 가능.
- 자동 설정(Auto Configuration):
- 개발자가 설정을 추가하지 않아도, 필요한 기본 설정을 자동으로 구성.
- Spring Boot CLI:
- 명령줄 도구로 간단한 애플리케이션 개발 가능.
- Production-Ready:
- Actuator를 통해 모니터링 및 관리 기능 제공.
- 운영 환경에서 바로 사용할 수 있는 기능 포함.
자동 설정은 이름에서 알듯이 자동으로 설정해주는 기능. 구체적으로는 라이브러리가 제공하는 구상 클래스와 Bean 정의와 스프링이 제공하는 각종 기능의 활성화를 자동으로 설정.
예를 들어
@EnableTransactionManagemnet를 사용해야 트랜잭션이 활성화가 되었지만, 자동설정을 하게 되면, 자동으로 DI 컨테이너가 생성하게 되면서 DI 컨테이너에 Bean이 등록.
1번 JavaConfig 클래스 불러오기. 제공되는 클래스 안에는 꼭 사용하지 않아도 되는 구성도 포함되어 있어서, DI 컨테이너 안에 쓰지 않을 Bean이 많이 등록되어 생성하는데 시간이 걸리거나 메모리를 많이 소모하게 된다.
|
2번 스프링부트는 애플리케이션 특성에 따라 필요한 설정과 불필요한 설정을 판단하여, 불필요한 설정은 불러오지 않도록 설정. 필요 여부를 판단에는 여러 방법이 있지만, 사용한느 라이브러리를 파악하여 JavaConfig클래스르 판단
![]() |
자동 설정되는 항목에 대해 커스터마이징이 가능. 대표적인 방법은
application.properties파일로 지정하는 방법이나 YAML 파일로 지정하는 방법이 있음.
- application.properties와 application.yml은 Spring Boot 애플리케이션의 기본 설정 파일입니다. 둘 중 하나를 사용하면 됩니다.
- YAML은 계층형 데이터를 직관적으로 표현하기 좋아 복잡한 설정 시 선호되지만, 간단한 설정의 경우 properties 형식이 더 간단합니다.
application.properties 과 application.yaml 예시
# 서버 포트 설정
server.port=8081
# 애플리케이션 이름
spring.application.name=my-spring-app
# 데이터베이스 설정
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hibernate JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
# 로그 레벨 설정
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG
server:
port: 8081
spring:
application:
name: my-spring-app
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
logging:
level:
org.springframework: INFO
com.example: DEBUG
기존과 SpringBoot는 기본적으로 내장AP서버를 가지고 있어, 애플리케이션 프로그램 안에서 AP서버를 실행하게 됨. 그 결과 애플리케이션이 AP 서버를 라이브러리로 내장하고, AP 서버를 실행하는 메서드를 애플리케이션에서 호출하는 방식을 따름.
프레임워크에서는 AnnotationConfig ApplicationContext 클래스를 사용하는 방법을 사용했는데, 스프링 부트는 SpringApplication클래스에서 run메소드를 사용하면 됨.
@SpringBootApplication->@SpringBootConfiguration+@EnableAutoConfiguration+@CompentScan
@SpringBootApplication의 동작
위 세 가지 애너테이션을 조합하여 다음과 같은 역할을 수행합니다:
- 애플리케이션 설정 (@SpringBootConfiguration)
설정 클래스를 정의하고 Bean을 등록- 자동 구성 (@EnableAutoConfiguration)
클래스패스를 스캔하고, 필요에 따라 Spring 설정을 자동으로 구성
개발자가 수동으로 설정할 필요 없이 대부분의 설정이 자동으로 이루어짐- 컴포넌트 스캔 (@ComponentScan)
애플리케이션의 패키지 구조를 기준으로 컴포넌트를 탐색하고 등록
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
// 애플리케이션 실행
SpringApplication.run(MySpringBootApplication.class, args);
}
}
| 특징 | Spring Boot | Spring Framework |
|---|---|---|
| 개념 | Spring Framework를 기반으로 한 확장된 프레임워크로, 간소화된 설정과 자동 구성을 제공. | Java 기반의 핵심 애플리케이션 개발 프레임워크로, 유연하고 다양한 설정 가능. |
| 설정 방식 | 자동 설정 (@EnableAutoConfiguration) 사용, 기본 설정 제공. | 수동 설정 요구, XML 또는 Java Config 사용. |
| 배포 형태 | 내장된 서버(Tomcat, Jetty) 포함으로 독립 실행 가능 (jar). | 외부 서버(Tomcat 등) 필요, 전통적인 WAR 배포 방식 사용. |
| 복잡성 | 설정이 간소화되어 빠르게 개발 가능, 초보자에게 적합. | 높은 유연성 제공, 복잡한 대규모 프로젝트에 적합. |
| 생산성 | 빠른 개발과 배포를 지원하며 "관례보다 설정" 접근 방식 제공. | 더 많은 설정 작업이 필요하며 초기 개발 속도가 느림. |
| 의존성 관리 | spring-boot-starter 의존성을 통해 간편하게 관리. | 의존성을 직접 추가하고 관리해야 함. |
| 내장 서버 지원 | ✅ 제공 (Tomcat, Jetty, Undertow). | ❌ 제공되지 않음, 별도 서버 설정 필요. |
| 초기 설정 | 간단, 최소 설정만으로 애플리케이션 실행 가능. | 설정 작업이 복잡하며 XML 또는 Java Config 요구. |
| 사용 사례 | 소규모부터 중규모 프로젝트, 독립 실행 가능한 애플리케이션, 마이크로서비스. | 대규모 모놀리식 애플리케이션, 복잡한 비즈니스 로직이 있는 프로젝트. |
| 테스트 | 내장된 테스트 유틸리티로 간편한 테스트 가능. | Spring Test Framework 제공, 하지만 더 많은 설정 필요. |