관리 메뉴

공부 기록장 💻

[Spring] Spring Boot(스프링 부트)란? 스프링 부트의 개념과 스프링과의 차이, Containerless의 개념 본문

# Tech Studies/Java Spring • Boot

[Spring] Spring Boot(스프링 부트)란? 스프링 부트의 개념과 스프링과의 차이, Containerless의 개념

dream_for 2023. 1. 20. 10:04

인프런 - 토비의 스프링 부트 (이해와 원리) 참고 및 정리

 

Spring Boot 를 이용한 간단한 웹 MVC 개발을 해보며, 스프링 부트가 왜 만들어졌으며 스프링 프레임워크와의 차이점이 무엇이고 특징에는 무엇이 있는지 짚고 넘어가야 할 필요를 느껴 "토비의 스프링 부트 - 이해와 원리" 강의 소개 부분을 참고하여 Spring Boot가 정확히 무엇인지 정리해보고자 한다.

 

 


스프링 프레임워크란?

 

 

스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로, 간단히 스프링(Spring) 이라 불린다. 동적인 웹 사이트를 개발하기 위해 여러 가지 서비스를 제공하고 있으며, 대한민국 공공 기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로 쓰이고 있다.

 

스프링 프레임워크의 장점과 특징

  • 경량 컨테이너
  • IoC (Inversion of Control, 제어의 역전)
  • DI (Dependency Injection, 의존성 주입)
  • AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)

 

 

스프링 부트란?

 

스프링 부트 공식 문서에 따르면 스프링 부트는 다음과 같이 설명되어 있다.

 

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

 

그리고 토비의 스프링 부트 강의에서 요약한 스프링 부트의 정리는 다음과 같다.

 

스프링 부트(Spring Boot)는 스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립실행형 애플리케이션을 복잡한 고민 없이 빠르게 작성할 수 있게 도와주는 여러가지 도구의 모음이다.

 

추상화된 틀을 제공하고, 이에 맞추어 애플리케이션을 개발할 수 있게 도와주는 프레임워크이고, 여러가지 유용한 라이브러리들을 제공하는 모음이다. 즉, 스프링 부트는 스프링 개발을 도와주는 다양한 도구의 모음이자, 스프링 자체를 확장하고 있는 프레임워크 혹은 유용한 라이브러리라 할 수 있다.

이를 간단하게 정리하면 스프링 부트는 도구, Tool 이며 프레임워크이고, 라이브러리들의 모음이라 할 수 있다.

 

 

 

스프링 부트의 장점, 스프링과의 차이

 

기존 스프링 프레임워크로 개발하는데에 복잡한 고민이 필요로 하며, 빠르게 시작하기 어렵다. 스프링 프레임워크는 기능이 많은 만큼, 환경 설정이 복잡하다. 스프링이 제공하는 많은 선택지 중에, 자세하고 다양한 종류의 표준 기술과 라이브러리들 중에서, 어떤 것을 어떤 식으로 사용할지 결정해야지만 개발을 할 수 있었다고 한다. 이에 어려움을 겪는 개발자들을 위해 나온 것이 바로 스프링 부트라 할 수 있다. 스프링 부트는 다양한 선택지에 대한 고민을 줄여주어 빠른 개발을 할 수 있도록 돕는 장점을 내세운다. 

빠른 앱을 출시하는데는 유리하지만, 본격적인 대규모의 서비스가 가능한 수준의 enterprise 애플리케이션으로 확장하려고 하면 필요한 도구들이 부족한 경험을 하게 되어 한계에 봉착하게 될 수 있다. 하지만 스프링 부트는, 실무, 실전 환경에서 필요로 하는 요구 사항들을 충족할 수 있을 만큼의 다양한 기능들(서버, 보안 등)을 꾸준히 제공하여 enterprise 개발을 돕고 있다.

 

 

 

스프링 부트의 핵심 목표와 주요 기능들

스프링 부트가 추구하는 핵심적인 목표는 다음과 같다.

 

  • 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공
    • (Create stand-alone Spring applications)
  • 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공하면서, 필요에 따라 원하는 방식으로 손쉽게 변형 가능
  • 프로젝트에서 필요한 다양한 비기능적인 기술(내장형 서버, 보안, 메트릭, 상태 체크, 외부 설정 방식 등) 제공
    • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files - Tomcat 서버가 내장되어 있기 때문에, Tomcat을 설치하거나 매번버전을 관리해 주어야 하는 수고로움을 덜어준다. jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다. 
    • (Provide production-ready features such as metrics, health checks, and externalized configuration)
  • 코드 생성이나 XML 설정을 필요로 하지 않음
    • Provide opinionated 'starter' dependencies to simplify your build configuration - Spring 프레임워크에서는 각각의 dependency들의 호환되는 버전을 일일히 맞추어야 했고, 각 의존성이 서로에게 영향을 미쳐 버전 관리에 어려움이 많았다. 하지만 spring boot는 starter가 의존성 관리를 대신 해주기 때문에 걱정을 덜어 준다.
    • (Absolutely no code generation and no requirement for XML configuration)

 

 

 

Containerless Web Application Architecture

 

Spring Boot는 Containerless Web Application Architecture 기반의 프레임워크라 할 수 있다.

Containerless, 컨테이너가 없다는 것은 Serverless와 유사한데 이는 컨테이너 관리를 신경 쓰지 않아도 된다는 의미이다.

 

 

Spring framework는 IoC 컨테이너인데, 여기서 컨테이너는 Client와 요청과 응답을 주고 받기 위한 회원가입, 로그인, 주문과 배송 등 다양한 Web Component들을 관리해주고, client로부터 들어온 요청이 어느 Web Component가 처리할지 결정하고 선택하는 라우팅, 매핑하여, 요청에 대한 적절한 응답을 다시 client에게 전달하는 역할을 담당한다.

 

 

 

Java에서는 각 web component들을 Servlet이라 하며, Servlet들을 관리주는 컨테이너를 Servlet Container이라 부른다. 가장 잘 알려진 컨테이너로는 Tomcat이 있다. 

Spring Container는 Servlet Container 뒤에서 존재하며, Spring의 컨테이너들은 Bean이라 한다. 

 

 

 

 

Servlet Container를 사용하기 위해서는 전체적인 컴포넌트들과 라이브러리들의 폴더 구조, war 파일을 이용한 배포 방식과 port 지정, 그리고 classloader, logging과 관련된 많은 설치 및 설정 정보들을 알고 있어야 한다. Servlet Container에 대한 학습 진입 장벽은 매우 높다.

결국 Servlet Container의 설치와 설정 정보들을 모두 개발자가 이해하고 관리해야 하는 수고로움을 덜어주기 위해 등장한 아키텍처갸 Containerless Architecture이다. Spring Containerless Web Application Architecture의 구조는 다음과 같다. 

 

즉 Spring Boot의 containerless architecture이 위와 같다 할 수 있다. Spring Boot의 Containerless Architecture은 Spring Container에 Bean에 등록하는 과정만으로, 독립적인 애플리케이션을 빠르게 개발하고 실행할 수 있도록 돕는다. main 메서드 실행만으로 Spring Boot가 Servlet container와 관련된 모든 작업들이 자동적으로 수행해준다.

 

728x90
반응형
Comments