코딩항해기

[리뷰/우아한테크] Spring vs Spring Boot 본문

Spring

[리뷰/우아한테크] Spring vs Spring Boot

miniBcake 2024. 10. 6. 14:30

 

 

 

 

Spring 생태계

스프링 프로젝트 중 일부 https://spring.io/projects

 

스프링이란 하나의 기술이 아닌 여러가지 스프링 프로젝트들의 모음이다. 스프링에는 다양한 프로젝트가 있다. 이 모든 스프링 프로젝트는 스프링 프레임워크를 기반으로 동작한다. 이 때 생태계가 확장됨에 따라 사용에 어려움이 생겼다. 이 때 문제를 도와주기 위해 등장한 서브 프로젝트가 스프링 부트이다.

 

Spring Framwork

스프링 프레임워크를 사용하면 자바 기반의 어플리케이션을 만들 수 있고, 개발자들은 비즈니스 로직에 집중할 수 있는 장점이 있다. 

 

스프링 이전에는 EJB라는 프레임워크가 있었다. EJB는 2000년대 초반 등장했고 비즈니스 로직과 앤터프라이즈 기술의 분리를 통해 편리한 애플리케이션을 개발하고자하는 목적을 가지고 있었다. 그러나 EJB는 가격이 높았고 비즈니스 로직보다는 EJB 사용을 위해 상속하거나 구현해야하는 코드가 많았다. EJB에 너무 의존적이고 종속적인 개발이 되면서 JAVA의 장점(객체지향)을 살리기 어려웠다.

 

이러한 문제를 해결하기 위한 프레임워크가 Spring이다. (개발자들의 봄) Spring은 초기 세팅만 잘 해두면 EJB와 거의 동일한 기능을 제공하면서 비즈니스 로직과 어플리케이션 기술의 분리도 가능하다.

 

그런데 스프링 생태계가 점점 커지고 기능들도 많아졌다. 다양한 오픈소스의 등장으로 외부 라이브러리를 함께 사용할 일이 많아지며 초기에 직접 세팅해야하는 설정이 복잡하고 많아졌다. 이를 보완한 것이 Spring Boot이다.

 

Spring Boot

Spring Boot를 사용하면 스프링 기반의 어플리케이션을 쉽게 만들 수 있다. Spring을 이용한 개발에 필요한 복잡한 설정을 Spring Boot가 해주며 개발자는 즉시 어플리케이션 개발 시작이 가능하다. (Spring Boot 단독 사용은 불가하며 스프링 프레임워크와 항상 같이 사용해야한다.)

 

 

Spring Boot의 편의성

1. 내장 서버

2. 편리한 의존성 & 권장 버전 관리

3. 자동 설정

 

내장 서버

Spring Boot 이전에는 웹 애플리케이션을 배포하려고 하면 여러 단계를 거쳐야 했다. Spring Boot는 이를 보완해 톰캣을 라이브러리로 포함하는 내장 톰캣 기능을 제공한다. war가 아닌 jar로 패키징해서 main 메서드로 바로 실행이 가능해졌다.

 

편리한 의존성 & 권장 버전 관리

이전 dependencies를 관리할 때 어떤 라이브러리를 사용할지 고르고, 각 라이브러리의 버전도 하나하나 골라줘야했다. 어떤 버전이 호환이 잘 되는지 넣어보거나 검색해 직접 알아내야하는 어려움도 있었다. 반면 Spring Boot는 플러그인(spring.dependency-management)을 추가하면 라이브러리 버전을 자동으로 관리해주기 때문에 버전 작성을 생략할 수 있다. 또한 기본 라이브러리 묶음을 제공해 한 번에 가져올 수 있게 됐다.

 

자동 설정

그 외에도 다양한 편의기능을 제공하는데, 가장 쉽게 찾을 수 있는 예시가 JdbcTemplate이다. JdbcTemplate를 Bean으로 직접 등록한 적 없음에도 Spring Boot가 자동으로 등록해 사용할 수 있게 해주고 있다. 이를 Spring Boot의 자동 구성이라고 하며 일반적으로 자주 사용하는 수 많은 빈들을 자동으로 등록해주는 기능이다. JdbcTemplate 외에도 DataSource, TransactionManager 등이 있다.

 

Spring Boot에서 자동 등록해주는 Bean은 spring-boot-autoconfigure라는 모듈을 통해 확인할 수 있다. JdbcTemplate는 jdbc 폴더 안에 들어있는데, 파일을 열어 확인해보면 @AutoConfiguration를 통해 자동구성되고 있다는 것을 확인할 수 있다. import한 것을 보면 @Configuration과 Bean을 통해 빈으로 등록한 과정을 볼 수 있다. 

 

@SpringBootApplication을 열어보면 @EnableAutoConfiguration을 확인할 수 있는데 Spring의 자동 구성을 활성화시키는 어노테이션이다. 이 어노테이션은 AutoConfigurationImportSelector를 import해주는데, importSelector로 설정 정보 대상을 동적으로 선택해 자동 설정에 대한 동적 import를 실행한다. 그럼 해당 파일의 설정 정보가 스프링 컨테이너에 자동으로 등록된다.