Java

Spring, Spring-Boot 차이점

dong99 2024. 4. 8. 20:31

오늘은 스프링과 스프링 부트의 차이점을 알아보았습니다.

 

우선 Spring frameWork란 Java 기반의 개발을 지원하는 오픈소스 어플리케이션 프레임워크로 보통 스프링(Spring)이라고 불립니다.

스프링이 사용되기 전에는 EJB(Enterprise Java Bean)방식의 기술을 사용했는데 이 기술의 단점은 특정 회사의 컨테이너(Oracle,Ibm 등)가 없이는 기술이 구현이 어렵고 프로그래밍 모델이 복잡하며, 가장 큰 단점은 테스트가 거의 불가능했습니다.

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

 

그런 Spring의 가장 큰 특징은 4가지로 꼽을 수 있는데

 

1. 제어 역전

스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공함으로 개발자는 객체의 생성과 관계 설정을 스프링에 위임할 수 있고 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입합니다.

 

2. 의존성 주입

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

 

3. 웹 개발 지원

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

 

4. AOP(관전 지향 프로그래밍) 지원

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

 

이러한 스프링에도 단점이 존재하는데

설정의 복잡성 -> 강력한 기능을 사용하기위하여 많은 설정과 구성이 필요하고 개발자들로 하여금 많은 코드를 작성하게 합니다.

 

높은 초기 학습 난이도 -> 다른 프레임워크에 비해 학습이 필요한 부분들이 많고 개념과 기능을 이해하고 사용하려면 많은 시간과 노력이 필요합니다.

 

의존성 관리 문제 -> 스프링 레거시에서는 의존성 주입 (D.I)을 구현하기 위해 XML 설정 파일에 많은 빈(Bean)을 등록해야함으로 가독성을 떨어트리고 관리가 어렵습니다.

 

별도 WAS 서버 구성의 번거러움 -> 스프링을 웹에서 사용하려면 별도의 Web Application Server(WAS)를 설치하고 설정해야하고 서비스를 위해서는 별도의 서버에 수동으로 배포해야 하는 번거로움이 있습니다.

이러한 문제점들을 해결하기 위해 Spring Boot가 개발되었습니다.

 

스프링 부트는 이러한 문제점들을 해결하여 많은 장점들이 있는데

 

1. 간결한 설정 -> 더이상 XML 설정을 하지않고도 사용을 할 수 있으며 이로인해 개발에 더 집중할수 있습니다.

2. 내장 서버 -> 서버가 내장되어 있기에 별도의 서버 설정 없이 애플리케이션을 실행할 수 있으며 별도의 War파일을 생성해서 배포할 필요 없으며 Jar파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션을 실행할 수 있습니다.

3, 운영 편의성 -> 스프링 부트는 애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공합니다. 이를 통해 애플리케이션의 관리가 편리해지고 안정성이 향상됩니다.

 

이러한 장점들을 통해 스프링 부트는 스프링의 장점은 그대로 계승하면서, 기존의 문제가 되는 부분을 보완하여 개발 생산성 및 서비스 운영, 성능을 모두 해결했습니다.