꾸물꾸물 졔의 개발공부
[Spring] Spring vs Springboot 차이점 본문
Spring Framework
스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 Spring이라고 불린다. 즉, 스프링은 자바 기반의 웹 애플리케이션을 만들 수 있는, 포괄적인 인프라를 지원해주는 프레임워크이다.
Python을 이용한 Django, Javascript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java를 사용한 Spring 을 사용하여 웹 서비스를 만들 수 있는 것이다.
Spring은 자바 객체와 라이브러리들을 관리해주며, Tomcat과 같은 WAS가 내장되어 있어 자바 웹 애플리케이션을 자체적으로 구동할 수 있다. 또한, 경량 컨테이너로서 자바 객체를 Spring 내에서 직접 관리하며, 객체의 생성 및 소멸과 같은 생명주기를 제어하고 필요한 객체를 Spring 컨테이너에서 가져다 쓴다.
Spring의 주요 특징
1. 의존성 주입 (DI, Dependency Injection)
- 어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접, new 연산자를 사용해서, 생성하는 것이 아니라 객체를 외부(=Spring 컨테이너)에서 생성하고 관리하며 주체에게 주입시켜주는 방식이다.
- 직접 생성하는 경우에는 의존성이 높아져 강한 결합도를 가진다.
- DI를 통해, 주체와 객체의 의존도를 줄일 수 있다, 느슨한 결합.
2. 제어의 역전 (IOC, Inversion Of Control)
- 일반적으로 프로그래밍을 할 때에는 각 객체 내에서 새로운 객체를 생성하고 호출하였다. 즉, 모든 작업을 개발자가 직접 만들어내고 제어하는 구조
- 하지만, IOC로 객체의 제어권을 Spring에게 맡긴다. 개발자가 직접 객체를 생성하지 않고, 객체의 생명주기를 제어하는 주체는 Spring이 된다. 제어권을 다른 주체에게 넘기는 제어의 역전, IOC 라고 한다.
- 즉, Spring에서의 IOC 란 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 → 의존성 객체의 메소드 호출 구조이다. 스프링에서는 모든 의존성 객체를 Spring이 컴파일 되고 실행 될 때 만들어주고 컨테이너에서 관리하며, 필요한 곳에 주입해준다.
이러한 특징으로 객체간의 의존도를 낮추고, 강한 결합이 아닌 느슨한 결합 (Loose Coupling) 구조를 가질 수 있다.
Spring Boot (스프링부트)
스프링 부트(Spring Boot)는 스프링을 더 쉽게 이용하기 위한 도구라고 볼 수 있다. 스프링 프레임워크는 기능이 많은 만큼 환경설정이 복잡한 편이다. 개발할 때 초기세팅이 많이 필요하고, 그로인해 사용자 입장에선 많은 복잡한 문제를 직면하게 된다. 반면에 Spring Boot는 Spring Framework을 설정하는데 필요한 복잡한 요소를 자동화하여, 개발자 입장에서는 더 빠르고 효율적으로 프로그램 개발이 가능 하도록 지원한다.
Spring Framework 와 차이점
1. Embed Tomcat
- Embed Tomcat, 즉 Spring Boot 내부에 Tomcat이 포함되어 있기 때문에 따로 Tomcat을 설치하거나 버전관리 등의 작업을 하지 않아도 된다.
2. Starter 를 사용한 dependency 자동화
- Spring 프레임워크를 사용하게 되면 각각의 dependency에 맞춰 호환되는 버전을 일일이 맞춰야 한다. 만약 하나의 버전을 변경하게 되면 다른 dependency 까지 영향을 미쳐 version 관리에 어려움이 있다.
- Spring Boot 는 starter가 대부분의 dependency를 관리해주기 때문에 이러한 걱정을 할 필요가 없다. (최고)
3. xml 설정 불필요
4. jar file
- 자바 옵션만으로도 손쉽게 배포가 가능
❔ Spring Boot Starter 란
Spring Boot 와 Spring 프레임워크의 차이점이자 장점 중에 starter를 사용한 dependency 자동화가 있다.
starter란 필요한 기능이나 목적을 위한 의존성 그룹이다. 마치 npm처럼 간편하고 통합적으로 dependency를 제공해주는데, 예를 들어 JPA가 필요할 때 (maven의 pom.xml 또는 gradle의 build.gradle 에) 'spring-boot-starter-data-jpa' 만 추가해준다면 Spring Boot가 그에 필요한 라이브러리를 알아서 받아온다.
spring-boot-starter-()
starter 를 위한 명명규칙은 다음과 같다. JPA 처럼 () 부분에 필요한 starter명을 명시한다면, 손쉽게 원하는 라이브러리를 import 하여 사용할 수 있다.
👍결론
Spring Boot는 Spring의 복잡한 설정을 자동화 시켜준, Spring 자체의 확장 버전이다. 개발, 테스트, 배포가 Spring Framework에 비해서 훨~씬 간편해지는 Framework이다. 특정 프로젝트에서 필수적인 종속성 구성이 필요하다면 Spring, 일반적인 종속성 구성으로 구현이 가능하다면 Spring Boot로도 편하게 개발하며 충분한 결과를 얻어낼 수 있다.
'SPRING' 카테고리의 다른 글
[Spring] Spring WebFlux: Netty (0) | 2023.05.03 |
---|---|
[Spring] WebFlux란 / Spring MVC와 간단 비교 (0) | 2023.05.02 |
[Spring JPA] 패러다임의 불일치 (0) | 2023.03.27 |
[Spring JPA] JPA란 (0) | 2023.03.23 |
[Spring] 스프링 IOC (Inversion of Control) (0) | 2023.03.14 |