나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-11-13 21:45:30

Spring(프레임워크)

스프링부트에서 넘어옴
웹 프레임워크 기술
{{{#!wiki style="margin:0 -10px"
{{{#!folding [ 펼치기 / 접기 ]
{{{#!wiki style="margin:-5px 0px -10px; word-break:keep-all"
$ 유료 포함 • 취소선 단종 및 중단
<colbgcolor=#f6f6f9,#2f3241> 프론트엔드<colbgcolor=#fcfcfd,#272935> CSS BootstrapTailwind CSSBulmaFoundationSkeletonPico
JSX ReactSolidJSAstroPreactGatsbyRemixInfernoQwik
JS AngularSvelteBackbone.jsjQueryAstrohtmxEmber.jsLit11tyMarkoVanJSAlpine.js
Vue Vue.jsVuePressGridsomeQuasarAstro
Python Reflex
백엔드 Java SpringStrutsGWTGrailsJoobyPlay! FrameworkScala
Kotlin Ktor
JS ExpressNestJSkoaHonofastify
.NET ASP.NET$
PHP LaravelCodeigniterReasonablephalconSymfonyzendCakePHPFuelPHPYiiSlimPHPixe
Python DjangoFlaskFastAPI
Ruby Ruby on RailsSinatra
Go GinechoFiber
풀스택 JSX Next.jsAstroSolidStartRemixQwik City
JS SvelteKitFreshAstroMarko
Vue Nuxt.jsAstro
Java Vaadin$
Python StreamlitReflex
Rust RocketActixLeptosAxum
하이브리드 .NET Blazor
Dart Flutter
Kotlin Kotlin Multiplatform
}}}}}}}}} ||

<colbgcolor=#fff,#1f2023><colcolor=#6DB33F> Spring Framework
파일:Spring 로고.svg
개발 VMware
종류 애플리케이션 프레임워크
출시 2002년 10월 1일
언어 Java
라이선스 아파치 라이선스 2.0
버전 6.1.14 (2024년 10월 17일)
파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg
1. 개요2. 상세3. 주요 특징4. 모듈
4.1. Spring Boot4.2. Spring WebFlux
5. 여담6. 관련 문서

[clearfix]

1. 개요

스프링은 Java 기반의 애플리케이션 프레임워크이다.[1][2]

2. 상세

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

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

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

이게 무슨 소리인가 싶은 사람들을 위해 간단하게 설명하자면 군대로 비유하자면 위에서 명령을 내리는 지휘관이라기보다는 작전장교/행정보급관처럼 주변에서 정보를 일러주고 필요한 물건이나 인력을 가져다주는 부관, 참모라고 보면 된다. 그래서 용어도 Advice라는 용어를 사용한다.

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

Spring에서 공식 제공 하는 이클립스 기반의 IDESpring Tools를 제공 중이며, Visual Studio Code 버전으로도 제공하고 있다. 또한 JetBrainsIntelliJ IDEA도 Spring 프레임워크를 훌륭하게 지원하는 IDE이다.

3. 주요 특징

스프링 프레임워크의 특징은 아래와 같다.[3]

4. 모듈

파일:spring-overview.png

위 이미지에 보이듯 스프링 프레임워크는 총 6개의 모듈로 구성되어 있다.

4.1. Spring Boot

파일:스프링부트.png
스프링 부트는 스프링을 기반으로 하여 애플리케이션을 쉽게 생성하고 배포하기 위해 개발된 모듈이다. 기본적으로 의존성 관리와 라이브러리의 설정을 해주며, 웹 서버가 하나의 파일에 내장된 상태로 빌드되기 때문에 배포(Deploy)가 매우 간편해진다.

스프링 부트에서는 5가지 핵심 기능을 제공하여 사용자가 스프링 프레임워크를 편리하게 사용하도록 도와준다.

스프링 부트에서 지원하는 스프링 모듈은 종속성 이름 앞에 spring-boot-starter-*라는 접두사가 붙는다.

4.2. Spring WebFlux

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

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

5. 여담

6. 관련 문서



[1] Kotlin, Scala, Groovy도 공식적으로 지원하며, 특히 Kotlin은 거의 문제없이 사용이 가능하다.[2] 더 정확히, 스프링의 본질은 객체 지향 프레임워크에 더 가깝다. 순수 자바만으로 객체 간의 의존 관계 설정과 디자인 패턴의 구현, 관심사의 분리 등을 하기란 매우 힘든 일이며, 확장이나 모듈의 재사용도 어렵다. 그래서 스프링이 관리하는 컨테이너에 빈(Bean)으로서 객체를 등록하고, 빈의 관리와 제어를 개발자가 아닌 스프링이 하게 되어(제어 역전), 개발자는 확장이나 재사용이 유리하게 된다.[3] 난이도가 높기에 Okky 같은 커뮤니티에서도 이해의 어려움을 토로하는 경우가 많다.[4] 실제 약어는 Data Access Object이지만 xml 설정과 합해서 사실상 '데이터베이스 접근 객체'로 사용한다.