Spring Boot 는 Spring 이랑 같은거 아니야? [Spring Boot 개념]

이가희·2025년 4월 8일

spring + java

목록 보기
9/14
post-thumbnail

SpringBoot 같이 알아가기 [목차]

chapter 의 제목을 누르시면 각 페이지로 이동합니다.
chapter설명
1. Spring Boot 의 개념 Spring Boot 는 Spring 의 업그레이드 버전 아니야? Spring Boot 가 왜 탄생하게 되었고, 어떤 것인지에 대한 설명이 있습니다.
2. 독립 실행형 Servlet application 구축'독립 실행형 ' 의 개념을 알고, 직접 FrontController 까지 구축해보면서 SpringBoot 의 Dispatcher Servlet 동작 방식을 이해하는 기반을 다집니다.
3. Containerless Web Application앞선 이해를 기반으로 Spring Boot 의 @SpringBootApplication , SpringBootApplication.run() 을 유사하게 구현해보며 Spring Boot 동작 방식을 이해합니다. (포함되는 개념 : Spring Container, Dispatcher Servlet, Configuration , ComponentScan 등)
4. @AutoConfiguration 파헤쳐보기Spring Boot 의 @AutoConfiguration 을 유사하게 직접 구현하여, Spring Boot가 수 많은 빈들을 어떻게 자동으로 구성해주는지 학습합니다.
5. 자동 구성 빈 오브젝트의 디폴트 값 변경하기Spring Boot 는 수 많은 빈들을 자동으로 구성해주고, 디폴트 값을 유연하게 변경할 수 있도록 합니다. 코드를 통해 이 과정을 이해합니다.

Spring 과 Spring Boot 는 같은 것일까?
Spring 이 진화해서 만들어진게 Spring Boot 인걸까?
Spring Boot 는 왜 만들어진 것일까.

이야기 읽듯이 편안하게 Spring Boot 가 어떤 아이인지 살펴보자.
절대 알아서 나쁠 것 하나 없는 이야기가 될 것이다.


Spring Boot 가 뭔데?

Spring Boot 와 Spring 은 같은 것이 아니다.

Spring Boot 는 스프링을 기반으로 독립실행형 애플리케이션을 복잡한 고민 없이 빠르게 개발할 수 있게 도와주는 여러가지 도구의 모음이라고 볼 수 있다.

스프링 부트가 탄생하게 된 배경을 알게된다면 Spring Boot 정의를 더 잘 이해할 수 있다.


Spring Boot 가 왜 탄생하게 되었는데? 🍃

Spring Boot 는 Spring 을 활용한다.
그렇다면 개발자들이 Spring 을 바로 쓰면 되지 왜 Spring Boot가 탄생하게 된 것일까?

과거 Spring Boot 가 개발되기 이전에, Spring 으로 개발하는 것은 항상 복잡한 고민이 수반되었다.

왜냐하면 Spring 의 설계 철학은 아래와 같았기 때문이다.

  • 극단적인 유연함 추구
  • 다양한 관점을 수용
  • Not opinionated
  • 수많은선택지를 다 포용

위와 같은 Spring 의 특징으로, 유연한 개발은 가능했지만 개발자들은 Spring 을 어떤 방식으로 사용할지에 대해 고민을 하고 결정을 했어야 했다.

그리고 Spring 으로 개발하면 XML 작성은 거의 필수적이었기 때문에 학습 곡선이 높아 , 본격적인 개발을 하기 전 준비 (설계, 결정, 고민, 설정 등) 단계에 많은 시간을 쏟아야 했다.

이 때문에 2012년에 스프링 프레임워크 프로젝트에 Improved support for 'containerless'web application architercutres 라는 이슈가 등록되었다.

https://github.com/spring-projects/spring-framework/issues/14521

요약하자면 기본 지식이 너무 수반되고, 더 단순한 방식으로 빠르게 개발을 시작하고 편리하게 사용하는 부분에서 뒤쳐졌다는 내용이었다.

이것으로 논의가 시작되어 Spring Boot 개발이 시작되고, 2013년에 0.5.0.M1 공개되고 2014년에 1.0 GA 공식버전이 공개되었다.

그렇다면 Spring Boot의 설계 철학은 무엇일까?

  • Opioniontated
  • 일단 정해주는 대로 빠르게 개발하고 고민은 나중에
  • 스프링을 잘 활용하는 뛰어난 방법을 제공

아주 자기주장적이다.
Spring 을 어떻게 사용할지 우리가 결정해 줄테니, 당신은 개발을 시작하라 라고 볼 수 있다.

