내가 기존에 나는 강의를 통해서 Spring을 계속해서 접해가고 있었다.
그렇기에 이번에는 책을 통해서 내가 몰랐던 부분을 하나하나 블로그에 적어나가려고 해당 블로그를 작성하게 됐으며,
책은 스프링 부트 핵심 가이드를 참고했으며, 부족한 부분은 부가적인 자료를 통해서 기본을 탄탄하게 쌓아나가려고 한다.
기존에 있던 스프링 프레임워크와 스프링 부트에 대한 차이에 대해서 단순히 의존성을 편리하게 해준다는 것으로 마치고 있었다.
하지만 그뿐만 아니라 내장WAS , 자동 설정에 대한 편리함도 있다는 것을 알게 됐고 오늘 그 부분에 대해서 정리를 하려고 한다.
기존에 Spring Framework를 통해서 개발하다 보면 개발에 있어 필요로 하는 모듈을 별도로 설치를 해줘야 했는데 이는 개발을 하다 보면 방대해지기 마련이고 이는 결국 호환되는 버전에 있어서 잘못된 모듈을 설치하는 경우가 발생할 수 있다.
그렇기에 스프링 부트에서는 이런 단점을 해소하고자 'spring-boot-start'를 통해 하나의 의존성 모듈의 정의를 해줬다. 이 안에는 정말 다양한 모듈이 있다.
실제로 유사하게 'spring-boot-web'을 보면 어떤 모듈들이 설치되어 있는지 볼 수 있으며, 이를 버전 호환성에 각각 맞게 설치를 해줄뿐더러 더 나아가 호환성에 대해서는 조금이나 우리가 신경 쓸 필요가 없는 경지에 다다르게 해주는 고마운 친구이다.
근데 이 'spring-boot-stater'도 마찬가지로 함께 사용할 때는 의존성이 겹칠 수가 있다. 이에 따라 버전이 충돌이 발생할 수 있지만 spring-boot-starter-parent'가 검증된 조합을 제공한다.
스프링에 빈을 등록하고 이거를 우리가 사용할 수 있도록 만들기 위해서는 처음부터 수기의 설정이 필요했다.
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public UserRepository userRepository() {
return new UserRepositoryImpl();
}
// 더 많은 빈 설정...
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.example.UserService">
<property name="userRepository" ref="userRepository"/>
</bean>
<bean id="userRepository" class="com.example.UserRepositoryImpl"/>
<!-- 더 많은 빈 설정... -->
</beans>
이런 식으로 말이다. 하지만 Spring Boot를 사용하게 된다면 우리는 초기 수기 설정을 Spring Boot에서 자동으로 등록을 해준다.
여기서 꿀팁!! Spring factories안에 Auto Configure 항목이 있다고 한다. 그것을 통해서 빈이 등록된지 여부도 볼 수 있다. 이거는 우숩게 생각할 수 있지만 나 필자는 Spring으로 처음 개발을 할 당시에 Bean이 등록된지도 모른채 개발을 많이 해봤기에 처음이라면 정말 꿀팁일듯 하다...ㄷㄷ
스프링 부트의 각 웹 애플리케이션은 내장 WAS가 존재한다. 실제로 내가 JDBC 작업부터 수기로 해주는 때가 있었다. 이때 그렇다면 Spring은 왜 돌아가는 거지?? 그 이유가 여기 있다. 애초에 Spring Boot에서 자체적으로 포함된 모듈이었다...ㅎㅎ
이렇게 내가 느낀점들을 한 단어로 정리를 해봤는데. 정말 Spring을 극복하기 위해 만들어진 모듈이라고 봐도..무방하다..!!