[강의] Spring Boot 개요

Jerry·2025년 8월 4일

Spring Framework와 Spring Boot 관계

Spring Boot는 Spring Framework 기반으로 구성된 Spring을 보완하고 발전 시킨 프레임워크이다.
기존 복잡했던 Bean(XML)구조와 어려웠던 설정(Configuration)을 별도의 도구(Spring Initializr)를 통해
간편화 하고 Tomcat을 내장하였고, 각종 모듈은 편하게 add-up 하여 활용 가능하다.
※ Spring Boot는 Spring Framework 상속하고 있으며, Spring Framework가 먼저 새로운 버전이 릴리즈, Boot의 신버전이 다음에 릴리즈 됨

Spring Boot 소개

Spring Boot makes it easy to create stand-alone, production-grade
Spring based Applications that you can "just run".

Features

  • 독립 실행형(Spring) 애플리케이션을 생성
  • Tomcat, Jetty 또는 Undertow를 내장하여 직접 실행 (WAR 파일로 배포할 필요 없음)
  • 빌드 구성을 단순화하기 위해 의견이 반영된 ‘Starter’ 의존성 제공
  • Spring 및 서드파티 라이브러리를 가능한 한 자동으로 구성
  • 메트릭, 상태 점검, 외부화된 설정 등 운영 환경에 필요한 기능 제공
  • 코드 생성이나 XML 설정이 전혀 필요하지 않음

Spring Framework VS Spring Boot

구분Spring FrameworkSpring Boot
개념엔터프라이즈급 SI 프로젝트에 최적화된 전통적인 웹 개발 프레임워크Spring Framework를 기반으로 한 RESTful 및 MSA(Microservice Architecture)에 최적화된 확장 프레임워크
설계 방법전통적인 Monolithic 아키텍처 기반 (MVC 패턴 기반의 대형 프로젝트 중심)MSA에 최적화된 구조, REST API 중심, 다양한 UI (SPA, 모바일 등)와 연동 용이
주요 특징XML 기반의 설정 (DI, AOP 등), 설정 유연성 높음
유연하지만 복잡한 설정 필요
자동 설정(Auto Configuration) 지원, 내장 Tomcat 제공, 최소 설정으로 실행 가능 (Convention over Configuration)
배포 방식.war 파일로 외부 WAS (Tomcat, WebLogic 등)에 배포내장 톰캣을 포함한 .jar 파일로 실행, 독립 실행형 애플리케이션으로 배포 가능
설정 방법applicationContext.xml 등 XML 설정 중심, 수동 DI 구성 필요application.properties 또는 application.yml 사용, Java 기반 @Configuration 클래스 활용 가능, 자동 구성 지원
프로젝트 생성/관리Spring Legacy Project(Spring MVC) 중심, 초기 설정과 의존성 수동 추가 필요Spring Initializr를 통한 빠른 프로젝트 생성, Starter 의존성을 통한 구성 자동화
권장 도구템플릿 엔진: JSP
Persistence: MyBatis, JDBC Template
Dependency: Maven
Log/Test: Log4j, JUnit 4
템플릿 엔진: Thymeleaf, SPA (React, Vue 등과 연동)
Persistence: JPA, Hibernate
Dependency: Gradle 또는 Maven
Log/Test: Logback, JUnit 5, Mockito

빌드 환경 - Gradle

Gradle은 JVM 기반의 오픈소스 빌드 자동화 도구로, Groovy·Kotlin DSL을 사용해 유연하게 프로젝트
빌드 과정을 정의할 수 있다. 의존성 관리(Maven Central 등)와 멀티 프로젝트 빌드를 손쉽게 지원하며,
증분 빌드와 캐싱으로 빌드 속도를 최적화한다.
Java뿐 아니라 Kotlin, Android, Spring 등 다양한 생태계에서 표준 빌드 도구로 널리 활용된다.
→ Google이 2013년 Android Studio를 발표하면서 Gradle을 기본 빌드 도구로 채택 된 이후 활성화됨

Maven vs Gradle

항목MavenGradle
빌드 스크립트XML 기반 POM(Project Object Model) 사용, 선언적(Declarative)Groovy/Kotlin DSL 기반, 선언적+명령형(Declarative + Imperative)
유연성표준화된 라이프사이클과 구조, 사용자 정의 제약자유도가 높아 복잡한 빌드/커스터마이징 용이
빌드 성능전통적으로 느린 편, 증분 빌드 지원 제한적증분 빌드, 빌드 캐싱, 병렬 빌드로 매우 빠름
학습 난이도단순하고 진입장벽 낮음문법 다양(DSL), 러닝커브 있음
플러그인/생태계방대한 플러그인과 안정된 Maven Central 저장소플러그인 다양, Maven 저장소 및 Gradle Plugin Portal 모두 사용 가능
적합한 환경표준화된 Java 프로젝트, 비교적 단순한 빌드대규모·멀티모듈·안드로이드·스프링부트 프로젝트
커뮤니티오래된 생태계, 안정적 문서와 사례 풍부빠르게 성장 중, 최신 사례·커뮤니티 활발
CI/CD 연동Jenkins, TeamCity 등 전통적 환경과 궁합 우수최신 DevOps 환경(CI/CD, 클라우드 빌드)과 최적화

