CS

[CS] - Spring vs Spring Boot

sson-coding 2026. 1. 19. 23:50

프레임워크 vs 라이브러리

프레임워크

<aside>

프레임워크(Framework) 는 애플리케이션을 만들기 위한 뼈대(구조)와 규칙을 미리 제공하는 도구이다.

</aside>

개발자는 모든 것을 처음부터 만드는 대신, 프레임워크가 제공하는 구조 안에서 비즈니스 로직에 집중할 수 있다.

라이브러리

<aside>

라이브러리는 특정 기능을 제공하는 코드 묶음으로, 필요할 때 가져다 사용한다.

</aside>

차이점

  • 프레임워크
    • 프레임워크가 전체 흐름을 제어
    • 개발자는 정해진 위치에 코드만 작성
    • 예시 : React, Django, Spring Boot
  • 라이브러리
    • 내가 필요할 때 호출해서 사용
    • 제어 흐름은 개발자에게 있음

프레임워크 사용 이유

  1. 빠른 개발
    • 기본적인 기능이 이미 구현되어 있어 개발 속도가 빨라짐
  2. 일관성 유지
    • 팀 프로젝트에서 코드 스타일 통일
  3. 유지보수 용이
    1. 구조가 체계적이라 기능 추가나 수정이 쉬움
  4. 보안 강화
    • 보안, 트랜잭션, 예외 처리 등 기본 제공

Spring

<aside>

Spring 은 JAVA 기반 애플리케이션 개발을 위한 오픈소스 애플리케이션 프레임워크이다.

</aside>

Spring 이전의 Java 웹 개발

Spring이 등장하기 이전, Java 기반 웹 애플리케이션은 주로 EJB(Enterprise JavaBeans) 기반의 기술을 이용해 개발되었다.

EJB는 다음과 같은 기능을 제공했다.

  • 데이터베이스 접근
  • 트랜잭션 관리
  • 보안
  • 분산 처리

하지만 EJB에는 치명적인 단점들이 존재했다.

  • 특정 벤더의 EJB 컨테이너에 강하게 의존
  • 복잡한 설정과 높은 러닝 커브
  • 컴포넌트 간 강한 결합도
  • 컨테이너 없이 실행하기 어려워 단위 테스트가 거의 불가능

이로 인해 개발 생산성과 유지보수성이 크게 떨어졌다.

스프링은 EJB 의 단점을 해결하여, 순수 자바 객체(POJO) 만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 개발하기 위한 프레임워크이다.

  • POJO(Plain Old Java Object)
    • 특정한 규약이나 프레임워크에 종속되지 않는 간단하고 순수한 자바 객체

Spring 특징

  1. 제어 역전(IoC)
    • 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너 제공
    • 객체의 생성과 관계 설정을 스프링에 위임
    • 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입
  2. 의존성 주입(DI)
    • 의존성 주입을 통해 객체 간의 관계를 설정
    • 애플리케이션의 결합도를 낮춰 코드의 재사용과 테스트 용이성을 향상 시킴
  3. AOP(관점 지향 프로그래밍)
    • 핵심기능을 제외한 부수적인 기능은 프레임워크가 제공함
    • 예시 : security, logging 등 추가할 때 비즈니스 로직을 건들지 않고 AOP 로 추가
  4. 중복 코드 제거
    • JDBC 같은 템플릿을 사용할 때 중복되는 코드도 많고 복잡해지는데 이를 모두 제거
  5. 다른 프레임워크와의 통합
    • JUnit, Mockito 와 같은 유닛 테스트 프레임워크와 통합이 간단함
  6. 웹 개발 지원
    • 스프링 MVC 는 MVC(Model-View-Controlle) 아키텍처를 지원

