Spring Boot 개요

2025년 06월 03일
4

thumbnail.png
교과목 내용을 정리하기 위한 글입니다. 틀린 내용이 있을 수 있으니 참고하세요

1. Spring Boot란?

Spring Boot는 Spring 애플리케이션을 빠르게 시작할 수 있도록 돕는 Opinionated(선호 기반) 접근 방식을 제공합니다.

  • 최소한의 설정으로 빠른 개발 환경 구축
  • 자동 구성(Auto Configuration): application.properties와 클래스패스를 기반으로 필요한 빈(bean)을 자동 등록
  • 의존성 충돌 해결 지원
  • 내장 서버 제공: 별도 서버 설치 없이 myapp.jar로 실행 가능
# 실행 예시
java -jar mycoolapp.jar

2. 주요 기능

2.1 Auto Configuration

기존 Spring MVC나 JPA 설정을 반복적으로 작성하던 것을 Spring Boot가 자동화합니다.

  • 클래스패스에 spring-webmvc가 있으면 DispatcherServlet 자동 등록
  • 임베디드 데이터베이스(H2, HSQL) 드라이버가 있으면 DataSource 자동 생성
<!-- 기존 web.xml에 작성하던 DispatcherServlet 설정 예 -->
<servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>appServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

Spring Boot에서는 다음과 같이 간단히 애너테이션만 추가하면 자동 구성이 활성화됩니다.

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.2 Easy Dependency Management (Starters)

Spring Boot 스타터(starter)는 자주 사용하는 라이브러리를 호환 가능한 버전으로 묶어 제공합니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 포함 내용 예시: Spring Core, Spring MVC, Jackson, Hibernate Validator, Tomcat(내장), 로깅(Logback, SLF4J)
  • 30여 개 이상의 스타터 제공 (예: spring-boot-starter-data-jpa, spring-boot-starter-security 등)

2.3 Embedded Servlet Container

  • main() 실행 시 내장 Tomcat 구동
  • 패키징 타입 jar로 배포 가능 (WAR 불필요)
<packaging>jar</packaging>

2.4 Spring Boot Actuator

애플리케이션 모니터링·관리용 REST 엔드포인트를 자동 노출합니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
엔드포인트설명
/actuator/health애플리케이션 상태 확인
/actuator/beans등록된 빈 목록 확인
/actuator/mappingsURL 매핑 정보 확인
/actuator/metrics메트릭 정보 확인
# application.properties 예시
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
info.app.name=MyApp
info.app.version=1.0.0

3. Bean 구성 방식

3.1 XML 기반 설정

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/test"/>
  <property name="username" value="root"/>
  <property name="password" value="secret"/>
</bean>

3.2 어노테이션 기반 설정

@Service
public class UserService {
  @Autowired
  private UserDao userDao;
}
 
@Repository
public class UserDao {
  @Autowired
  private DataSource dataSource;
}

3.3 Java 기반 설정

@Configuration
public class AppConfig {
  @Bean
  public DataSource dataSource() {
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName("com.mysql.jdbc.Driver");
    ds.setUrl("jdbc:mysql://localhost:3306/test");
    ds.setUsername("root");
    ds.setPassword("secret");
    return ds;
  }
 
  @Bean
  public UserDao userDao(DataSource dataSource) {
    return new JdbcUserDao(dataSource);
  }
 
  @Bean
  public UserService userService(UserDao dao) {
    return new UserService(dao);
  }
}