스프링 부트가 스프링을 시작 할 때 해야 될 초기 설정을 간편하게 도와주는 정도..?
딱 그 정도만 알고, ' 아! 스프링 부트는 스프링을 조금 더 간편하게 쓸 수 있도록 도와주는 거네! ' 라며
여태껏 스프링부트를 활용하여 프로젝트를 진행해왔습니다.
스프링 부트를 활용하기 이전에 스프링과 스프링 부트의 차이점을 조금 더 자세하게 알아야 할 거 같아서
이에 대해 정리를 해보려고합니다!
차이점 1. Dependency 관리
순수 스프링 프레임워크의 경우 디펜던시를 설정해줄 때 복잡합니다.
버전관리도 따로 해줘야 되고 설정 파일도 길기 때문입니다.
밑에 코드는 스프링 프레임워크에서 web에 대한 설정을 해줄 때 추가해야 하는 코드입니다.
<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
스프링 부트의 경우 스프링 보다 훨씬 깔끔하고 간단합니다.
빌드 툴이 Gradle일 경우 아래와 같이 스프링 디펜던시를 추가해주면
웹 개발에 필요한 모든 디펜던시를 자동으로 추가 및 관리해줍니다.
implementation 'org.springframework.boot:spring-boot-starter-web'
차이점 2. 설정(Configuration) 방법
dependency 처럼 어떤 라이브러리의 무슨 버전을 쓸 것인지 이외에도
해당 라이브러리를 어떤 방식으로 쓸 것 인지 정해주는 설정도 필요합니다.
타임리프를 예로들면 필요한 설정은 다음과 같습니다.
@Configuration
public class ThymeleafViewResolverConfig {
@Value("${thymeleaf.cache}")
private boolean isCache;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver ();
templateResolver.setPrefix("classpath:templates/");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5");
templateResolver.setCacheable(isCache);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine(MessageSource messageSource) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setTemplateEngineMessageSource(messageSource);
templateEngine.addDialect(layoutDialect());
return templateEngine;
}
@Bean
public LayoutDialect layoutDialect() {
return new LayoutDialect();
}
@Bean
@Autowired
public ViewResolver viewResolver(MessageSource messageSource) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine(messageSource));
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setOrder(0);
return viewResolver;
}
}
자세한 내용은 view 파일의 초기 경로와 관련된 setPrefix와
템플릿 인코딩 방식을 설정해주는 setCharacterEncoding과 같은 것들이 있습니다.
하지만 위와 같은 것들은 대부분 기본 값들을 사용합니다.
기본 설정에서 벗어나는 경우가 거의 없기 때문에
개발자가 타임리프 관련 설정을 할 때마다 저렇게 긴 설정 코드를 작성해주는건
여간 귀찮은 일이 아닙니다.
스프링에 비해 스프링부트는 간편한 설정 작업을 제공해줍니다.
아래 코드는 스프링부트에서의 타임리프 설정 방식입니다.
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
위와 같이 디펜던시 설정을 해주고, 기본 설정된 값을 바꾸려면
application.yml나 application.properties 에서 추가적으로 작성해주며 됩니다.
차이점 3. 배포 방식
순수 스프링은 war파일을 web Application Server에 담아 배포를 합니다.
반면 스프링 부트는 톰캣 같은 내장 WAS를 지니고 있기 때문에
jar 파일로 간편하게 배포가 가능합니다.
다시 말하면 순수 스프링은 내장 WAS를 지니고 있지 않기 때문에
웹 서버 위에서 돌아가는 war 파일로 배포를 하고
스프링 부트는 내장 WAS가 있기 때문에 war 파일을 쓸 필요가 없습니다.
다음과 같이 스프링부트는 스프링과 비교하여 Dependency와 설정 그리고 배포에 있어서
개발자에게 큰 편의와 장점을 제공하는 것을 알 수 있었습니다.
참고한 블로그
https://programforlife.tistory.com/68
[Spring] Spring VS Spring Boot 차이점
Spring Framework Spring은 Java 기반의 오픈소스 Back-end 프레임워크입니다. 다음은 Spring 공식 문서의 일부분으로 Spring이 왜 Spring으로 불리는지 설명한 부분입니다. Whatever happened next, the framework needed a na
programforlife.tistory.com
https://oingdaddy.tistory.com/403
Spring vs Springboot 주요 차이점
Spring을 몇년동안 계속 써왔고 내가 잘한다고 생각되는 부분은 어느 상황에서 어느 library가 필요하고 이건 Spring의 몇 버전과 호환이 되고 설정파일(applicationContext)은 어떻게 구성을 해야 하고 등
oingdaddy.tistory.com
'Spring' 카테고리의 다른 글
Reflection 이란? (0) | 2022.12.16 |
---|---|
스프링부트에서의 API예외 처리 방법 (1) | 2022.12.02 |
DI 인젝션이 필요한 이유는? (0) | 2022.11.19 |
스프링 시큐리티를 쓰는 이유는? (0) | 2022.11.09 |
스프링 컨테이너와 스프링 빈 (0) | 2022.11.03 |