본문 바로가기

STUDY/Spring

[토비의 스프링부트 - 이해와 원리] 스프링 부트 살펴보기

[인프런] 토비의 스트링

 

스프링 부트

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

 

스프링 != 스프링 부트

 

 

스프링 부트의 핵심 목표

  • 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공
  • 빠르고 고민 없이 개발할 수 있게 해준다 = 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공한다
  • 비기능적인 기술(보안, 메트릭, 상태 체크, 외부 설정 방식 등)을 제공
  • 코드 생성이나 XML 설정을 필요로 하지 않음

 

 

컨테이너리스 개발 (Containerless)

스프링 부트는 컨테이너리스 웹 애플리케이션 아키텍처를 스프링이 지원해줬으면 한다는 한 개발자의 요청으로 시작됨

컨테이너리스란? 개발자가 컨테이너 관리를 신경쓰지 않아도 되도록 하는 것

 

  • Container란 ? 
    • Spring = IOC Container
    • Web Container = Servlet Container 
    • Web Component = Servlet 

 

Spring 동작 방법

  • Servlet Container 안에 여러 Servlet(회원가입기능, 게시판기능, 로그인기능 등등)들이 존재 
  • Client가 요청하면 Servlet Container에서 Servlet을 연결하고 Servlet은 동적인 컨텐츠(Dynamic Contents)를 만들어 Client에게 응답
  • Spring Container는 Servlet Container 뒤에 존재하고, Spring Container 안에 여러 Bean들이 존재 
  • Spring Container 안에서 Application이 동작
  • 참고 : 자바의 표준 웹 기술을 사용하려면 Servlet Container가 존재해야 하고, Spring Container는 이를 대체할 수 없음

 

컨테이너의 역할

  • 웹 컴포넌트들을 관리 (라이프 사이클 관리, 일생주기 관리)
  • Client로부터 들어온 요청을 어느 컴포넌트가 담당할지 결정해서 연결해주는 작업 (Routing, Handler Mapping)

 

Spring boot는 ? 

  • Spring으로 Application을 띄우려면
    • web.xml 파일 작성 필요 
    • WAR(Web Application Archive) 형식의 파일로 빌드 필요 
    • 폴더 구성 설정 필요
    • Servlet Container는 독립적인 서버 프로그램으로, Tomcat 같은 서버를 환경에 맞게 설치하고 실행시켜 war 파일로 압축된 Servlet Application을 배포하는 작업 필요 
    • Servlet Container가 실행되어야 Servlet Container를 통해 Spring Container를 호출 가능
    • 간단한 웹 페이지를 띄울때도 위와 같은 과정이 필요하고, 개발자가 Spring으로 Application 개발하는 것에만 집중해 개발하고 싶어 만들어진 것이 Spring boot
  • Spring boot는 ?
    • 설치된 컨테이너로 배포하지 않고, 독립실행형 자바 애플리케이션으로 동작
    • main 메소드만 실행시키면 web.xml 설정 ~ Servlet Container 실행까지 자동으로 동작 

 

 

Opinionated 

강한 주장을 가진 (opinionated) 도구 
내가 다 정해줄게, 일단 개발만 해! 

 

Spring boot가 정해주는 기술은 ? 

  • Application에서 사용할 기술
  • 의존 라이브러리 
  • 사용 버전
  • 각 기술을 Spring에 적용하는 방식(DI 구성)과 Default 설정 값 제공

 

Spring boot의 유연한 확장

  • Srping boot에 내장된 Default 구성을 커스터마이징하는 유연한 방법 제공
  • Spring boot가 Spring을 사용하는 방식을 이해한다면, 언제라도 Spring boot를 제거하고 원하는 방식으로 재구성 가능
  • Spring boot처럼 기술과 구성을 간편하게 제공하는 나만의 모듈 작성 가능

 

 

 

Spring boot의 이해

  • Spring boot가 제공하는 기술 조합과 구성으로 빠르게 시스템 개발을 시작 가능 
  • 하지만 Spring boot가 어떻게, 무엇을 제공하는지 모르면 작은 기술적인 요구 변화에도 한계점에 도달
  • Spring boot가 어떻게 Spring 기술을 활용하는지 이해해야 활용 가능