Spring Framework/토비의 스프링

Chapter 01. 스프링 부트 살펴보기

계란💕 2023. 6. 17. 16:41

스프링 부트(Spring Boot)란?

  • 스프링 부트는 스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립 실행형 애플리케이션을 복잡한 고민없이 빠르게 작성할 수 있게 도와주는 여러가지 도구 모음이다. 
    • 알아서 결정해준다.
  • 스프링과 스프링 부트는 다르다. 
  • 애플리케이션을 만들 수 있도록 도와주는 기술이다. 
  • 예전의 엔터프라이즈 애플리케이션은 web appliction archive 라는 와? 파일 같은 형태로 패키징해서 서버에 배포한다. 
  • 그 위에서 동작시키는 방식으로 사용했다. 
  • 그런데 스프링 부트는 .java, .jar? 를 이용해서 애플리케이션 전체를 바로 실행 가능하다. 

 

 

스프링 부트(Spring Boot) 목표

  • 빠르고 광범위한 영역의 스프링 개발 경험을 제공한다. 
  • 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공하고 필요에 따라원하는 방식으로 손쉽게 변형 가능하다. 
  • 프로젝트에서 필요로 하는 다양한 비기능적인 기술(내장형 서버, 보안, 매트릭, 상태 체크, 외부 설정 방식 등)
  • 코드 생성이나 XML 설정을 필요로하지 않는다. XML 이 없는 스프링 개발을 목표로 하고 있다. (기존에는 xml 파일에 설정하는 과정이 필요했다.)

 

 

스프링 부트(Spring Boot) 역사

  • POJO라고 불리는 단순화 작업 오브젝트와 그에 결합된 다양한 서비스들을 이용해서 손쉽게 개발이 가능하다.

 

 

Containerless(컨테이너리스 웹 애플리케이션 아키텍처)

  • 스프링 부트는 컨테이너리스 웹 애플리케이션 아키텍처를 스프링이 지원해주기를 바라는 어떤 개발자의 생각으로 시작됐다. 
  • serverless: 서버에 대한 설치, 관리를 신경쓰지 않고 애플리케이션 개발 가능하다. 
  • containerless는? serverless와 유사하다.
  • 컨테이너는?
  • 웹 컴포넌트웹 컨테이너 안에 항상 들어가 있어야한다. 웹 컨테이너는 여러 개의 웹 컴포넌트를 관리해준다. 라이프사이클 관리
  •  웹 컨테이너는 클라이언트로부터 들어온 웹 요청을 어느 컴포넌트가 처리할지 연결해주는 작업도 한다. 
    • 결정 작업을  "라우팅(핸들러 매핑)"
  • Java 에서는 웹 컴포넌트를 "Servlet"이라고 부른다. 웹 컨테이너는 "Servlet Container" (톰캣이 가장 유명)

출처 - 토비의 스프링 부트

 

  • 서블릿 컨테이너: ex) Tomcat
  • 스프링 컨테이너는 서블릿 컨테이너 뒤에 존재하면서 Bean들을 관리한다. 
  • 스프링 컨테이너는  서블릿 컨테이너를 통해서 웹으로 들어온 요청을 받고 어느 Bean 이 작업을 처리할지 정해준다. 
  • 스프링 컨테이너가 서블릿 컨테이너를 대체할 수 있을까?
    • NO,  대체 불가능
  • 예전에는  web.xml이라는 파일을 등록해야만 서블릿 컨테이너가 뜨고 이를 통해 스프링 컨테이너가 호출됐다.  dispatch servlet 설정, 서블릿 매핑은 어디에 하고.. 등등
    • 그러나 이 파일은 스프링 프로젝트를 처음 셋업할 때만 필요하고 개발 중에는 필요없다. 
  • 서블릿 컨테이너 는 완전히 독립적인 서버 프로그램이다. war로 압축된 servlet appplication을 배포하는 작업을 해야한다. 
  • 서블릿 컨테이너는 표준 스펙이며 이를 구현한 제품(ex) Tomcat)이 있다. 
    • 굉장한 진입 장벽이자 공부해봐야 크게 유용하지 않다. (초기 세팅시에만 필요)
  •  컨테이너 리스 적용시킨다. 

web.xml 파일  출처 - 토비의 스프링 부트

 

 

 

 

 

 

독립 실행형 애플리케이션(standalone application)

  • 스프링 부트를 이용하여 main() 메서드만 실행하면 전체가 다 동작하게끔 개발할 수 있다. 
  • <=> 엔터프라이즈 애플리케이션: 웹 기반이다.

 

 

스프링 부트의 설계 철학

  • opinionated - 자기 주장이 강한
  • 일단 빠르게 개발하고 나서 고민은 나중에 
  • 스프링을 잘 활용하는 방법을 제공
  • 업계에서 검증된 스프링 생테계 프로젝트, 표준 자바 기술, 오픈 소스 기술의 종류와 의존 관계, 사용 버전을 정해준다. 
  • DI 방식과 디폴트 설정값을 제공한다. 
  • 스프링 부트에 내장된 디폴트 구성을 커스터마이징하는 매우 자연스럽고 유연한 방법을 제공한다. 
  • 스프링 부트처럼 기술과 구성을 간편하게 제공하는 나만의 모듈 작성