이 결정해주는 것에는 아주 다양한 것이 있다.
사용 기술과 의존 라이브러리 (검증된 프로젝트를 사용하고 사용 버전 등까지 정해줌) , 각 기술을 스프링에 적용하는 방식 , 디폴트 설정값부터 구현체까지 제공해주어 개발자는 아주 편리하게 개발을 시작할 수 있다.

예를 들어 DB를 연결하려고 하면, 기존 Spring에서는 어떤 구현체 , 트랜잭션 매니저 등을 사용할지 결정하고 호환되는 버전으로 개발자가 직접 찾아서 설정했어야 했다.
하지만 Spring Boot 는 DB 연결 정보 정도만 개발자가 넣어주면 나머지는 알아서 잘 호환되는 것으로 제공해주어 편리하게 개발 할 수가 있다.

📌 그럼 Spring Boot 는 안 유연한가?

그렇지도 않다.
자기 주장적으로 무엇을 쓸 지 결정을 내려주지만, 디폴트 구성을 자연스럽고 유연하게 커스터마이징을 할 수 있다.
또한 Spring Boot 가 Spring 을 활용하는 방식을 잘 이해한다면 언제라도 Spring Boot 를 제거하고 원하는 방식으로 재구성 할 수 있다.

+) 더 알아가기 : Spring Boot 의 핵심 목표 ⭐️

  • 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공
  • 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공하면서, 필요에 따라 원하는 방식으로 손쉽게 변형 가능 (이걸 하려면 너는 이런 이런거를 써. 그런데 원한다면 변경해도 돼)
  • 프로젝트에서 필요로 하는 다양한 비기능적인 기술 (내장형 서버, 보안, 메트릭, 상태 체크, 외부 설정 방식 등) 제공
  • 코드 생성이나 XML 설정을 필요로 하지 않음

Containerless web application architecture ?

Spring Boot 는 Containerless web application architecutre 어쩌고 하며 등록된 이슈로 부터 시작되었다고 했다.

근데 컨테이너리스? 어떻게 컨테이너 없이 애플리케이션을 만든다는 것일까?

말도 안 돼 😱

Containerless web application architecutre 은 컨테이너 없이 애플리케이션을 만들겠다는 의미가 아니다.
Container 관리를 신경쓰지 않는 아키텍처라는 의미이다.

Container 를 띄우는 것은 생각보다 간단한 일이 아니다.

간단하게 Container 알아가기
클라이언트의 요청을 받고, 응답을 보내려면 Web container (Spring 에서는 Servlet Container) 가 필요하다. Web container 는 lifeCycle , web component ( Spring 에서는 servlet) , 관리부터 클라이언트의 요청을 어떤 web component 에게 넘겨주어야 할 지 (Spring 에서는 handlerMapping) 결정 등을 한다. servlet 에 대해 모른다면 이 페이지 를 참조해주세요.

Spring 프로젝트에서 대표되는 Servlet Container는 톰캣인데 이를 띄우려면 톰캣에 맞는 설정을 작성해야 하고, war 파일로 만들고, Servlet Container의 로깅도 알아야 하며.. 여간 해야할 것이 많은게 아니다.

그런데 만약 회사가 달라져 톰캣에서 다른 Servlet Container 를 사용해야 한다면 개발자는 다시 Servlet Container 을 띄우기 위해 복잡한 설정들을 학습해야 한다.

이러한 맥락에서 Containerless 라는 말이 나오게 되었고,
Spring Boot 는 Servlet Container, Servlet 에 대한 고민 없이 개발이 가능하게 해준다.

Servlet Container 뒤에 Spring Container 가 존재하는데,
이 영역 안에서 우리가 개발한 애플리케이션이 동작한다.

Spring Boot 를 사용한다면 우리는 위의 그림에서 Spring Container 앞에 있는 영역에 대한 고민 없이 애플리케이션 개발에만 집중을 할 수가 있게 된다.


Spring Boot 는 아주 편리하다.
그래서 Spring Boot 의 보여지는 부분만 알아도 될 것만 같다.

하지만 보여지는 부분만 안다면 개발을 하다 한계에 부딪히기 쉽상이다.
Spring Boot 가 어떻게 Spring 을 사용하는지 잘 알게 된다면 우리는 Spring Boot 의 기본 구성을 수정하거나 확장 할 수도 있고, 나만의 Spring Boot 모듈을 만들어 낼 수도 있다.

그래서 이번에는 Spring Boot 를 주제로 포스팅을 계속 해 보려 한다.
누군가에게 조금이나마 도움이 되면 좋겠다.

참조 : 토비의 스프링 부트 - 이해와 원리

profile
안녕하세요 개발하는 사람입니다.

0개의 댓글