코드의 여백

[스프링] 스프링 부트(Spring Boot) 알아보기

by rowing0328

Intro

스프링 부트(Spring Boot)는 자바 기반 애플리케이션 개발을 훨씬 간단하게 만들어주는 프레임워크다. 복잡한 설정 없이도 빠르게 독립 실행형 애플리케이션을 개발할 수 있도록 설계되었고, 특히 컨테이너리스 아키텍처를 지원하면서 현대적인 개발 환경에서 점점 더 중요해지고 있다.

 

이번 포스팅에서는 스프링 부트의 정의, 역사, 그리고 컨테이너리스 아키텍처와 같은 주요 개념을 정리해본다.

 

스프링 부트란

스프링 부트는 스프링 프레임워크를 기반으로, 실무에서 사용 가능한 독립 실행형 애플리케이션을 빠르고 간편하게 개발할 수 있도록 돕는 도구 모음이다.

 

스프링 부트의 핵심 목표

  1. 빠르고 광범위한 스프링 개발 경험을 제공한다.
  2. 즉시 적용 가능한 강력한 기술 조합을 제공하며, 필요에 따라 쉽게 변형할 수 있다.
  3. 내장형 서버, 보안, 메트릭, 상태 체크, 외부 설정 등 비기능적인 기술을 프로젝트에 바로 사용할 수 있도록 지원한다.
  4. 코드 생성이나 XML 설정이 필요 없다.

 

스프링 부트의 역사

스프링 부트(Spring Boot)는 2012년에 기존 스프링 프레임워크의 복잡함을 줄이고, 더 나은 개발자 경험을 제공하기 위해 시작됐다.

 

당시 Java 웹 개발은 강력한 기능을 가지고 있었지만, 프로젝트를 시작하려면 설정해야 할 부분이 너무 많았다. 이런 이유로 Ruby on Rails, Node.js, Python 같은 간단한 프레임워크들에 비해 접근성이 떨어진다는 평가를 받았다.

 

이 문제를 해결하기 위해 스프링 개발자들은 "간단하면서도 강력한" 플랫폼을 목표로 삼았고, 2013년에 Phil Webb의 리더십 아래 Spring Boot 프로젝트를 시작했다. 그리고 같은 해 8월, 첫 번째 버전인 0.5 마일스톤이 공개되면서 많은 관심을 받았다. 간편한 설정과 빠른 실행 환경은 Java 개발 방식에 큰 변화를 가져왔다.

 

2014년에 스프링 부트 1.0이 정식 출시된 이후 빠르게 성장했다. 2018년에는 2.0이 출시됐고, 최근에는 3.4.1 버전까지 도달했다. 이제 스프링 부트는 단순히 스프링을 보조하는 도구를 넘어, 컨테이너리스 아키텍처, 마이크로서비스, 그리고 최신 Java 생태계를 지원하는 강력한 플랫폼으로 자리 잡았다.

 

컨테이너리스 개발 - "컨테이너 없는" 웹 애플리케이션 아키텍처란

컨테이너리스 아키텍처는 기존 서블릿 컨테이너의 복잡한 작업과 제약에서 벗어나, 독립 실행형 애플리케이션을 개발할 수 있도록 돕는 새로운 접근 방식이다. 기존 아키텍처의 한계와 비교해 이를 더 구체적으로 살펴보자.

 

기본 서블릿 컨테이너 기반 아키텍처

기존 Java 기반 웹 애플리케이션은 주로 서블릿 컨테이너(Tomcat, Jetty)에 의존하여 동작했다.

서블릿 컨테이너는 클라이언트로부터 HTTP 요청을 받아 처리하고, 응답을 생성하는 역할을 한다.

 

하지만 서블릿 컨테이너를 활용하려면 여러 반복적이고 번거로운 작업을 거쳐야 했다.

  • 필요한 작업
    web.xml 구성 파일 작성
    애플리케이션을 .war 파일로 패키징
    서블릿 컨테이너에 애플리케이션 배포 및 설치
    포트 설정, 클래스 로더 관리, 로깅 등 추가 설정

 

기존 서블릿 컨테이너 기반 아키텍처는 다음과 같은 한계를 가지고 있다.

  • 반복적이고 번거로운 설정 작업
    매번 복잡한 설정 과정을 거쳐야 한다.
  • 서블릿 컨테이너 의존성
    서블릿 컨테이너가 필수적이라 개발 속도가 느려진다.

 

