스프링, 스프링 부트란?
스프링은 스프링 프레임워크, 스프링 부트, 스프링 데이터 등 여러 프로젝트들의 모음을 말한다.
이러한 각각의 프로젝트들 마다 하위 프로젝트(모듈)을 포함하고 있는데, 대표적으로 스프링 프레임워크의 하위 모듈로는 MVC, JDBC를 포함한 여러 모듈 존재한다.
이렇게 스프링의 범위는 넓고, 정말 많은 프로젝트들이 있지만, 그중에서도 스프링 프레임워크와 스프링 부트 프로젝트가 핵심이라고 볼 수 있다.
스프링 프레임워크는 객체 지향의 특징을 잘 활용할 수 있게 해주며, 개발자들이 핵심 비즈니스 로직 구현에만 집중할 수 있게 해주는 프레임워크이다.
스프링의 기본 전략은 DI, IoC로 객체지향 설계를 바탕으로 하여 비즈니스 로직과 트랜잭션, 대규모 데이터 처리와 같은 엔터프라이즈 기술을 분리시키는 것이다.
스프링을 사용하고, 여러 패키지들을 의존하여 사용하게 되면서 스프링의 초기 설정이 많아지게 되었다.
이렇게 스프링의 초기 설정이 많아짐에 따라서 설정을 간소화 할 수 있게 하자는 목적으로 스프링 부트 프로젝트가 진행되었고, 스프링 부트가 탄생하게 되었다.
스프링 부트는 약간의 설정으로 애플리케이션을 개발할 수 있게 해 주어 스프링 애플리케이션을 쉽게 만들 수 있게 해 준다.
스프링 부트는 스프링 프로젝트 중 하나로 스프링 프레임워크를 쉽게 사용하게 해주는 도구이지, 스프링 프레임워크와 별개로 사용하는 것이 아니다.
스프링 부트가 지원하는 기술
스프링 부트는 스프링을 간편하게 사용할 수 있는 여러 기능들을 제공하고 있다.
다음의 기능들을 살펴보자.
1. 의존성 관리
기존 스프링은 원하는 라이브러리를 사용할 때마다 의존성을 각각 설정해줘야 하는 번거로움이 있었다.
스프링 부트는 자주 사용하게 되는 모듈 간의 의존성과 버전 조합을 자동으로 제공해주고 있다.
스프링 부트는 메이븐의 경우에는 부모, 자식 관계로 의존성의 버전 등을 미리 세팅해놓고 제공해주기 때문에 따로 명시를 해주지 않아도 되며, 그래들의 경우는 플러그인 블록을 통해 스프링 부트가 관리하는 의존성을 받아올 수 있다.
2. 자동 설정
기존 Spring은 많은 환경설정이 필요했다.
초기에는 xml 파일을 통해 환경설정을 진행했으며, 보다 편리한 설정을 위해 Bean으로 등록하여 설정하는 등 환경설정을 개선해나갔다.
하지만 스프링 부트는 이러한 환경설정 부분들을 의존성 추가와 함께 properties 파일만 설정해주면 끝나버린다.
스프링 부트는 환경 설정 부분들을 미리 설정해두어 spring.factories라는 곳에 저장해두어 이를 가능하게 구현하였다.
그렇다면, 이러한 자동 설정은 어떻게 동작하는걸까?
자동 설정을 가능하게 해주는 부분은 스프링 프로젝트를 실행하는 클래스에 위치하는 @SpringbootApplication 안에 @EnableAutoConfiguration 어노테이션이 담당하고 있다.
해당 어노테이션의 내부에 @Import 어노테이션이 자동 설정을 수행한다.
자동 설정의 경우는 spring.factories에 등록된 클래스들이 빈으로 등록되어 설정이 되는데, 이때 Conditional로 시작하는 어노테이션들의 조건에 부합하는 클래스들만 빈으로 등록되는 원리이다.
그러면 properties에 설정한 값들은 어떻게 자동 설정에 반영되는걸까?
spring-configuration-metadata.json 파일은 자동 설정 시 사용할 프로퍼티 정의 파일로 컴파일 시점에 생성된다.
이 생성되는 시점에 properties에서 설정한 값들을 주입시켜주는 형태로 개발자가 설정한 properties를 자동 설정에 반영하게 되는 원리이다.
3. 내장 WAS
기존 Spring은 웹 애플리케이션을 개발하고 나서 배포하려면 외부 WAS 서버를 이용해야 했다.
애플리케이션 WAR 패키징 후, WAS에 WAR 파일을 올려 배포하는 형태였다.
하지만 스프링 부트는 이러한 WAS 서버가 내장되어 있다.
앞서 설명한 자동 기본 설정 형태로 WAS 서버 또한 설정이 되어있으며, 기본 WAS는 tomcat으로 설정되어 있다.(기본 WAS의 경우는 설정을 통해 다른 WAS로도 바꿀 수 있다.)
WAS가 내장되어 있기 때문에 WAR 파일로 패키징 할 필요 없이 웹 애플리케이션을 JAR파일로 패키징하여 사용할 수 있다는 장점이 있다.(물론 원한다면 WAR 파일로도 배포가 가능하기 때문에 선택지가 생긴 셈이다.)
또한, WAS의 내장으로 서버 구동 시간이 단축된다는 장점이 있다.
외부에서 WAS를 받아 사용하는 Spring에 비해, WAS를 내장하고 있는 스프링 부트는 서버의 구동시간 측면에서도 유리하다.
마치며
이번 포스팅에서는 스프링과 스프링 부트에 대한 차이점에 대해서 알아보았다.
간단하게 이번 포스팅을 요약하자면 다음 이미지 하나로 요약할 수 있다.
스프링은 개발자들의 힘든 겨울이 끝나고 봄이 왔다는 의미에서 스프링으로 지어졌다.
이에 스프링 부트는 조금 더 봄이라고 할 수 있다.
참고
'👨💻 개발' 카테고리의 다른 글
Spring Security 요약 정리 (0) | 2023.08.12 |
---|---|
깃(Git), 깃허브(Github) 활용하기 (0) | 2021.12.28 |
웹 애플리케이션 서버(WAS)란? 웹 서버(WS)와의 차이 (0) | 2021.12.11 |
서블릿(Servlet)이란? 서블릿에서 스프링까지 (0) | 2021.12.11 |
IAM이란? (0) | 2021.12.08 |