최근 수정 시각 : 2025-09-13 02:40:45

Spring(프레임워크)



웹 프레임워크 라이브러리
{{{#!wiki style="margin:0 -10px"
{{{#!folding [ 펼치기 / 접기 ]
{{{#!wiki style="margin:-5px 0px -10px; word-break:keep-all"
$ 유료 포함 • 취소선 단종 및 중단
<colbgcolor=#f6f6f9,#2f3241> 프론트엔드
CSS BootstrapTailwind CSS$shadcnBulmaFoundationSkeletonPico
JSX ReactSolidJSAstroRemixPreactGatsbyInfernoQwik
JS AngularSvelteBackbone.jsjQueryAstrohtmxEmber.jsLit11tyMarkoVanJSAlpine.js
Vue Vue.jsQuasarAstroVuePressGridsome
Python Reflex
백엔드
Java SpringStrutsGWTGrailsJoobyPlay! FrameworkScala
Kotlin Ktor
JS ExpressNestJSkoaHonofastify
.NET ASP.NET$
PHP LaravelCodeigniterReasonablephalconSymfonyzendCakePHPFuelPHPYiiSlimPHPixe
Python DjangoFlaskFastAPIBottle
Ruby Ruby on RailsSinatra
Go GinechoFiber
풀스택
JSX Next.jsAstroSolidStartRemixQwik City
JS SvelteKitFreshAstroMarko
Vue NuxtAstro
Java Vaadin$
Python StreamlitReflex
Rust RocketActixLeptosAxum
하이브리드
.NET Blazor
Dart Flutter
Kotlin Kotlin Multiplatform
}}}}}}}}} ||
<colbgcolor=#fff,#1f2023><colcolor=#6DB33F> Spring Framework
파일:Spring 로고.svg
개발 VMware
종류 애플리케이션 프레임워크
출시 2004년 3월 24일
언어 Java
라이선스 아파치 라이선스 2.0
버전 6.2.11 (2025년 9월 11일)
파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

1. 개요2. 상세3. 주요 특징4. 모듈5. 버전 목록
5.1. Spring Boot
5.1.1. 버전 목록
5.2. Spring WebFlux
6. 개발7. 여담8. 관련 문서


1. 개요

#!syntax java
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/")
    public String hello() {
        return "Hello, World!";
    }
}


2004년 3월에 출시된 Java 기반의 애플리케이션 프레임워크이다.[1][2]

2. 상세

로드 존슨(Rod Johnson)이 2002년 10월 1일에 출판한 저서 Expert One-on-One J2EE Design and Development에서 선보인 소스 코드를 시작으로 점점 발전하게 되었다. 2003년 6월에 최초로 공개된 후, 2004년 3월 24일에 버전 1.0이 출시되었다. Spring 프레임워크 프로젝트를 간편하게 설정할 수 있도록 도와주는 서브 프로젝트 Spring Boot가 있으며, 현재는 Spring Boot 위주로 기능이 추가되고 있다.

'Spring'이라는 이름의 유래는 1997년에 IBM이 Java EE(엔터프라이즈 에디션)의 스펙을 기반으로 구현하여 1998년에 JavaOne에서 버전 1.0이 출시된 EJB(Enterprise JavaBeans)가 기술의 복잡도가 증가해서 성능이 느렸던 것을 탈피하여, EJB 시절을 '겨울'에 빗대어 겨울 후의 '봄'으로 새로운 시작한다는 것을 의미하는 Spring(봄)이 되었다. 그러나 아직 춥다 Java Virtual Machine에서 작동하며, 아파치 라이선스 2.0을 따르는 오픈 소스 프레임워크이다.

2009년에 한국에서 출시된 전자정부표준프레임워크의 기반이 되는 기술이며, 한국정보화진흥원에서는 공공 기관의 웹 서비스 제공 시 Spring을 권장하고 있다.

여러 가지 문제점을 해결하기 위한 디자인 패턴, 아키텍처 스타일, 아키텍처 패턴이 적용되어 있어서 어려운 용어가 많이 사용되는 프레임워크인데, 책을 보고 공부하기보다는 'Spring으로 게시판 만들기' 같은 것의 예제를 병행하면서 공부하는 게 더 이해가 빠를 것이다. Spring은 프레임워크, 즉 제품이기 때문이다.

Spring 공식 웹 사이트에서 제공하는 이클립스 기반의 IDE인 'Spring Tools for Eclipse'를 제공 중이고, 텍스트 에디터Visual Studio Code 기반의 'Spring Tools for Visual Studio Code'로도 제공하고 있으며, JetBrains의 IDE인 IntelliJ IDEA도 Spring 프레임워크를 훌륭하게 지원하고 있다. 2020년대부터 IntelliJ IDEA가 Java 개발 진영의 대세가 되면서 Spring 프레임워크 프로젝트 개발의 대표적인 IDE로 자리 잡은 상태.