스프링 컨테이너와 서블릿 컨테이너의 협업

스프링 프레임워크는 서블릿 컨테이너와 협업하여 개발자들에게 더 나은 편의를 제공한다.

 

이 두 컨테이너는 각기 다른 역할을 맡아 효율적으로 동작한다.

  • 서블릿 컨테이너
    HTTP 요청 및 응답 처리
  • 스프링 컨테이너
    애플리케이션의 비즈니스 로직을 담당하는 Bean 관리

 

스프링이 제공하는 DI(Dependency Injection)와 loC(Inversion of Control) 기능 덕분에 개발 생산성이 크게 향상되었다.

그러나 여전히 서블릿 컨테이너의 설치와 설정 작업이 필요한 부분은 남아 있다.

 

컨테이너리스 아키텍처로의 전환

컨테이너리스 아키텍처는 서블릿 컨테이너 없이도 애플리케이션을 독립적으로 실행할 수 있는 구조를 의미한다. 이를 통해 애플리케이션은 다음과 방식으로 동작한다.

 

  • Standalone Application
    애플리케이션이 내장 서버(Tomcat)를 포함한 단일 .jar 파일로 패키징되어 동작한다.
    main() 메서드로 실행되며, 서버 구동부터 요청 처리까지 모두 자체적으로 처리한다.

 

장점

  • .war 파일 패키징 및 외부 서블릿 컨테이너 설치가 필요 없음
  • 설정이 단순화되고 배포 속도가 빨라짐
  • Docker, Kubernetes 같은 DevOps 환경에서 쉽게 통합 가능
  • Spring Boot가 이 구조를 강력히 지원하며 현대 웹 개발의 표준이 됨

 

강한 주장을 가진(Opinionated) 도구

스프링 부트는 스프링 생태계의 복잡성을 해결하기 위해 설계된 강력한 도구다.

스프링 버전, 표준 자바 기술, 오픈소스 라이브러리 등 다양한 의존 관계와 버전 호환성을 관리하는 작업은 매우 복잡하며, 성공적으로 처리하기 쉽지 않다.

스프링 부트는 이러한 문제를 해결하기 위해 다음과 같은 특징을 제공한다.

 

스프링 부트의 특징

  • 사전 검증된 기술 제공
    매 버전마다 추천 기술과 의존 관계가 사전 검증된 상태로 제공된다.
    각 라이브러리의 세부 구성과 디폴트 설정도 함께 제공되어 사용자가 별도로 설정할 필요가 없다.
  • 유연한 구성 가능성
    기본적으로 제공되는 스프링 부트의 설정을 따르되, 필요에 따라 수정하거나 재구성할 수 있다.
    프로젝트 초기에는 스프링 부트의 기본 설정을 사용하고, 점진적으로 원하는 방식으로 변경하는 것도 가능하다.
  • 적응형 도구 제공
    서비스 특성에 맞는 스프링 부트 스타일의 도구를 직접 만들어 적용할 수 있는 유연성을 제공한다.

 

마무리

이번에 스프링 부트를 공부하면서 가장 크게 느낀 점은 "복잡한 설정을 간소화하는 것이 얼마나 중요한가"라는 부분이다. 기존 스프링 프레임워크의 설정 작업은 번거롭고 시간이 많이 들었는데, 스프링 부트는 그런 부분을 상당히 줄여주면서 개발 생산성을 높여준다.

 

특히 컨테이너리스 아키텍처를 지원하며 독립 실행형 애플리케이션 개발을 가능하게 한다는 점에서, 현대적인 개발 환경에 정말 잘 맞는 도구라는 생각이 들었다. 앞으로 실무나 개인 프로젝트에서 스프링 부트를 어떻게 활용할 수 있을지 더 구체적으로 고민해보고 싶다.

 

참고 자료 :

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

 

토비의 스프링 부트 - 이해와 원리 강의 | 토비 - 인프런

토비 | 스프링 부트의 핵심 기능을 직접 만들어보면서 스프링 부트의 동작 원리를 이해하고, 이를 통해 스프링 부트를 잘 학습하고 사용하는 방법을 배우는 강의입니다. 스프링 부트가 사용하는

www.inflearn.com

 

스프링 핵심 원리 - 기본편

 

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보

www.inflearn.com

블로그의 정보

코드의 여백

rowing0328

활동하기