본문 바로가기
Spring

[Spring] Spring / Spring Boot 비교

by 도전하는 린치핀 2024. 3. 27.

1. Spring Framework

스프링 프레임워크(Spring Framework)는 Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로 간단히 스프링(Spring)이라 한다.

스프링은 순수 자바 객체(POJO)만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적으로 개발된 프레임워크(Framework)이다.

 

1-1.  Spring Framework 특징

Spring Framework는 아래의 네가지 특징을 가진다.

1. 제어 역전( Invesion of Control, IoC ) 

스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 프레임워크에서 IoC 컨테이너를 제공한다. IoC 컨테이너를 통해 개발자는 객체의 생성과 관계 설정 및 생명 주기 관리와 의존성 주입을 프레임워크가 대신 해주고 Servlet이나 Bean과 같은 코드를 직접 작성하지 않고 프레임워크 내에서 자동으로 수행된다.

제어의 역전이라는 말이 어려울 수 있는데, 기존에는 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해줘야 했지만, 스프링 프레임워크가 대신해준다는 의미다.

2. 의존성 주입( Dependency Injection, DI )

스프링은 의존성 주입을 통해 객체 간의 관계를 설정합니다. 의존성 주입은 애플리케이션의 결합도를 낮추고 코드의 재사용성과 유연성과 단위 테스트 용이성을 향상시킵니다.

3. AOP(관점 지향 프로그래밍)

 스프링은 AOP를 지원하여 애플리케이션의 핵심 비즈니스 로직과 부가적인 로직(로깅, 트랜잭션 관리 등)을 분리하여 모듈화할 수 있다.

이를 통해 핵심 비즈니스 로직마다 들어있는 공통적인 부가적인 로직을 모듈화하여 재사용성을 향상 시킬 수 있다.

4.웹 개발 지원

스프링은 웹 애플리케이션 개발을 위한 다양한 기능과 웹 프레젠테이션 계층을 제공합니다. 스프링 MVC는 유연하고 확장 가능한 웹 애플리케이션을 개발할 수 있는 MVC(Model-View-Controller) 아키텍처를 지원합니다.

 

 

하지만 위와같은 장점을 지닌 스프링 프레임워크도 아래와 같은 단점이 있었다.

 

  • 설정의 복잡성

스프링은 강력한 기능을 제공하기 위해 많은 설정과 구성이 필요하다. 이는 초기 설정의 복잡성을 증가시킬 수 있고, 초보자에게는 어렵게 느껴지고, 개발자들이 애플리케이션 컨텍스트 설정, 빈 정의, 다양한 컴포넌트 구성 등을 위해 많은 설정 코드를 직접 작성해야하는 번거로움이 있었다.

  • 의존성 관리 문제

스프링 프레임워크에서는 여러 의존성과 버전을 관리하는 것이 복잡하였다. 스프링 레거시에서는 의존성 주입(Dependency Injection)을 구현하기 위해 XML 설정 파일에 많은 수의 빈(Bean)을 등록하는 것은 코드의 가독성을 떨어뜨리고, 의존성 관리가 어려워질 수 있습니다

 

  • 별도 WAS 서버 구성의 번거로움

스프링은 WAR(Web Application Archive)를 생성하기 때문에 웹상에서 사용하기 위해서는 별도의 Web Application Server(WAS)가 필요했다. 또한, 애플리케이션을 서비스하기 위해서 별도의 서버에 수동으로 배포해야 하는 번거로움이 있었다.

 

이러한 단점들을 보안하기 위해 Spring boot가 나오게 되었다.

 

2. Spring Boot

스프링 부트(Spring Boot)는 스프링의 단점들을 보완하기 위해 개발된 스프링의 프레임워크로 개발자들이 더 쉽고 빠르게 스프링 애플리케이션을 개발하도록 도와주기 위해 개발되었습니다. 

 

개발 초기에 "스프링 부트 스타터"라는 프로젝트명으로 시작되었는데요. 이름에서도 느껴지듯이 간단한 설정과 구성을 통해 스프링 애플리케이션의 개발을 빠르게 시작할 수 있도록 도와주는 프로젝트였습니다. 시간이 흘러 프로젝트명은 "스프링 부트"로 변경되었고, 2014년 4월에 공식적으로 스프링 부트1.0이 출시되었습니다.

 

스프링 부트는 기본적인 설정과 재사용이 많은 코드 작성을 최소화하고, 자동 설정과 컨벤션을 통해 개발자들이 빠르게 어플리케이션을 개발할 수 있도록 지원하는 스프링 프레임워크이다.

 

2-1. Spring Boot 특징

 

1. 의존성 관리

Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 해줘야 한다. 하지만, Spring Boot Framework의 경우 dependency와 버전 관리도 자동으로 해준다.

빌드 툴을 Gradle을 사용하는 경우 위와 같이 build.gradle파일에 dependency를 추가해주면 Spring Boot로 웹 개발을 할 때 필요한 모든 dependency를 자동으로 추가하고 관리해준다. 따라서 스프링 부트에서 제공하는 의존성 세트를 통해 개발자는 버전 충돌이나 복잡한 의존성 설정에 대해 걱정하지 않고 개발에만 집중할 수 있다.

 

2. 강력한 Configuration

Spring Framework의 경우 configuration설정을 할 때도 매우 길고, 모든 어노테이션 및 빈 등록 등을 설정해 줘야 한다.

하지만, Spring Boot Framework는 application.properties파일이나 application.yml파일에 설정하면 자동으로 Spring Boot Framework가 모든것을 해준다.

또한, Spring Frame와 달리 Spring Boot에는 AutoConfiguration이라는 것이 있습니다.

Spring Boot로 실행할 수 있는 애플리케이션을 만들기 시작하면 클래스에 @SpringBootApplication이라는 어노테이션을 확인할 수 있습니다.

이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행됩니다.

3. 내장 서버

스프링 부트는 내장된 서버(내장 Tomcat, Jetty, Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행할 수 있다.

배포를 위해 War 파일을 생성해서 Tomcat에 배포할 필요 없으며, JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션을 실행할 수 있습니다.

이는 애플리케이션의 배포와 관리를 간편하게 만들어 줍니다.

 

 

3. 정리

기본적으로 SpringBoot가 Spring에서 단점을 보완하여 더욱 편리한 프레임워크를 위해 생긴 것이기 때문에 공통점과 차이점을 나누면 공톰점은 Spring의 특징이고, 차이점은 Spring의 단점이라고 생각할 수 있다. 

3-1.  Spring / SpringBoot 공통점

(1) IoC

(2) DI

 

(3) AOP

 

(4) 웹개발 프레임 워크

 

3-2. Spring / SpringBoot 차이점

 Spring

  • WAR (Web Application Archive) 생성 
    • Servlet Container 에 배치할 수 있는 웹 애플리케이션 압축 포맷
  • 외장 톰캣 필요 (의존성)
    • 이미 구동중인 서버에 어플리케이션을 배포한다 (WAR 를 배포한다)

Spring Boot

  • JAR (Java Archive) 생성
  • : JRE 로 바로 실행 가능한 자바 어플리케이션 압축 포맷
  • 내장 톰캣 정의
    • WAS 서버를 구동시킴과 동시에 어플리케이션을 배포한다.
  • 언제 어디서나 같은 환경에서 스프링 부트 배포