본문 바로가기
Back end/Spring

[Spring] Spring vs Spring Boot

by 더 이프 2023. 7. 24.
728x90

목차

    1. Spring

    ■ Spring이란?

    스프링은 엔터프라이즈용 자바 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크입니다. 대표적인 특징은 의존성 주입, 관심 지향 프로그래밍 및 데이터 액세스와 같은 다양한 측면을 처리하여 개발 프로세스의 단순화가 가능합니다.

    ■ POJO(Plain Old Java Objects) 프로그래밍 지향

    • POJO는 순수 Java만을 통해서 생성한 객체를 의미
    • 개발자가 복잡한 상속이나 특정 인터페이스 구현 없이 간단하게 재사용 가능하며 유연하게 확장 및 변화 가능
    • 코드가 단순해져 쉬운 테스트 가능

     IoC / DI(Inversion of Control / Dependency Injection)

    • IoC는 객체 생성 및 의존성 관리에 대한 책임을 애플리케이션 코드에서 외부 프레임 워크 또는 컨테이너로 전환하여 소프트웨어 애플리케이션의 제어 흐름을 역전시키는 설계 원칙
    • DI는 애플리케이션 코드 내에서 하드코딩하는 대신 런타임에 클래스 또는 객체의 의존성을 주입하여 IoC를 구현하는 기술
    • 스프링에서 IoC 및 DI는 구성 요소를 분리하고 코드 모듈성을 촉진하는데 사용
    • 스프링의 IoC 컨테이너는 객체의 수명 주기를 관리하고 필요한 의존성을 주입하여 개발자가 객체 생성 및 관리에 대한 걱정 없이 비즈니스 로직 작성에 집중 가능
    • 유지 관리가 쉽고 더 유연한 테스트 코드 생성 가능

     AOP(Aspect-Oriented Programming)

    • 애플리케이션을 개발할 때에 구현해야 하는 기능들은 크게 공통 관심사항과 핵심 관심 사항으로 분류
    • 핵심 관심 사항은 애플리케이션의 핵심 기능과 관련된 관심 사항
    • 공통 관심 사항은 모든 핵심 관심 사항에 공통적으로 적용되는 관심 사항
    • 공통 관심 사항은 대표적으로 로깅, 보안, 캐싱, 트랜잭션 관리와 같은 기능
    • AOP는 응용프로그램의 주요 비즈니스 로직에서 공통 관심 사항을 분리할 수 있는 프로그래밍 패러다임

     PSA(Portable Service Abstraction)

    • PSA는 다양한 환경과 인프라 구성요소에 걸쳐 일관된 프로그래밍 모델을 제공하는 것을 목표로 하는 설계 원칙
    • 스프링의 PSA는 일관된 API 및 구성 모델을 제공하여 다양한 데이터 소스, 메시징 시스템 및 캐싱 솔루션과의 통합을 단순화
    • 개발자는 전체 애플리케이션을 리팩토링하지 않고도 다른 기술 간에 쉽게 전환하거나 새 기술로 업그레이드 가능
    • 유지 관리 노력이 줄어들고 코드 이식성이 향상

     

    2. Spring Boot

    ■ Spring Boot란?

    스프링 부트는 스프링 프레임워크 위에 구축된 오픈 소스 자바 기반 프레임워크로 스프링으로 애플리케이션을 만들 때에 필요한 설정을 간편하게 처리해주는 별도의 프레임워크입니다.

     자동 구성

    • 스프링 부트는 애플리케이션에 있는 dependencies를 기반으로 구성 요소와 설정을 자동으로 구성
    • 스프링 부트와 연관이 있는 dependency는 자동으로 버전을 맞춰서 구성
    • 개발자가 수동으로 구성할 필요 없이 클래스 경로를 스캔하고 데이터 소스, 보안 및 캐싱과 같은 필수 구성 요소를 구성

    내장 웹 서버

    • Tomcat, Jetty 및 Undertow와 같은 임베디드 웹 서버에 대하여 기본 제공
    • 개발자는 외부 웹 서버나 컨테이너 없이 쉽게 배포하고 실행할 수 있는 독립형 어플리케이션 제작 가능

    Spring Boot CLI 및 Spring Initializr

    • 스프링 애플리케이션을 빠르게 만들고 실행하기 위한 명령줄 인터페이스(CLI)를 제공
    • Spring Initializr는 개발자가 원하는 dependency와 함께 사용자 지정이 가능한 프로젝트 템플릿을 생성할 수 있도록 하는 웹 기반 서비스