{{위키데이터 속성 추적}}
{{소프트웨어 정보
|이름 = 스프링 프레임워크
|로고 = Spring Framework Logo 2018.svg
|로고크기 = 200px
|화면 =
|설명 = 오픈소스기반 애플리케이션 개발 프레임워크
|개발자 = [[피보탈 소프트웨어]]
|최근 버전 = {{wikidata|property|reference|edit|P348}}
|최근 버전 출시일 = {{wikidata|qualifier|P348|P577}} ({{Time ago| {{wikidata|qualifier|raw|P348|P577}} }})
|미리보기 버전 = 
|미리보기 버전 출시일 = 
|운영체제 = [[크로스 플랫폼]] (멀티 플랫폼)
|플랫폼 = [[자바 가상 머신]]
|종류 = [[애플리케이션 프레임워크]]
|라이선스 = [[아파치 라이선스]] 2.0
|웹사이트 = {{언어링크|en}} [http://www.springsource.org www.springsource.org]
}}
'''스프링 프레임워크'''({{llang|en|Spring Framework}})는 [[자바 (소프트웨어 플랫폼)|자바 플랫폼]]을 위한 [[오픈 소스]] [[애플리케이션 프레임워크]]로서 간단히 '''스프링'''(Spring)이라고도 한다. [[동적 웹페이지|동적인 웹 사이트]]를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 [[공공기관]]의 웹 서비스 개발 시 사용을 권장하고 있는 [[전자정부 표준프레임워크]]의 기반 기술로 쓰이고 있다.

== 역사 ==
[[로드 존슨]]이 2002년에 출판한 자신의 저서인 [https://web.archive.org/web/20120507191345/http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html Expert One-on-One J2EE Design and Development] 에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었다.
<ref>{{서적 인용|언어=en|저자=Rod Johnson |제목=Expert One-on-One J2EE Design and Developement |출판사=Wrox |연도=2002년 10월 |isbn=978-0-7645-4385-2}}</ref>
이 프레임워크는 2003년 6월에 최초로 [[아파치 라이선스|아파치 2.0 라이선스]]로 공개되었으며 주요 버전 이력은 다음과 같다.

* 1.0 : 2004년 3월
* 2.0 : 2006년 10월
* 2.5 : 2007년 11월
* 3.0 : 2009년 12월
* 3.1 : 2011년 12월
* 4.0 : 2013년 12월
* 5.0 : 2017년 9월
* 6.0 : 2022년 11월

2006년에 1.2.6 버전으로 Jolt Productive Award<ref>{{언어링크|en}} [http://www.ddj.com/architect/187900423?pgno=10 Jolt Winners 2006]</ref>와 Jax Innovation Award<ref>{{언어링크|de}} [http://jax-award.de/jax_award06/gewinner_de.php JAX Innovation Award Gewinner 2006] {{웨이백|url=http://jax-award.de/jax_award06/gewinner_de.php |date=20090817202514 }}</ref>를 수상하였다.

== 특징 ==
스프링은 다른 프레임워크에 비해 다음과 같은 특징을 가진다.
* 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
* 스프링은 [[Plain Old Java Object]] 방식의 프레임워크이다. 일반적인 [[J2EE]] 프레임워크에 비해 구현을 위해 특정한 [[인터페이스]]를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 [[라이브러리]] 등을 지원하기에 용이하고 객체가 가볍다.
* 스프링은 [[제어 반전]](IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
* 스프링은 [[의존성 주입]](DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
* 스프링은 [[관점 지향 프로그래밍]](AOP : Aspect-Oriented Programming)을 지원한다. 따라서 [[트랜잭션]]이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
* 스프링은 영속성과 관련된 다양한 서비스를 지원한다. [[iBATIS]]나 [[하이버네이트]] 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
* 스프링은 확장성이 높다. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

== 주요 모듈 ==
스프링에서 사용되는 주요 모듈은 다음과 같다.

=== 제어 역전 컨테이너 ===
[[제어 반전|제어 역전]](IoC: Inversion of Control) 컨테이너는 스프링의 가장 중요하고 핵심적인 기능으로서 자바의 [[반영 (컴퓨터 과학)|반영]](reflection)을 이용해서 객체의 생명주기를 관리하고 [[의존성 주입]](Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰준다. 이러한 기능들은 주로 환경설정을 담당하는 XML 파일에 의해 설정되고 수행되었으나 현재는 Auto Configuration을 사용한 [[.yml|야믈]](YML, YAML)로 구성하기도 한다.

=== 관점 지향 프로그래밍 프레임워크 ===
스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비지니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는 [[관점 지향 프로그래밍]](AOP)을 지원한다. 기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 [[AspectJ]]도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.

=== 데이터 액세스 프레임워크 ===
스프링은 [[데이터베이스]]에 접속하고 자료를 저장 및 읽어오기 위한 여러 가지 유명한 라이브러리, 즉 [[JDBC]], [[iBATIS]]([[MyBatis]]), [[하이버네이트]] 등에 대한 지원 기능을 제공하여 데이터베이스 프로그래밍을 쉽게 사용할 수 있다.

=== 트랜잭션 관리 프레임워크 ===
스프링은 추상화된 [[트랜잭션]] 관리를 지원하며 XML 설정파일 등을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.

=== 모델-뷰-컨트롤러 패턴 ===
스프링은 웹 프로그램밍 개발 시 거의 표준적인 방식인 '''Spring MVC'''라 불리는 [[모델-뷰-컨트롤러]](MVC) 패턴을 사용한다. DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.

=== 배치 프레임워크 ===
스프링은 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는 [[일괄 처리]](Batch Processing)을 지원하는 배치 프레임워크를 제공한다.
기본적으로 스프링 배치는 Quartz 기반으로 동작한다.

=== 스프링 부트 ===
스프링 부트 확장 기능은 독립적인 운영 등급의 스프링 기반 애플리케이션을 만들기 위한 "[[설정보다 관습]]" 솔루션이다.<ref>{{웹 인용|url=http://projects.spring.io/spring-boot/|title=Spring Boot|publisher=spring.io}}</ref>

== 같이 보기 ==
* [[구글 주스]]
* [[하이버네이트]]
== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [http://www.springsource.com 스프링 프레임워크 공식 사이트]
* {{언어링크|en}} [http://www.springsource.org 스프링 프레임워크 커뮤니티 사이트]
* [http://www.ksug.org 한국 스프링사용자 모임(KSUG)]

{{자바 (소프트웨어 플랫폼)}}
{{전거 통제}}

[[분류:자바 플랫폼, 엔터프라이즈 에디션]]
[[분류:웹 프레임워크]]
[[분류:관점 지향 프로그래밍]]