Spring Framework
순수 자바 객체(Plain Old Java Object)만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적으로 개발된 프레임워크입니다.
개발자가 직접 설정 파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정해야 합니다.
제어 역전 (Inversion of Control)
메서드나 객체의 호출 작업을 개발자가 결정하는 게 아니라 프레임워크에서 제한하는 것으로 스프링 컨테이너에서 Bean 객체를 통해서 프로그램의 제어흐름을 가지고 있는 것으로 제어의 역전이라고 할 수 있습니다.
스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공합니다.
제어 역전의 핵심 목적은 모듈 간의 결합도를 낮추는 것이며, 의존성 주입이 그 방법 중 하나입니다.
의존성 주입 (Dependency Injection)
의존성 주입으로 사용하는 모듈에서 객체를 직접 생성하는 게 아니라 서비스 외부에서 주입시켜주는 방식으로 모듈 간의 결합도를 낮추고 유연성과 테스트 용이성을 높이는 스프링 핵심 기술입니다.
관점 중심 프로그램 (Aspct Oriented Programming)
애플리케이션의 핵심 비즈니스 로직과 부가적인 기능(로깅, 트랜잭션 관리, 모니터링 등)을 분리하여 모듈화 할 수 있습니다.
이식 가능한 서비스 추상화 (Portable Service Abstraction)
스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말합니다.
환경과 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있습니다.
예를 들어 JPA, MyBatis, JDBC 등 어떤 기술에 관계없이 동일하게 데이터베이스에 접근할 수 있습니다.
Spring Boot Framework
스프링 프레임워크를 보다 쉽게 사용할 수 있도록 만든 프레임워크로, 개발자가 설정 파일을 작성할 필요 없이, 프로젝트의 설정과 라이브러리 의존성을 자동으로 처리해 주는 기능을 제공합니다.
의존성 관리 (Dependency Management) 간소화
일반적으로 애플리케이션에서 제공하는 모든 기능에는 여러 기본 의존성이 필요합니다. 특정 버전들에서만 테스트된 의존성을 함께 사용할 때 문제가 생기면, 소위 말하는 '의존성 꼬임(Dependency Whack-a-Mole)'이 발생할 수 있기 때문입니다.
하지만, 스프링 부트에서는 스프링 부트 스타터를 제공해 단일 스타터에 포함된 여러 의존성 안에 들어 있는 각 의존성 내의 여러 라이브러리 버전이 모든 의존성에 맞게 동기화되어 쉽게 의존성을 관리할 수 있습니다.
배포 (Deployment) 간소화
애플리케이션으로 실행 가능한 JAR 파일을 만들 수 있어 배포 작업을 간소화 할 수 있습니다.
자동 설정 (Auto Configuration)
최소한의 설정으로 Spring을 사용할 수 있고, 기본적인 설정을 자동으로 처리하므로 개발자가 XML 등 설정 작업을 하지 않아 애플리케이션 개발에 집중할 수 있습니다.
내장 서버
스프링 부트 자체에 Servlet Container가 내장(Tomcat, Jetty, Undertow)되어 있어 별도의 서버 설정 없이 애플리케이션을 실행할 수 있습니다.
Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우 사용되고, Spring은 애플리케이션을 보다 세밀하게 제어하고자 하는 경우에 사용됩니다.
'생각정리 > Spring' 카테고리의 다른 글
[JPA] 동시성 제어 테스트 코드 (H2) (0) | 2024.04.30 |
---|---|
[JPA] 데이터 조회 (0) | 2024.04.28 |
JUnit5 예외 처리 테스트 (0) | 2024.04.02 |
스프링 의존성 주입 (0) | 2024.03.13 |