본문 바로가기

개발/Concept

[Concept] Spring과 Spring Boot의 차이점?

반응형

 

스프링 프레임워크는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 한다.

동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.

스프링이 사용되기 이전에는 초기 기업에서 EJB(Enterprise Java Bean) 방식의 기술을 이용해서

Web Application 을 서비스했습니다.

 

EJB를 보완한 Spring Framework의 특징

  1. 가볍고 간편한 구조: Spring은 EJB에 비해 가볍고 간편한 구조를 가지고 있습니다. 불필요한 복잡성이 없으며, 설정이 간단하게 이루어져 개발 생산성을 높일 수 있습니다.
  2. 좋은 유연성과 확장성: Spring은 자체 컨테이너를 사용하며, 이는 EJB 컨테이너보다 더 빠르고 가볍습니다. 또한, Spring은 다양한 확장 기능과 모듈을 제공하여 개발자가 필요한 기능을 선택적으로 사용할 수 있습니다.
  3. 좋은 통합 지원: Spring은 다양한 기술과의 통합을 지원하는데, 이는 EJB에 비해 훨씬 자유로운 개발을 가능케 합니다. 데이터베이스, 웹 프레임워크, 보안, 메시징 등 다양한 영역에서 유연한 통합이 가능합니다.
  4. AOP(Aspect-Oriented Programming) 지원: Spring은 AOP를 지원하여 관심사의 분리를 통해 코드를 더 모듈화하고 유지보수성을 향상시킬 수 있습니다. 이는 EJB에서는 구현하기가 어려웠던 측면 지향 프로그래밍의 장점을 가져다 줍니다.
  5. POJO(Plain Old Java Object) 지향: Spring은 POJO를 중심으로 하는 경량 프레임워크입니다. 이는 EJB에서의 복잡한 인터페이스와 상속 구조보다 간단한 코드 작성을 가능케 하고, 객체 간의 결합도를 낮출 수 있습니다.
  6. 높은 커뮤니티 지원: Spring은 활발한 오픈 소스 커뮤니티를 보유하고 있어서, 다양한 문제에 대한 해결책과 풍부한 자료를 얻을 수 있습니다. 이는 EJB보다 더 빠른 문제 해결과 지원을 의미합니다.
  7. 테스트 용이성: Spring은 테스트 주도 개발(Test-Driven Development, TDD)을 촉진하도록 설계되어 있습니다. EJB보다 테스트 케이스 작성이 쉽고, 유닛 테스트와 통합 테스트에 대한 편리한 지원을 제공합니다.
  8. IOC(Inversion of Control) 제어의 역전 : 스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공합니다. r개발자는 객체의 생성과 관계 설정을 스프링에 위임할 수 있으며, 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입합니다.

 

EJB의 단점을 보완한 Spring Framework였지만.

단점이 있었습니다.

 

  1. 초기 설정의 복잡함: 다양한 설정 파일과 설정 코드가 필요했습니다.  
  2. 높은 학습 난이도 : 스프링은 다른 프레임워크에 비해 학습이 필요한 부분이 많습니다. 다양한 개념과 기능을 이해하고 사용하기 위해 시간과 노력이 필요할 수 있습니다.
  3. 의존성 관리 문제 : 의존성 주입(Dependency Injection)을 구현하기 위해 XML 설정 파일에 많은 수의 빈(Bean)을 등록해야 합니다. 이는 코드의 가독성을 떨어뜨리고, 의존성 관리가 어려워질 수 있습니다
  4. 별도 WAS 서버 구성의 번거로움 : 스프링을 웹상에서 사용하기 위해서는 별도의 Web Application Server(WAS)를 설치하고, 설정해야 합니다.

 

이러한 단점들을 보완한 Spring의 Framework로 Spring Boot가 개발 되었습니다.

 

  1. 초기 설정의 단순화: Spring Framework를 사용하는 프로젝트는 다양한 설정 파일과 설정 코드가 필요했습니다. Spring Boot는 자동 구성(auto-configuration)을 통해 초기 설정을 크게 단순화했습니다. 개발자가 불필요한 설정을 최소화하고 빠르게 개발을 시작할 수 있도록 했습니다.
  2. 스타터(Starter)의 도입: Spring Boot는 스타터를 제공하여 특정 기술 스택이나 라이브러리를 사용하는 데 필요한 의존성들을 사전에 정의해둔 패키지로 제공합니다. 개발자는 필요한 스타터를 선택하여 추가함으로써 빠르게 프로젝트에 필요한 환경을 구성할 수 있습니다.
  3. 내장 서버의 통합: Spring Boot는 내장형 서버(Embedded Server)를 기본적으로 제공합니다. 이로써 별도의 웹 서버를 설치하거나 구성할 필요가 없어지며, 애플리케이션의 배포와 실행이 간편해졌습니다.
  4. 의존성 관리의 간소화: Spring Boot는 의존성 관리를 자동화하여 프로젝트에서 필요한 라이브러리들을 쉽게 추가하고 관리할 수 있습니다. Maven이나 Gradle과 같은 빌드 도구를 사용할 때 높은 편리성을 제공합니다.
  5. 통합된 설정 및 프로퍼티 파일: Spring Boot는 간편한 설정을 통합하여 제공하고, application.properties 또는 application.yml 파일을 통해 애플리케이션의 설정을 관리할 수 있습니다.
  6. 단일 프로젝트로 다양한 기술 통합: Spring Boot는 다양한 기술과 라이브러리를 통합하는 데 중점을 두고 있습니다. 예를 들어, Spring Data, Spring Security, Spring Batch 등이 기본적으로 포함되어 있어 프로젝트에서 필요한 다양한 기능을 쉽게 사용할 수 있습니다.
  7. 통합 테스트의 간편성: 내장 서버를 활용하므로 Spring Boot는 통합 테스트를 더욱 용이하게 만들어줍니다. 특히 @SpringBootTest 애노테이션을 사용하면 필요한 설정을 자동으로 로드하고 테스트 환경을 쉽게 구성할 수 있습니다.

 

EJB에서 단점들을 보완하여 Spring Framework가 개발되고 그 이 후 Spring Boot가 나왔는데.

Spring Boot는 이러한 특징들을 통해 개발자들에게 스프링 기반의 애플리케이션을 빠르게 구축하고 유지보수하기 쉽게 만들어줍니다. 이는 복잡한 설정과 세팅에 대한 부담을 줄이고, 생산성을 높이는 데 기여했습니다.

반응형

'개발 > Concept' 카테고리의 다른 글

[ Concept ] HA( High Availability )란?  (1) 2023.11.27
[Concept] ERD란?  (0) 2023.11.24
[Concept] Tomcat이란?  (0) 2023.11.23
[Concept] WAS란?  (0) 2023.11.22
[ Concept ] 서버에서 디스크 파티션을 나누는 이유  (0) 2023.11.06