서버 환경 - Tomcat

Tomcat은 Apache Software Foundation에서 개발한 오픈소스 서블릿 컨테이너(Servlet Container)로,
Java Servlet과 JSP를 실행할 수 있는 환경을 제공한다.
Spring Boot에서는 톰캣이 내장 서버(Embedde)로 포함되어 별도 설치 없이 애플리케이션과 함께 실행된다.
이를 통해 WAR 배포 없이 JAR 실행만으로 웹 애플리케이션 구동이 가능해 개발·배포가 간편하다. 정적
리소스 처리와 서블릿/JSP 기반 동적 요청 처리, 세션 관리, 보안 설정 등 WAS의 핵심 기능을 지원한다.

Spring Boot 프로젝트 시작하기

Spring Starter

Spring Starter(Spring initializr)는 Spring Boot에서 제공하는 Dependency Bundle으로, 특정 기능을
빠르게 사용하기 위해 필요한 라이브러리와 설정을 미리 포함한 모듈이다. spring-boot-starter-web,
spring-boot-starter-data-jpa처럼 기능별 스타터를 추가하면 즉시 개발 환경이 구성되며, 복잡한 개별
라이브러리 버전 관리가 필요 없다. 이를 통해 빠른 프로젝트 초기화와 일관된 설정 관리가 가능해진다.

Spring Starter 설정

Spring Boot 핵심 모듈 / 의존성

수업에서 주로 활용하는 Dependencies

분류도구 이름상세 설명
개발Spring Boot DevTools개발 편의성을 위한 도구. 코드 변경 시 애플리케이션을 자동 재시작하고, LiveReload 기능으로 브라우저 자동 새로고침. 캐시 비활성화로 빠른 피드백 제공.
개발Lombok어노테이션 기반 코드 자동 생성 도구. @Getter, @Setter, @Builder 등을 사용해 Getter/Setter, 생성자, toString 메서드 자동 생성. 보일러플레이트 코드 최소화.
WebSpring WebSpring MVC 기반 웹 애플리케이션 개발 지원. REST API 및 웹 서비스 개발 가능. 내장 Tomcat 포함으로 별도 WAS 설치 없이 실행 가능.
WebThymeleaf서버사이드 템플릿 엔진. HTML 파일에 데이터를 바인딩해 동적 렌더링 수행. JSP를 대체하는 최신 뷰 기술로 널리 사용됨.
DBSpring Data JPAHibernate 기반 JPA 구현. CrudRepository, JpaRepository 등으로 데이터 접근 계층 추상화. ORM 기반 엔티티 매핑 및 생산성 향상.
DBPostgreSQL DriverPostgreSQL DB와 연결하기 위한 JDBC 드라이버. Spring Boot에서 PostgreSQL 사용 시 필수 의존성.
IOValidationHibernate Validator 기반 데이터 검증 도구. @Valid, @NotNull, @Size 등으로 VO/DTO 필드에 대한 제약 조건 검증 지원.
SecuritySpring Security인증(Authentication)과 인가(Authorization) 기능 제공. 로그인, 접근 제어, 암호화, CSRF 방지 등 웹 애플리케이션 보안 전반 처리.
CacheSpring Cache캐싱 추상화 제공. @Cacheable 어노테이션 등으로 손쉽게 캐시 적용 가능. Redis, Ehcache 등 다양한 캐시 스토리지와 연동 가능.
MonitoringSpring Boot Actuator운영 환경 모니터링 도구. 애플리케이션 상태, 헬스 체크, 메트릭, 환경 설정 등을 엔드포인트를 통해 노출하여 운영 관리에 도움.
문서화Spring REST Docs테스트 기반 REST API 문서 자동화 도구. 테스트 코드로부터 API 문서를 생성하여 실제 구현과 문서의 일관성 확보.
메시징Spring for Apache KafkaKafka와의 연동을 지원하는 메시징 모듈. 이벤트 스트리밍 및 비동기 메시지 기반 시스템 구축에 활용.
세션 관리Spring Session분산 환경에서 세션을 Redis 등 외부 저장소에 저장하여 서버 간 세션 공유 가능. 다중 서버 환경에 적합한 세션 관리 도구.

최근 중요한 Dependencies