3. 주요 특징

Spring 프레임워크의 특징은 아래와 같다. 난이도가 높기에 Okky 같은 커뮤니티에서도 이해의 어려움을 토로하는 경우가 많다.
  • POJO(Plain Old Java Object) 방식: POJO는 Java EE의 EJB를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하며 나타난 용어다. 별도의 프레임워크 없이 Java EE를 사용할 때에 비해 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍다.
  • 관점 지향 프로그래밍(Aspect Oriented Programming, AOP): 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있다. AspectJ를 포함하여 사용할 수 있고, Spring에서 지원하는 실행에 조합하는 방식도 지원한다. 이 분리 관리 한다는 개념이 처음에 이해하기가 어려운데, 추상/부모/클래스나 인터페이스로 관리된다는 게 아니라 모듈을 관리해 주는 모듈을 상하/인터페이스 관계없이 따로 마련한다는 개념에 가깝다. 더 쉽게 이야기하자면 군대에서 보급품을 받는다고 가정하자. 상급 부대(연대, 사단)에서 보급품을 내려 받는 게 아니라. 국군복지단이나/군수사령부 아저씨가 직접 가져오는 것을 생각해 보면 쉽다. 당연히 군수사령부 예하 부대 아저씨도 대대 소속이므로 상하 관계가 없지만 보급품에 한해서만 배부해 주는 것이다.
  • 의존성 주입(Dependency Injection, DI): 프로그래밍에서 구성 요소 간의 의존 관계가 소스 코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식이다. 코드 재사용을 높여 소스 코드를 다양한 곳에 사용할 수 있으며 모듈 간의 결합도도 낮출 수 있다. 계층, 서비스 간에 의존성이 존재하는 경우 Spring 프레임워크가 서로 연결시켜 준다.
  • 제어 역전(Inversion of Control, IoC): 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용했다. 제어 역전은 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 된다. 즉, 제어권이 프레임워크에게 있어 필요에 따라 Spring 프레임워크가 사용자의 코드를 호출한다.
  • Bean 생명 주기 관리: Spring 프레임워크는 Bean이라는 이름으로 프레임워크에서 사용되는 Java 객체(혹은 Component)의 생성, 소멸을 직접 관리한다. 우선순위 설정, Configutaion을 통해 코드로 작성해 두고, 필요한 객체만을 사용할 수도 있다.

4. 모듈

파일:spring-overview.png

위 이미지에 보이듯 Spring 프레임워크는 Spring 2 기준으로 총 6개의 모듈로 구성되어 있다. 단, Spring 3나 Spring 4와는 구성이 다소 다르다.
  • Core: 의존성 주입(DI)[3] 기반 제어 역전(IoC)[4] 기능을 제공한다.
  • DAO: JDBC 추상 계층을 제공한다. JDBC는 자바의 데이터베이스 커넥터이다.[5] 데이터가 담겨있는 VO(Value Object) 클래스를 이용해 사용한다.
  • ORM: JPA와 같은 ORM이나 MyBatis 같은 데이터베이스 API 등과 통합할 수 있는 기능을 제공한다.
  • AOP: Spring 프레임워크에서 제공하는 AOP 패키지를 제공한다.
  • Web: Spring Web MVC, Struts, WebWork 등 웹 애플리케이션 구현에 도움되는 기능을 제공한다.
  • JEE: EJB, JMX 등의 엔터프라이즈 J2EE 스펙에 관한 기능을 제공한다.

5. 버전 목록

  • 0.9.0 : 2003년 6월
  • 1.0.0 : 2004년 3월 24일
  • 2.0.0 : 2006년 10월
  • 3.0.0 : 2009년 12월 17일
  • 4.0.0 : 2013년 12월 12일
  • 5.0.0 : 2017년 9월 28일
  • 6.0.0 : 2022년 11월 16일

5.1. Spring Boot

파일:스프링부트.png

2014년 4월에 출시된 Java 기반의 애플리케이션 프레임워크로, 기존 Spring 프레임워크의 복잡한 설정 과정을 간소화하고 빠르게 애플리케이션을 개발할 수 있도록 설계되었다. 2013년 8월에 0.5.0 버전으로 처음 공개되었으며, Spring Framework의 강력한 기능을 유지하면서도 초보 개발자부터 숙련된 개발자까지 쉽게 사용할 수 있도록 다양한 기능을 제공한다.

