Spring vs. Spring Boot: A Comparison of These Java Frameworks[DZone-JavaZone]
[Spring] Spring 과 Spring Boot[Nathan Kwon]
Spring
은 Java 진영에서 가장 대중적인 동적 웹 개발 프레임워크이다.
Spring
은 아래 세 가지
의존성 주입(DI, Dependency Injection)
,
제어의 역전(IOC, Inversion Of Control)
,
관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)
특성을 이용해 결합도를 낮추는 방식으로 Application을 개발할 수 있다.
Spring
의 환경 설정은 복잡하다.
Transaction Manager
, Hibernate Datasource
, Entity Manager
, Session Factory
...
위 같은 설정에 초기 프로젝트 구축시 많은 어려움이 있다.
Spring Boot
는 최소한의 기능으로 Spring MVC
를 사용하여 손 쉽게 사용하기 위해 등장했다.
Spring Boot makes it easy to create stand-alone,
production-grade Spring based Applications that you can "just run".
https://spring.io/projects/spring-boot
spring-boot-starter
Dependency만 추가해주면 바로 API를 정의하고,
내장 Tomcat으로 Web Application Server를 실행할 수 있다.
또한 스프링 홈페이지의 Spring Initializr.
를 사용하면 바로 실행 가능한 프로젝트를 생성해준다.
실행환경이나 의존성 관리 등의 인프라 관련 등은 신경쓸 필요 없이 바로 개발 할 수 있게 해주는 것이 Spring Boot
의 가장 큰 장점이다.
Spring Boot는 손쉬운 환경 설정을 위해 아래와 같은 방법을 사용했다.
Spring Boot
는 공통적으로 필요한 DispatcherServlet
같은 설정을 Annotation
을 이용하여 자동으로 설정해준다.
Spring Boot
의 main method는 @SpringBootApplication
Annotation을 가지고 있다.
@SpringBootApplication
public class BootApplication {
public static void main(String[] args) {
SpringApplication.run(BootApplication.class, args);
}
}
@SpringBootApplication = @ComponentScan + @configuraion + @EnableAutoConfiguration
해당 @SpringBootApplication
하위에 있는 Annotation
들을 모두 Scanning
하여 자동으로 설정해준다.
또한 Class path
에 있는 jar
를 감지하여 자동으로 구성해준다.
Spring
의 jar
파일이 Class path
에 있는 경우 Spring Boot
는 Dispatcher Servlet
으로 자동 구성한다.
마찬가지 Hibernate
의 jar
파일이 Class path
내에 존재한다면 이를 DataSource
로 자동설정해준다.
Spring Boot
는 spring-boot-starter-web
를 통해 개발에 필요한 종속Dependency를 관리한다.
지금까지 Web Application을 위해 개발자들은 사용하려는 jar, 사용할 jar 버전등을 명시하며 골머리를 앓아왔다.
각각의 jar들의 호환되는 버전들을 찾아가며 일일히 설정해야 했기 때문이다.
Spring MVC, Jackson Databind, Hibernate, Log4j, ...
Spring Boot
와 함께라면 개발자는 그저 Application을 실행만 하면 된다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.2.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>