분류도구 이름상세 설명
보안Spring Security인증(Authentication), 인가(Authorization), 비밀번호 암호화, CSRF 방지 등 웹 보안 기능 제공
보안Spring Security OAuth2 ClientOAuth2 기반 외부 인증 연동 (구글, 깃허브 등 소셜 로그인 구현 지원)
DBMyBatis FrameworkSQL 기반 ORM 대체 프레임워크로 명시적 SQL 쿼리 작성 가능, 복잡한 쿼리에 적합
DBPostgreSQL Driver / MySQL Driver프로젝트에서 사용하는 DB(PostgreSQL 또는 MySQL)와 연결하기 위한 JDBC 드라이버
배치 처리Spring Batch대용량 데이터 처리 및 배치 작업 스케줄링 지원 (Job, Step 단위 구성)
배치 처리Quartz Scheduler정교한 작업 예약 및 반복 실행을 지원하는 스케줄링 프레임워크
NoSQL / 세션 관리Spring Data RedisRedis를 통한 데이터 접근 및 캐시/세션 저장 처리
NoSQL / 세션 관리Spring Data MongoDBMongoDB 문서 지향 데이터베이스 접근을 위한 Spring Data 모듈
NoSQL / 세션 관리Spring SessionRedis 등 외부 저장소를 통한 분산 세션 관리 및 클러스터링 지원
REST APISpring HATEOAS하이퍼미디어(HATEOAS) 기반 REST API 지원, 응답에 링크 포함
REST APISpring Data REST RepositoriesJPA/MyBatis 엔티티를 자동으로 RESTful API로 노출해주는 모듈
REST APIRest Repositories HAL ExplorerHAL 포맷 기반 REST API 탐색기, UI로 API 탐색 가능
웹/실시간Spring WebSpring MVC 기반의 동기식 웹 애플리케이션 및 REST API 개발 지원
웹/실시간Spring WebFlux비동기 및 논블로킹 방식의 반응형 웹 애플리케이션 개발 (Reactor 기반)
웹/실시간Spring WebSocket웹소켓 기반의 실시간 양방향 통신 지원
웹/실시간STOMP 지원WebSocket을 위한 메시징 프로토콜(STOMP) 지원
메시징Spring for Apache KafkaKafka 기반 이벤트 스트리밍 및 비동기 메시지 처리 지원
메시징Spring for RabbitMQRabbitMQ 연동 및 메시징 큐 기반의 비동기 작업 처리 지원
클라우드 / MSASpring Cloud Config분산 시스템 구성 파일을 중앙에서 관리할 수 있는 외부 설정 서버
클라우드 / MSASpring Cloud Netflix Eureka마이크로서비스 서비스 디스커버리(등록 및 검색) 기능 제공
클라우드 / MSASpring Cloud GatewayMSA 환경을 위한 API Gateway. 라우팅, 필터링 기능 제공
클라우드 / MSASpring Cloud OpenFeign선언형 HTTP 클라이언트로, 인터페이스 기반으로 REST API 호출 가능
클라우드 / MSASpring Cloud Sleuth + Zipkin분산 환경에서의 로그 추적(Distributed Tracing) 및 호출 관계 분석 도구

의존성 구조 파악하기

Spring 프로젝트는 여러 모듈이 계층적으로 연결돼 있어, 각 모듈의 역할과 관계를 이해하는 것이 중요하다.

  • Gradle 의존성 트리 보는 방법
    • ./gradlew dependencies 명령어로 현재 프로젝트가 참조하고 있는 라이브러리들의 계층 구조 분석 가능
    • 어떤 모듈이 다른 모듈에 의존하는지 쉽게 파악 가능.
  • 주요 모듈
    • spring-core : Spring 프레임워크의 핵심 기능 (IoC 컨테이너 기반 동작)
    • spring-beans : Bean(스프링 관리 객체) 정의 및 주입 관련 기능
    • spring-aop : 관점 지향 프로그래밍(AOP) 기능 제공 (트랜잭션, 로깅 등 공통 기능 분리)
    • spring-context : ApplicationContext, 메시지 소스, 이벤트 발행 등 확장 컨테이너 기능 제공
    • spring-web : 웹 애플리케이션 개발을 위한 기본 모듈 (Servlet과의 통합 등)

핵심 모듈과 역할

Spring의 모듈은 역할별로 계층화되어 있으며, 특정 모듈은 하위 모듈을 기반으로 동작한다.

  1. 기반 모듈의 계층 구조
    • spring-core → spring-beans → spring-context
    • spring-core : IoC 컨테이너의 기반 기능 (리소스 로딩, 유틸리티 클래스 등)
    • spring-beans : 객체 생성·주입, 빈 생명주기 관리
    • spring-context : ApplicationContext, 이벤트, 메시지 국제화, ResourceLoader 등 고급 컨테이너 기능
  2. 웹 모듈의 계층 구조
    • spring-core → spring-web → spring-webmvc
    • spring-web : Servlet 기반 웹 개발 지원 (필터, 리스너, 기본 웹 유틸리티 제공)
    • spring-webmvc : DispatcherServlet 기반 MVC 패턴 웹 애플리케이션 개발 지원
  3. 데이터 접근/기타 모듈
    • spring-tx와 spring-jdbc의 관계
    • spring-jdbc : JDBC 템플릿 등 DB 접근 기능 제공
    • spring-tx : 선언적 트랜잭션 관리 지원 (JDBC, JPA 등과 결합)
    • spring-aop의 활용
    • 트랜잭션 처리, 로깅, 보안 등 횡단 관심사(Cross-Cutting Concerns)를 구현할 때 사용
profile
Backend engineer

0개의 댓글