Spring Framework

교과목 내용을 정리하기 위한 글입니다. 틀린 내용이 있을 수 있으니 참고하세요
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/mappings | URL 매핑 정보 확인 |
/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);
}
}