Spring과 Spring Boot는 둘 다 Java를 위한 강력한 프레임워크입니다. 하지만 두 프레임워크는 서로 다른 목적과 기능을 가지고 있습니다. 이들의 주요 차이점을 설명하겠습니다.
- 기본 설정(Convention over Configuration):
- Spring Boot: Spring Boot는 'convention over configuration' 원칙을 따릅니다. 즉, 기본 설정에 많은 것이 포함되어 있어 개발자가 빠르고 쉽게 애플리케이션을 개발할 수 있게 도와줍니다. 예를 들어, Spring Boot는 내장된 톰캣 서버, 기본적인 구성, 스타터 키트 등을 제공하여 개발자가 초기 설정에 드는 시간과 노력을 줄일 수 있게 합니다.
- Spring: 반면, Spring 프레임워크는 많은 설정과 구성이 필요합니다. 개발자가 원하는 대로 모든 것을 세밀하게 설정해야 합니다. 이는 더 많은 제어를 제공하지만, 동시에 더 많은 작업을 요구합니다.
- 자동 구성(Auto-Configuration):
- Spring Boot: 자동 구성을 통해 의존성에 기반하여 필요한 빈(Bean)들을 자동으로 설정합니다. 이는 개발 속도를 높이고, 구성 오류를 줄이는 데 도움이 됩니다.
- Spring: Spring에서는 모든 빈을 수동으로 설정하고 관리해야 합니다.
- 내장 서버(Embedded Server):
- Spring Boot: 내장 HTTP 서버(예: 톰캣, 제티)를 제공하여 별도의 서버 설치 없이 바로 애플리케이션을 실행할 수 있습니다.
- Spring: 별도의 서버에 애플리케이션을 배포해야 하며, 이를 위한 추가 설정이 필요합니다.
- 프로젝트 초기화(Project Initialization):
- Spring Boot: Spring Initializr와 같은 도구를 사용하여 프로젝트를 쉽고 빠르게 시작할 수 있습니다. 이러한 도구는 필요한 의존성과 구성을 자동으로 설정합니다.
- Spring: 프로젝트를 수동으로 설정하고 초기화해야 합니다.
- 마이크로서비스(Microservices):
- Spring Boot: 마이크로서비스 아키텍처를 쉽게 구현할 수 있도록 설계되었습니다. 이는 클라우드 환경과 잘 맞아 떨어지며, 빠른 개발과 배포를 지원합니다.
- Spring: 마이크로서비스를 구현할 수 있지만, 추가적인 설정과 구성이 필요합니다.
요약하자면, Spring Boot는 Spring 프레임워크 위에 구축되어 더 쉽고 빠른 개발을 지원합니다. Spring Boot는 Spring의 강력한 기능을 그대로 사용하면서도, 더 적은 설정과 구성으로 빠르게 시작할 수 있는 환경을 제공합니다. 반면, Spring 프레임워크는 더 많은 제어와 유연성을 제공하지만, 이에 따른 추가적인 설정 작업이 필요합니다.
Bean 이란?
Spring에서 'Bean'은 Spring IoC(Inversion of Control) 컨테이너에 의해 관리되는 객체를 의미합니다. Spring 프레임워크에서 객체는 단순한 Java 객체(POJO, Plain Old Java Object)와 다르게, Spring 컨테이너에 의해 생명주기와 구성이 관리되는 'Bean'으로 특별하게 취급됩니다.
개발자가 객체의 생명주기(생성과 반환, 즉 메모리에 올라갔다가 메모리에서 내려오는 것)에 관여하지 않고, Spring IoC 컨테이너에게 전부 다 맡긴다는 의미로 받아들였다.
Q. 그럼 개발자가 객체의 생성, 그리고 반환을 직접 설정해주지 않고 Spring에게 전부 다 맡긴다는 거야?
A. 네, 맞습니다. Spring 프레임워크에서는 개발자가 객체의 생성 및 반환을 직접 설정하거나 관리하는 것이 아니라, Spring IoC 컨테이너에 이러한 역할을 맡기는 원칙을 따릅니다. 이것이 Spring의 제어의 역전 (IoC) 원칙입니다.
아래의 과정을 통해 개발자는 객체의 생성 및 반환을 Spring에게 맡깁니다:
- Bean 정의: 개발자는 어떤 클래스가 Spring Bean으로 사용될 것인지를 설정 파일(예: XML, JavaConfig)에 정의합니다. 이 설정 파일에는 클래스의 경로와 다른 Bean 간의 관계 등이 정의됩니다.
- Spring IoC 컨테이너: Spring IoC 컨테이너가 애플리케이션을 시작할 때, 설정 파일을 읽고 정의된 Bean을 생성하고 관리합니다.
- Bean 주입: 컨테이너는 생성된 Bean을 필요한 곳에 주입합니다. 이 주입은 개발자가 직접 수행하는 것이 아니라 Spring이 자동으로 처리합니다. 주입은 생성자 주입, Setter 주입 등 다양한 방법으로 이루어집니다.
이러한 방식으로 개발자는 객체의 생성과 반환을 직접 설정하거나 관리하지 않고, Spring에게 위임함으로써 코드의 유지보수성과 확장성을 향상시킬 수 있습니다. 또한, Spring은 의존성 주입(Dependency Injection)을 통해 객체 간의 결합도를 낮추고 테스트하기 쉬운 코드를 작성하는 데 도움을 줍니다.
참고 자료
[Spring] Spring Core(2): 의존성 주입(DI), 개념, 방법, 장단점, 생성자 주입을 사용하자!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!