스프링 프레임워크와 스프링 부트의 차이는 무엇일까?
스프링 부트 공식문서에 따르면 스프링 부트는 다음과 같다고 한다.
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.
즉, 스프링 프레임워크는 기능이 많은만큼 환경설정이 복잡하다. 그래서 많은 부분의 환결설정을 자동화하여 개발자가 사용하기 편하게 만든 것이 Spring Boot이다.
1. dependency 관리
Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 길고, 모든 dependency에 대해 버전 관리도 하나하나 해줘야한다.
web에 관한 dependency를 추가하는 코드다.
예)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.5</version>
</dependency>
그렇지만 스프링 부트는
'org.springframework.boot:spring-boot-starter-web'
다음과 같은 dependency 하나만 추가하여 web을 사용할 수 있다.
Spring Boot Starter란?
스프링부트는 스타터를 통해 dependency을 자동화 해준다고 했다. 그렇다면 starter란 무엇일까?
의존성 그룹이라고 생각하면 좋다. 만약 우리가 jpa를 사용한다면 (gradle기준)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
이 한줄만 추가해준다면 스프링 부트가 필요한 라이브러리들을 알아서 받아와 손쉽게 원하는 라이브러리를 import할 수 있다.
2. Configuration
Spring Framework는 configuration 설정 시 매우 길고, 모든 어노테이션과 빈 등록을 설정해줘야한다.
Spring Boot는 application.yml 혹은 application.properties 파일로 설정할 수 있다.
예)
Spring Framework에서 Thymeleaf 템플릿을 사용하고 싶다면??
@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver =
new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
registry.viewResolver(resolver);
}
}
이런 configuration code를 작성해야한다.
하지만 Spring Boot라면?
'org.springframework.boot:spring-boot-starter-thymeleaf’
위 dependecny만 추가하면 된다!
3. AutoConfiguration
스프링 애플리케이션 위에
@SpringBootApplication이라는 어노테이션을 달게되면 내장 톰캣 서버, 외부 라이브러리가 실행된다.
위 어노테이션이 없다면 일반 자바 프로그램처럼 실행된다.
@EnableAutoConfiguration으로 사전에 정의한 라이브러리들을 Bean에 등록해준다.
spring.factories 파일에 있는 의존성들을 스캔하며 등록해준다.
@ComponentScan
@Component, @Controller, @Repository, @Service의 어노테이션이 붙어있는 객체를 Bean으로 등록해준다.
reference
'Spring' 카테고리의 다른 글
[Spring] DI 의존성 주입 방식과 생성자 주입을 사용해야 하는 이유 (0) | 2022.11.22 |
---|---|
[Spring] ArgumentResolver란? (0) | 2022.11.18 |
[Spring] @Transactional의 트랜잭션 전파레벨 (0) | 2022.11.17 |
[Spring] 필터와 인터셉터 (Filter vs Interceptor) (0) | 2022.11.16 |
[Spring] SpringBootTest 테스트 격리 방법 (0) | 2022.11.15 |