Spring 문제점

  1. 설정의 복잡성
    • 스프링은 강력한 기능을 제공하기 위해 많은 설정과 구성이 필요
    • 초기 설정의 복잡성을 증가, 초보자에게 어려움
    • 애플리케이션 컨텍스트 설정, 빈 정의, 컴포넌트 구성 등
  2. 높은 초기 학습 난이도
    • 다양한 개념과 기능을 이해하고 사용하기 위해 시간과 노력이 필요
  3. 의존성 관리
    • 여러 의존성과 버전을 관리하는 것이 복잡함
    • XML 설정 파일에 많은 빈을 등록해야 함
    • 가독성이 떨어지고 의존성 관리가 어려움
  4. 별도 WAS 서버 구성
    • 별도의 WAS 설치하고, 설정해야 함

Spring Boot

<aside>

스프링의 문제점을 해결해주기 위해 개발된 스프링의 프레임워크

</aside>

Spring Boot 특징

  1. 자주 사용되는 라이브러리들의 버전 관리 자동화
    • 자주 사용되는 라이브러리들의 호환되는 버전을 미리 정의해두고 관리
    • maven, gradle 등과 같은 빌드 도구에 버전을 명시하지 않아도 적합한 라이브러리 버전을 찾아서 가져
  2. 자동 설정 (Auto Configuration)
    • 클래스패스에 있는 라이브러리를 기준으로 설정
    • ElasticSearch,Redis 등 자주 사용되는 외부 라이브러리들 역시도 자동 설정 제공
    • 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring 을 사용할 수 있음
  3. 내장 서버
    • 과거 : 웹서버 설치 → war 생성 → 서버에 배포
    • 내장 서버(Tomcat,Jetty,Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행
    • JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션 실행
  4. 의존성 관리 간소화
    • 3rd party 의존성 관리를 용이하게 하기 위한 ‘starter’ 의존성 통합 모듈을 제공
    • web, data-jpa, security
  5. 운영 편의성
    • 애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공
    • 운영과 관리가 편해지고 안정성이 향상됨

Spring vs Spring Boot 차이

구분 Spring Spring Boot

개념 자바 기반 엔터프라이즈 애플리케이션 프레임워크 Spring을 쉽고 빠르게 사용하기 위한 확장 도구
목적 안정적이고 확장 가능한 애플리케이션 구조 제공 설정과 초기 구성을 최소화하여 생산성 향상
설정 방식 XML 또는 Java Config 기반 수동 설정 중심 자동 설정(Auto Configuration) 중심
초기 설정 설정 항목이 많아 진입 장벽이 높음 기본 설정 제공으로 빠른 시작 가능
의존성 관리 라이브러리와 버전을 직접 관리 Starter + BOM(의존성 버전 목록)으로 버전 자동 관리
빌드 설정 의존성, 플러그인 직접 설정 기본 빌드 설정 제공
서버 실행 외부 WAS(Tomcat 등) 필요 내장 서버 기본 제공
배포 방식 WAR 파일 중심 JAR 파일 단독 실행
실행 방법 서버에 배포 후 실행 main() 메서드로 즉시 실행
운영 지원 별도 설정 필요 Actuator 등 운영 기능 기본 제공
모니터링 직접 구현 또는 외부 도구 필요 Health, Metrics 등 기본 제공
학습 목적 Spring 핵심 원리 이해에 적합 실무 표준, 빠른 개발에 적합

정리

Spring 은 개발자가 직접 설정 파일을 작성하고, 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정하는 것을 요구한다. 반면, Spring Boot 는 개발자가 보다 쉽게 스프링을 사용할 수 있도록 설정과 의존성 처리 등을 자동으로 처리한다.

Spring 은 기존 EJB 대신해 자바 애플리케이션을 더 쉽게 만들고, 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우, Spring Boot 는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용한다.


참고자료

https://wikidocs.net/blog/@inetsos/2094/

https://www.elancer.co.kr/blog/detail/158

https://velog.io/@ksu9704/Spring-VS-SpringBoot

https://www.inflearn.com/blogs/3315?srsltid=AfmBOooM3uIbqXIQYpo7oXwkYTyQ-iy1ytzUudHluWsZNPJDo68pmFfF

https://programforlife.tistory.com/68

https://mangkyu.tistory.com/208