-
[Spring] 스프링 부트 살펴보기Backend/Spring 2023. 8. 15. 13:16
스프링 부트는 실무 환경에서 활용 가능한 독립실행형 애플리케이션을 빠르게 개발할 수 있도록 스프링 기반의 다양한 도구와 기술을 제공하는 플랫폼입니다. 이는 개발자들에게 복잡한 설정 고민 없이 빠른 개발을 도와주는 개념으로 큰 의미를 지닙니다.
스프링 부트가 아닌 스프링을 활용한 개발은 때때로 어떤 기능을 어떻게 활용해야 하는지에 대한 불확실성으로 인해 초기 진입이 어려울 수 있습니다. 이런 어려움을 해소하기 위해 등장한 것이 바로 스프링 부트입니다. 이 도구는 이러한 고민을 더 이상 걱정하지 않아도 된다는 안도감을 주는 역할을 합니다.
스프링과 스프링 부트는 서로 다릅니다. 게다가, 각각의 버전도 독립적으로 존재하며, 스프링 부트는 스프링의 버전을 결정하는 역할을 수행합니다.
스프링 부트의 핵심 목표
- 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공합니다
- 스프링이 제공하는 것을 넘어서 다양한 기술들을 제공합니다.
- 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공하면서, 필요에 따라 원하는 방식으로 손쉽게 변형 가능합니다.
- 쉬운 개발 환경을 통해 고민 없이 빠르게 개발할 수있도록 지원합니다.
- 스프링 부트가 제공하는 친절한 가이드를 따라가면서 개발하는 개념, 필요에 따라 수정 가능한 유연함 제공합니다.
- 프로젝트에서 필요로 하는 다양한 비기능적인 기술(내장형 서버, 보안, 메트릭, 상태 체 크, 외부 설정 방식 등) 제공
- 설정의 번거로움을 스프링 부트가 더욱 간편하게 제공합니다.
스프링부트의 역사
2012년 스프링 프레임워크 프로젝트에 이슈로 등록된 "Containerless 웹 개발 아키텍처의 지원"요청에서 논의와 개발 시작.
https://github.com/spring-projects/spring-framework/issues/14521
Improved support for 'containerless' web application architectures [SPR-9888] · Issue #14521 · spring-projects/spring-framewor
Mike Youngstrom opened SPR-9888 and commented As the enterprise development landscape grows more diverse the simpler the application framework the more likely developers are to adopt the framework....
github.com
이슈에서 요청하였던 Containerless란?
Containerless(컨테이너리스 웹 애플리케이션 아키텍처)

Serverless란 매우 유사합니다. 서버에 대한 설치 관리가 없어도 서버의 운영이 가능하다는 개념인데 이와 유사한 개념입니다.
컨테이너
웹 컴포넌트(WebComponent)는 주로 동적인 데이터를 제공하는 역할을 수행합니다.
웹 컨테이너(WebContainer)는 웹 컴포넌트를 관리하며, 요청이 들어오면 적절한 컴포넌트에 작업을 위임하는 역할을 수행합니다(라우팅 또는 매핑).
자바로 풀어보면
웹 컴포넌트는 서블릿(Servlet)이며, 웹 컨테이너는 서블릿 컨테이너(Servlet Container)입니다. 대표적으로 톰캣(Tomcat)이 있습니다.


