Server/Spring (Boot & Framework)

[Spring] Spring Framework vs Spring Boot

ooeunz 2019. 11. 15. 10:24
반응형

spring이란?

Spring이란 과거 EJB를 대체하는 framework로써 세상에 등장했다. Pivotal Software(스프링팀)은 Enterprise Framework 시대를 겨울(winter)로 정의하고 이제 봄(spring)이 왔다는 의미로 이름을 지었다. EJB에 비해서 많은 부분 발전했지만, spring 역시 "스프링은 설정이 반이다."라는 말이 있을 정도로 설정하는 것에 어려움이 많았다. 그럼에도 spring이 대표적인 java framework로 자리 잡게 된 것은 아래와 같은 강력한 장점을 지니고 있기 때문이었다.

 

  • 경량 컨테이너
  • IoC(Invertion of Control: 제어 역행)
  • Di(Dependency Injection: 의존성 주입)
  • AOP(Aspect-Oriented Programming: 관점지향 프로그래밍)

 

스프링팀은 이와 같은 스프링의 단점을 해결하고자 새로운 프로젝트를 시작하게 되었다. 그리고 그 프로젝트의 이름은 바로 Spring Boot이다. spring boot는 환경 설정을 최소화해주어 (사용자가 해야 할 부분을 대부분 spring boot가 해준다.) 개발자가 비즈니스 로직에 집중할 수 있도록 도와주어 생산성을 크게 향상한다.

 

 


Spring Boot

Spring Boot는 Spring framework와 몇 가지면에서 차이가 있다.

  1. Embed Tomcat을 사용하기 때문에, (Spring Boot 내부에 Tomcat이 포함되어있다.) 따로 Tomcat을 설치하거나 매번 버전을 관리해 주어야 하는 수고로움을 덜어준다.
  2. starter을 통한 dependency 자동화 :
    아마 Spring 유저들이 가장 열광한 기능이 아닐까 싶다. 과거 Spring framework에서는 각각의 dependency들의 호환되는 버전을 일일이 맞추어 주어야 했고, 때문에 하나의 버전을 올리고자 하면 다른 dependeny에 까지 영향을 미쳐 version관리에 어려움이 많았다. 하지만, 이제 starter가 대부분의 dependency를 관리해주기 때문에 이러한 걱정을 많이 덜게 되었다.
  3. XML설정을 하지 않아도 된다.
  4. jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다.
  5. Spring Actuaor를 이용한 애플리케이션의 모니터링과 관리를 제공한다.

 

하지만 간혹 Spring Boot가 Spring framework와 전혀 다른 새로운 기술이라고 오해하는 사람들이 있다. 그래서 spring에 관한 공부를 spring boot로 시작하는 경우가 종종 있는데, 이는 잘못된 사실이다. 아마 spring boot에 관하여 서치를 하다 보면 "스프링 부트 공부하기 전에 스프링부터 공부하세요"라는 말을 종종 볼 수 있었을 것이다. 왜냐하면 스프링 부트는 스프링 프레임워크라는 큰 틀에 속하는 도구이기 때문이다. 때문에 반드시 spring framework를 먼저 공부하는 것이 정도는 아니지만, 둘의 관계를 이해하고 공부하는 것이 중요하다.

 

 

 


Spring Boot starter란?

앞서 spring boot의 장점 중에 starter를 통한 dependency 자동화에 대하여 언급하였다. starter란 무엇일까?

starter란 특정 목적을 달성하기 위한 의존성 그룹이라고 생각하면 이해하기 쉽다. starter는 마치 npm처럼 간편하게 dependency를 제공해주는데, 만약 우리가 JPA가 필요하다면 prom.xml(메이븐)이나 build.gradle(그레이들)에 'spring-boot-starter-data-jpa'만 추가해주면 spring boot가 그에 필요한 라이브러리들을 알아서 받아온다.

 

spring-boot-starter-*

 

starter의 명명 규칙은 위와 같다. JPA예시에서 알 수 있듯이 *부분에 원하는 스타터명을 명시하면 된다. 명명 규칙을 알면 손쉽게 원하는 라이브러리를 import 할 수 있다.

 

반응형