Spring Boot에서는 5가지 핵심 기능을 제공하여 사용자가 Spring 프레임워크를 편리하게 사용하도록 도와준다.
  1. 자동 설정(Auto Configuration): Spring Boot는 애플리케이션의 설정을 자동화하여 개발자가 수동으로 XML이나 Java Config를 작성해야 하는 번거로움을 덜어준다. 기본적으로 application.properties 또는 application.yml 파일을 통해 설정을 정의할 수 있다.
  2. 내장 서버 지원(Embedded Server): Spring Boot는 Tomcat, Jetty, Undertow와 같은 내장 웹 서버를 제공하여 별도의 서버 설치 없이 애플리케이션을 실행할 수 있게 한다. 이를 통해 빠르게 애플리케이션을 테스트하거나 배포할 수 있다.
  3. 스타터 의존성(Starter Dependencies): Spring Boot는 특정 기능에 필요한 라이브러리를 묶어 제공하는 스타터 의존성을 제공한다. 예를 들어, Spring MVC를 사용할 경우 spring-boot-starter-web 의존성을 추가하면 필요한 라이브러리들이 자동으로 포함된다.
  4. 프로덕션 준비 기능(Production Ready Features): Spring Boot는 애플리케이션 모니터링, 상태 점검, 메트릭 수집 등을 위한 Actuator를 제공한다. 이를 통해 운영 환경에서도 애플리케이션을 효율적으로 관리할 수 있다.
  5. 간편한 실행: Spring Boot 애플리케이션은 독립 실행형 JAR 파일로 빌드되어 java -jar 명령으로 쉽게 실행할 수 있다.

단순히 빠른 개발뿐만 아니라 확장성과 유연성, 프로덕션 준비 상태 등을 고려한 현대적인 Java 애플리케이션 개발에 적합한 프레임워크이다. 다양한 프로젝트에 적용 가능하며, 특히 대규모 프로젝트에 많이 채택되는 마이크로서비스 아키텍처(MSA) 스타일에서 자주 사용된다.

5.1.1. 버전 목록

  • 0.5.0 : 2013년 8월 6일
  • 1.0.0 : 2014년 4월 1일
  • 2.0.0 : 2018년 3월 1일
  • 3.0.0 : 2022년 11월 25일

5.2. Spring WebFlux

2017년 Spring 5 출시와 함께 도입된 모듈로, 기존의 Servlet 기반의 Spring Web MVC에서는 지원하지 않는 non-blocking과 함수형 프로그래밍, reactive stream을 지원하기 위해 API를 기반으로 구축된 모듈이다. Reactive Streams[6]

비동기/non-blocking의 특성상 리퀘스트 수가 많아지면 많아질수록 Spring MVC에 비해 탁월한 성능을 보이지만, CPU 의존적인 처리에서는 성능 하락이 있고 코드 작성이 보다 까다로워진다는 단점이 있다.

최근 들어 Java 21에서 Virtual Theads를 출시하였고 Spring에서 사용 가능함에 따라 굳이 어려운 WebFlux를 사용하지 않고 MVC를 다시 채택하는 경우가 늘었다.

6. 개발

자세한건 Spring(프레임워크)/개발 문서 참고.

7. 여담

  • 2006년 1.2.6 버전으로 Jolt Productive Award와 Jax Innovation Award를 수상하였다.
  • 2022년 11월에 출시된 Spring 6는 최소 Java 버전을 17로 상향했다. https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6 2017년에 출시된 Spring 5 버전부터 Java 8을 최소 요구 사항으로 설정한 방침과 달리 파격적인 행보를 보이고 있다.
  • Spring Boot 2의 마지막 버전인 2.7의 OSS 지원 종료가 2023년 11월 24일 만료되어, Spring Boot 프로젝트 생성 사이트인 https://start.spring.io에서는 더 이상 Spring Boot 2 이하 프로젝트 생성을 지원하지 않으며, 이와 함께 Java 8 지원 또한 중단되었다. 따라서, 최소 Java 버전 요구 사항은 17이다.

8. 관련 문서


[1] Kotlin, Scala, Groovy도 공식 지원하며, 특히 Kotlin은 거의 문제없이 사용이 가능하다.[2] 더 정확히 Spring의 본질은 객체 지향 프레임워크에 더 가깝다. 순수 Java만으로 객체 간의 의존 관계 설정과 디자인 패턴의 구현, 관심사의 분리 등을 하기란 매우 힘든 일이며, 확장이나 모듈의 재사용도 어렵다. 그래서 Spring이 관리하는 컨테이너에 Bean으로서 객체를 등록하고, Bean의 관리와 제어를 개발자가 아닌 Spring이 하게 되어(제어 역전), 개발자는 확장이나 재사용이 유리하게 된다.[3] 객체가 사용하는 의존 객체를 자신이 직접 만들지 않고 외부로부터 전달받아 사용하는 방식[4] 프로그램의 실행 흐름과 객체 생명주기 관리를 개발자 코드가 아닌 Spring 컨테이너가 컨트롤한다.[5] 실제 약어는 Data Access Object이지만 xml 설정과 합해서 사실상 '데이터베이스 접근 객체'로 사용한다.[6] Kotlin 코루틴도 지원한다.