스프링 컨테이너는 서블릿 컨테이너의 뒷단에서 서블릿을 통해 웹 요청을 받아 스프링 컨테이너에 할당하고, 빈(Bean)에 작업을 위임합니다.
ContainerLess의 장점은 다음과 같습니다.
- 서블릿 컨테이너 설치, WAR 폴더 구조, web.xml, WAR 빌드, 배치, 포트 설정, 클래스로더, 로깅과 같은 애플리케이션 개발의 부담을 덜어줌
- 서블릿 컨테이너가 필요하지만, 서블릿 컨테이너에 대한 지식을 학습하기보다는 스프링에서 제공해주면 좋겠습니다.
- 독립실행형(standalone) 자바 애플리케이션으로 배포되므로 컨테이너에 의존하지 않고 동작 가능
스프링 부트는 강한 주장을 가진 (opinionated) 도구입니다.
스프링 부트는 스프링 프레임워크의 특유한 설계 철학을 반영하는 강력한 주장을 가진 도구입니다.
스프링 프레임워크의 설계 철학
- 극단적인 유연함을 추구합니다.
- 다양한 기술을 유연하게 교체하면서 사용할 수 있는 장점을 제공합니다. 기존 코드 변경 없이도 다양한 관점에서 애플리케이션을 개발할 수 있습니다.
- 다양한 관점을 수용합니다.
- 표준 기술, 상용 기술, 오픈 소스 기술을 자유롭게 수용할 수 있다는 것을 의미합니다.
- 하지만, 직접 선택하는 고민은 개발자가 다 직접해야 합니다.
- 기술 선택에 대한 고민은 개발자 스스로가 해야 합니다. 이는 호환성과 가이드 등을 고려해야 함을 의미합니다.
스프링 부트의 설계 철학
- Opionionated - 자기 주장이 강한, 자기 의견을 고집하는 독선적인
- 우리가 기술적 고민들을 하지 않도록 정해줄 테니까, 애플리케이션을 빨리 개발하세요.
- 빠르게 시작할 수 있고, 광범위한 스프링의 기술들을 받아들입니다.
- 일단 정해주는 대로 빠르게 개발하고 고민은 나중에 하세요.
- 스프링을 잘 활용하는 뛰어난 방법을 제공합니다.
스프링 부트가 결정해주는 것들
사용 기술과 의존 라이브러리 결정
- 업계에서 검증된 스프링 생태계 프로젝트, 표준 자바 기술, 오픈 소스 기술의 종류와 의존 관계, 사용 버전을 정해줍니다.
- 각 기술을 스프링에 적용하는 방식과 디폴트 설정값을 제공합니다.
유연한 확장
- 스프링 부트에 내장된 디폴트 구성을 커스터마이징하는 매우 자연스럽고 유연한 방법을 제공합니다.
- 스프링 부트가 스프링을 사용하는 방식을 이해한다면 언제라도 스프링 부트를 제거하고 원하는 방식으로 재구성할 수 있습니다.
- 스프링 부트처럼 기술과 구성을 간편하게 제공하는 나만의 모듈을 작성할 수 있습니다.
스프링 부트에 대한 오해와 한계
- 애플리케이션의 기능 코드만 잘 작성하면 된다.
- 스프링을 몰라도 개발을 잘 할 수 있다.
- 스프링 부트가 직접적으로 보여주지 않는 기술적인 것은 몰라도 된다.
- 문제가 발생하면 검색을 통해 기술적인 필요한 것을 해결할 수 있다.
스프링 부트를 이해하게 되면
- 스프링 부트가 스프링의 기술을 어떻게 활용하는지 배우고 응용할 수 있다.
- 스프링 부트가 선택한 기술, 자동으로 만들어주는 구성, 디폴트 설정이 어떤 것인지 확인할 수 있다.
- 필요할 때 부트의 기본 구성을 수정하거나 확장할 수 있다.
- 나만의 스프링 부트 모듈을 만들어 활용할 수 있다.
강의는 인프런의 토비의 스프링 부트를 수강하였습니다.
토비의 스프링 부트 - 이해와 원리 - 인프런 | 강의
스프링 부트의 핵심 기능을 직접 만들어보면서 스프링 부트의 동작 원리를 이해하고, 이를 통해 스프링 부트를 잘 학습하고 사용하는 방법을 배우는 강의입니다. 스프링 부트가 사용하는 스프
www.inflearn.com
'Backend > Spring' 카테고리의 다른 글
[Spring] Spring batch (프로젝트 셋팅, Batch Job 실행) (0) 2022.04.04 [Spring] War Jar 차이점 (0) 2022.03.09 [Spring]스프링 핵심원리_컴포넌트 스캔 (0) 2022.02.24 [Spring] 스프링 핵심 원리_싱글톤 컨테이너 (0) 2022.02.22 [Spring]스프링 핵심원리_스프링 컨테이너와 빈 (0) 2022.02.17 - 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공합니다
