-
Spring vs Spring boot기술 면접/Spring 2022. 8. 9. 21:58
Spring을 처음 시작할 때 Spring이라고 한다면 Spring boot를 나타내는 줄 알았다. 하지만 둘은 분명한 차이가 있다. Spring이 무엇인지, Spring boot와 서로 차이점은 무엇인지 알아볼 것이다.
# Spring?
Spring은 경량화된(lightweight) 자바 오픈 소스 개발 프레임워크다. Spring은 기업 수준의 자바 앱 개발을 위한 구성 모델과 포괄적인 프로그래밍을 지원한다. 간단하게 말하자면 기업 용 자바 개발을 심플하게 만들어주고 효과적, 효율적으로 하기 위함을 목표로 한다.
Spring은 본래 넓은 분야에 앱 개발을 지원하기 때문에 많은 모듈들을 가지고 있다.
- Spring MVC
- Spring JDBC
- Spring Security
- Spring ORM
- Spring AOP
- Spring Test
이 모듈들은 앱 개발 시간을 드라마틱하게 줄여준다. 예를 들어 예전 자바 웹 개발에서는 data source에 record를 넣기 위해 많은 표준적인(boilderplate) 코드를 작성해야 햇다. Spring JDBC의 JDBCTemplate을 사용함으로써 몇 줄만으로 configuration을 마칠 수 있다.
# Spring Boot?
Spring Boot는 기본적으로 Spring 프레임워크의 확장이라고 볼 수 있다. 위에서 언급한 boilderplate 코드 작성 없이 Spring 앱 설정을 마칠 수 있다.
더 빠르고 효율적으로 개발을 환경을 구축할 수 있도록 Spring의 독단적인(Opinionated) 방법을 사용한다.
Spring Boot의 대표적인 기능은 다음과 같다.
1. starter 라이브러리들을 추가하여 독단적인 앱 빌드와 설정을 간단하게 만든다.
Spring Boot 는 'starter'를 제공한다. 스타터는 특정 목적을 위한 라이브러리 Dependency 그룹이다. 개발자는 필요한 모든 라이브러리의 Dependency를 찾아볼 필요가 없고 빌드 구성 코드를 간소화할 수 있다.
starter에 포함된 라이브러리들은 다음과 같다.
- spring-boot-starter-data-jpa
- spring-boot-starter-security
- spring-boot-starter-test
- spring-boot-starter-web
- spring-boot-starter-thymeleaf
이 중 spring-boot-start-thymeleaf 모듈이 없을 때 Spring에서 설정하던 예시를 설명하겠다.
spring starter 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); } }
하지만 Spring boot의 spring-boot-starter-thymeleaf dependency를 gradle이든 maven으로 설정해주기만 하면 위와 같은 설정들은 할 필요가 없다.
이는 thymeleaf만이 아닌 다른 라이브러리들도 마찬가지다.
2. tomcat, jetty 같은 서버가 내장되어 있어 복잡한 배포를 피할 수 있다.
jar와 war는 둘 다 jdk에 포함된 jar.exe라는 유틸리티를 이용해 생성되는 자바 애플리케이션 압축 파일이다. 그 중 war형식은 웹 애플리케이션 파일들을 패키징 한다. jre(Java Runtime Environment)에서 실행되는 jar와 달리 war 압출 파일을 실행하려면 Tomcat, Jetty등의 웹 서버 또는 웹 애플리케이션 서버를 설치해야 한다.
Spring Boot는 Tomcat과 Jetty같은 웹 서버를 내장하고 있어서 jar 형식을 사용해 배포할 수 있다. 또한 dependency 설정을 수정하여 내장 서버를 사용하지 않을 수 있다.
3. Metrics, Health check, externalized configuration
Spring Boot는 애플리케이션 모니터링을 위한 상태 점검 기능(Spring Boot Acuator)을 제공한다.
#결론
Spring은 기존 엔터프라이즈 앱 개발을 위해 범용성 높고 넓게 활용되는 것에 초점을 두었다면 Spring Boot은 개발자들이 좀 더 개발 로직 구현에만 초점을 두고 집중하는데 초점을 두었다.
개발자라면 개발 환경 세팅에 하루를 쏟는 경험을 해봤을 것이다. Spring Boot는 이런 힘든 노력을 줄이기 위해 나타났다고 할 수 있다. Spring Boot를 사용하여 코드의 길이와 설정을 줄이고 간단하고 쉬운 방법으로 개발을 시작할 수 있다.
Ref:
https://www.baeldung.com/spring-vs-spring-boot
https://rollbar.com/blog/spring-vs-spring-boot-whats-the-difference/
'기술 면접 > Spring' 카테고리의 다른 글
Stomp, SockJS를 이용하여 채팅 구현하기 (0) 2022.08.11 Json Web Token (0) 2022.04.30