스프링 프레임워크
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
스프링 프레임워크는 로드 존슨의 저서를 기반으로 2002년에 시작된 자바 플랫폼용 오픈 소스 애플리케이션 프레임워크이다. 2003년 아파치 2.0 라이선스로 처음 공개되었으며, 주요 버전 이력을 거쳐 2022년 11월 6.0 버전이 출시되었다. 경량 컨테이너, POJO 방식, 제어 반전(IoC), 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등의 특징을 가지며, 데이터 액세스, 트랜잭션 관리, MVC 패턴, 배치 프레임워크, 스프링 부트 등 다양한 모듈을 제공한다. 스프링은 자카르타 EE의 일부 기능을 대체하거나 보완하며, 대한민국 전자정부 표준프레임워크의 핵심 기술로 사용된다. 2022년에는 원격 코드 실행 취약점인 Spring4Shell이 발견되기도 했다.
로드 존슨이 2002년에 출판한 저서인 [https://web.archive.org/web/20120507191345/http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764543857.html Expert One-on-One J2EE Design and Development]에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었다.[37]
스프링 프레임워크는 다양한 서비스를 제공하는 여러 모듈을 포함하고 있다.
2. 역사
이 프레임워크는 2003년 6월에 최초로 아파치 2.0 라이선스로 공개되었다. 주요 버전 이력은 다음과 같다.버전 날짜 비고 0.9 2003년 1.0 2004년 3월 24일 첫 번째 프로덕션 릴리스. 2.0 2006년 3.0 2009년 4.0 2013년 5.0 2017년 6.0 2022년 11월 22일 6.1 2023년 11월 16일 6.2 2024년 11월 14일
2006년에 1.2.6 버전으로 Jolt 생산성 상[38]과 JAX 혁신 상[39]을 수상하였다.
3. 특징
4. 주요 모듈
스프링 모듈은 JAR 파일로 패키징된다.[5] 이러한 아티팩트는 메이븐[6] 또는 Gradle을 사용하여 Maven Central Repository를 통해 액세스할 수 있다.[7]
컨테이너에 의해 생성된 객체를 관리 객체 또는 빈이라고 한다.[8] 컨테이너는 XML(확장 가능한 마크업 언어) 파일을 로드하거나[9][10] 구성 클래스에서 특정 자바 어노테이션을 감지하여 구성할 수 있다. 이러한 데이터 소스에는 빈을 생성하는 데 필요한 정보를 제공하는 빈 정의가 포함되어 있다.
`@Configuration`은 클래스를 구성 클래스로 표시하는 스프링 전용 어노테이션이다. 구성 클래스는 스프링 `@Bean` 어노테이션으로 구성된다. 그러면 `ApplicationContext` 인터페이스는 `@Bean` 어노테이션으로 구성된 객체를 빈으로 반환한다. 자바 기반 구성은 XML 기반 구성보다 더 나은 타입 안전성과 리팩터링 기능을 제공한다는 장점이 있다.[11]
스프링 프레임워크는 자바 플랫폼 기반 애플리케이션을 만들려는 자바 개발자나 조직이 직면하는 과제에 해결책을 제공한다. 스프링 프레임워크는 자카르타 EE에만 얽매이지 않고 광범위한 통합이 가능하며, 이것이 널리 채택되는 중요한 이유이기도 하다.
스프링 프레임워크는 기존 프로그래밍 모델을 사용하지 않고 효율적으로 복잡한 애플리케이션을 만드는 데 필요한 기능을 제공한다. 또한, 자바 플랫폼에서도 새로운 기능을 빠르게 도입하는 것으로 알려져 있다.
스프링 프레임워크는 일관된 모델을 제공하며, 해당 모델을 자바 플랫폼에서 만들어지는 다양한 애플리케이션에 적용할 수 있게 해주는 프레임워크이다.
4. 1. 제어 역전 컨테이너
제어 반전(IoC: Inversion of Control) 컨테이너는 스프링 프레임워크의 핵심 기능으로, 반영(reflection)을 이용하여 자바 객체의 생명 주기를 관리하고 의존성 주입(Dependency Injection)을 통해 객체 간의 의존성을 해결한다. 이러한 설정은 주로 XML 파일을 통해 이루어졌으나, 최근에는 Auto Configuration을 사용한 야믈(YML, YAML) 파일을 통해 구성하기도 한다.
스프링 프레임워크의 핵심 컨테이너인 IoC 컨테이너는 리플렉션을 사용하여 자바 객체를 구성하고 관리하는 일관된 방법을 제공한다.[30] 컨테이너는 객체의 객체 생명 주기를 관리하며, 객체 생성, 초기화 메서드 호출, 객체 연결 및 구성을 담당한다.[30]
대부분의 경우 스프링 프레임워크의 다른 부분을 사용할 때 컨테이너를 반드시 사용할 필요는 없지만, 컨테이너를 사용하면 애플리케이션을 더 쉽게 구성하고 사용자 정의할 수 있다. 스프링 컨테이너는 애플리케이션을 구성하는 일관된 메커니즘을 제공하며, 소규모 애플리케이션부터 대규모 엔터프라이즈 애플리케이션까지 거의 모든 자바 환경과 통합된다.
프로그래머는 객체를 직접 생성하는 대신 스프링 설정 파일에서 객체 생성 방식을 정의한다. 마찬가지로 서비스와 컴포넌트를 직접 호출하는 대신, 스프링 설정 파일에서 어떤 서비스와 컴포넌트를 호출해야 하는지 정의한다. 이러한 IoC는 유지 관리 및 테스트의 용이성을 높인다.
제어 반전에는 의존성 주입과 의존성 조회가 있다. 객체는 의존성 조회 또는 의존성 주입을 통해 얻을 수 있다. 스프링 프레임워크는 오토와이어링(autowiring) 기능을 제공하는데, 이는 스프링 컨테이너를 사용하여 현재 팩토리에서 적절한 유형의 객체에 대한 자바빈(JavaBean) 속성에 지정된 의존성을 자동으로 충족시키는 것이다.
POJO(Plain Old Java Objects)를 오토와이어링하는 데 사용할 수 있는 여러 애노테이션이 있으며, 여기에는 스프링 관련 애노테이션인 `@Autowire`, `@Qualifier`, `@Primary`와 표준 자바 애노테이션인 `@Resource` 및 `@Inject`가 있다.
`@Qualifier` 애노테이션은 빈(bean)을 정의하는 클래스에 사용하여 스프링에게 이름을 사용하여 오토와이어링할 때 빈 생성의 우선순위를 지정하도록 알릴 수 있다.
`@Primary` 애노테이션은 빈을 정의하는 클래스에 사용하여 스프링에게 유형별로 오토와이어링할 때 빈 생성의 우선순위를 지정하도록 알릴 수 있다.
`@Resource` 애노테이션은 JSR 250을 준수하며, 이름으로 POJO에 대한 참조를 오토와이어링하는 데 사용된다. `@Inject` 애노테이션은 JSR 300을 준수하며, 유형별로 POJO에 대한 참조를 오토와이어링하는 데 사용된다.
스프링 프레임워크의 핵심은 제어 반전 컨테이너이며, 콜백을 사용하여 자바 객체의 설정 및 관리를 위한 일관된 수단을 제공한다. 이 컨테이너는 ''BeanFactory'', ''ApplicationContext'', ''Core container'' 등으로도 불린다.
이 컨테이너는 객체 생성, 객체 설정, 초기화 메서드 호출, 등록된 콜백 객체에 객체 전달 등 많은 책임과 확장 포인트를 가진다. 컨테이너 기능의 대부분은 객체의 라이프 사이클 형성에 관여하며, 이는 컨테이너가 제공하는 가장 중요한 기능 중 하나이다.
이 컨테이너가 생성하는 객체를 ''Managed Objects'' 또는 ''Beans''라고 부른다. 일반적으로, ''Bean definitions''를 포함하는 XML 파일을 로드함으로써 컨테이너가 설정을 수행한다. 객체를 얻기 위해서는 "의존성 참조" 또는 "의존성 주입"을 수행한다. "의존성 참조"는 호출 측에서 컨테이너 객체에 이름이나 타입을 지정하여 객체에 대해 문의하는 패턴이다. "의존성 주입"은 컨테이너가 생성자 또는 프로퍼티 또는 팩토리 메서드를 사용하여 다른 객체에 이름으로 객체를 전달하는 패턴이다.
4. 2. 관점 지향 프로그래밍 프레임워크
스프링은 로깅, 보안, 트랜잭션 등 핵심 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는 관점 지향 프로그래밍(AOP)을 지원한다. 기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 AspectJ도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.
스프링 프레임워크는 자체적인 관점 지향 프로그래밍(AOP) 프레임워크를 가지고 있으며, 이는 관점에서 횡단 관심사를 모듈화한다. 별도의 AOP 프레임워크를 생성한 이유는 설계, 구현 또는 구성에서 너무 복잡하지 않게 기본적인 AOP 기능을 제공하기 위해서이다. 스프링 AOP 프레임워크는 스프링 컨테이너를 최대한 활용한다.
스프링 AOP 프레임워크는 프록시 패턴 기반이다. 이는 실행 시간에 구성된다. 이로 인해 컴파일 단계 또는 로드 타임 위빙이 필요하지 않다. 반면에, 인터셉션은 조인 포인트에서 기존 객체에 대한 public 메서드 실행만 허용한다.
AspectJ 프레임워크와 비교하여 스프링 AOP는 덜 강력하지만, 덜 복잡하다. 스프링 1.2는 컨테이너에서 AspectJ 관점을 구성하는 것을 지원한다. 스프링 2.0은 AspectJ와의 통합을 더 추가했다; 예를 들어, 포인트컷 언어를 재사용하고 스프링 AOP 기반 관점과 혼합할 수 있다. 또한 스프링 2.0은 선언적 트랜잭션 관리 및 AspectJ 컴파일 타임 또는 로드 타임 위빙을 통한 의존성 주입과 같은 일반적인 스프링 기능을 제공하기 위해 AspectJ를 사용하는 스프링 관점 라이브러리를 추가했다. SpringSource는 스프링 Roo 및 Spring Insight와 같은 다른 스프링 프로젝트에서 AspectJ AOP를 사용하며, Spring Security는 AspectJ 기반 관점 라이브러리를 제공한다.
스프링 AOP는 스프링 프레임워크 내에서 횡단 관심사와 함께 작동하도록 설계되었다. 컨테이너에 의해 생성되고 구성된 모든 객체는 스프링 AOP를 사용하여 기능을 추가할 수 있다.
스프링 프레임워크는 트랜잭션 관리, 보안, 원격 액세스 및 JMX를 위해 내부적으로 스프링 AOP를 사용한다.
프레임워크의 버전 2.0부터 스프링은 AOP 구성에 대한 두 가지 접근 방식을 제공한다.
스프링 팀은 새로운 AOP 관련 용어를 도입하지 않기로 결정했다. 따라서 스프링 참조 문서 및 API에서 관점, 조인 포인트, 어드바이스, 포인트컷, 소개, 대상 객체 (어드바이스된 객체), AOP 프록시, 및 위빙과 같은 용어는 대부분의 다른 AOP 프레임워크(특히 AspectJ)와 동일한 의미를 갖는다.
4. 3. 데이터 액세스 프레임워크
스프링은 데이터베이스에 접속하고 자료를 저장 및 읽어오기 위한 여러 가지 유명한 라이브러리, 즉 JDBC, iBATIS(MyBatis), 하이버네이트 등에 대한 지원 기능을 제공하여 데이터베이스 프로그래밍을 쉽게 할 수 있도록 돕는다.
스프링의 데이터 액세스 프레임워크는 애플리케이션에서 데이터베이스 작업을 할 때 개발자가 직면하는 일반적인 어려움을 해결한다. Java에서 널리 사용되는 모든 데이터 액세스 프레임워크, 즉 JDBC, iBatis/마이바티스, Hibernate, 자바 데이터 오브젝트 (JDO, 5.x 이후 지원 중단), Jakarta Persistence API (JPA), Oracle TopLink, Apache OJB, Apache Cayenne 등에 대한 지원을 제공한다.
스프링은 지원되는 모든 프레임워크에 대해 다음과 같은 기능을 제공한다.
이러한 모든 기능은 스프링에서 각 지원 프레임워크에 대해 제공하는 템플릿 클래스를 사용할 때 사용할 수 있다. 그러나 이러한 템플릿 클래스는 침투적이며, 예를 들어 Hibernate API를 직접 사용하는 것보다 이점이 없다는 비판도 있었다. 이에 대응하여 스프링 개발자는 Hibernate 및 JPA API를 직접 사용할 수 있도록 했다. 하지만 이렇게 하면 투명한 트랜잭션 관리가 필요하며, 애플리케이션 코드는 더 이상 데이터베이스 리소스를 얻고 닫는 책임을 지지 않으며, 예외 변환을 지원하지 않는다.
스프링의 트랜잭션 관리와 함께 데이터 액세스 프레임워크는 데이터 액세스 프레임워크 작업을 위한 유연한 추상화를 제공한다. 스프링 프레임워크는 공통 데이터 액세스 API를 제공하지 않으며, 대신 지원되는 API의 모든 기능을 그대로 유지한다.
4. 4. 트랜잭션 관리 프레임워크
스프링은 추상화된 트랜잭션 관리를 지원하며, XML 설정 파일 등을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.
스프링의 트랜잭션 관리 프레임워크는 자바 플랫폼에 추상화 메커니즘을 제공한다. 이 추상화는 다음과 같은 기능을 수행할 수 있다.
이에 비해 JTA는 중첩 트랜잭션과 글로벌 트랜잭션만 지원하며, 애플리케이션 서버가 필요하다(경우에 따라 애플리케이션 서버에 애플리케이션을 배포해야 함).
스프링 프레임워크는 다음과 같은 여러 트랜잭션 관리 전략을 위한 `PlatformTransactionManager`를 제공한다.[4]
이 추상화 메커니즘 외에도 프레임워크는 애플리케이션에 트랜잭션 관리를 추가하는 두 가지 방법을 제공한다.
트랜잭션 관리 프레임워크를 통합하는 스프링의 데이터 접근 프레임워크와 함께, JTA 또는 EJB에 의존하지 않고도 구성을 통해 트랜잭션 시스템을 설정할 수 있다. 또한 트랜잭션 프레임워크는 메시징[13] 및 캐싱 엔진과 통합된다.[14]
4. 5. 모델-뷰-컨트롤러 (MVC) 프레임워크 (Spring MVC)
스프링은 Spring MVC라고 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용하는 웹 프로그래밍 개발 방식을 제공한다.
`DispatcherServlet`이 컨트롤러(Controller) 역할을 하며, 다양한 요청을 적절한 서비스에 분산시킨다. 각 서비스들은 요청을 처리하여 결과를 생성하고, 그 결과는 다양한 형식의 뷰(View) 서비스들을 통해 화면에 표시된다.
스프링 프레임워크는 원래 계획에 없었지만, 자체 모델-뷰-컨트롤러 (MVC) 웹 애플리케이션 프레임워크를 갖추고 있다.[17] 이는 당시 인기 있었던 자카르타 스트럿츠 웹 프레임워크의 부족한 디자인에 대한 반발과[18] 다른 프레임워크의 결함 때문에 개발되었다. 특히, 프레젠테이션 계층과 요청 처리 계층, 그리고 요청 처리 계층과 모델 간의 분리가 충분하지 않다고 판단했다.[18]
스트럿츠와 마찬가지로 스프링 MVC는 요청 기반 프레임워크이다. 이 프레임워크는 현대 요청 기반 프레임워크가 처리해야 하는 모든 책임에 대해 전략 패턴 인터페이스를 정의한다. 각 인터페이스의 목표는 간단하고 명확하여, 스프링 MVC 사용자가 원할 경우 자체 구현을 쉽게 작성할 수 있도록 돕는다. MVC는 더 깔끔한 프론트 엔드 코드를 가능하게 한다. 모든 인터페이스는 자바 서블릿 (Servlet API)에 긴밀하게 결합되어 있다. 일부에서는 서블릿 API에 이렇게 긴밀하게 결합된 것을, 웹 기반 애플리케이션에 대한 높은 수준의 추상화를 제공하는 데 실패한 스프링 개발자들의 문제점으로 보기도 한다. 그러나 이러한 결합은 개발자가 서블릿 API의 기능을 계속 사용할 수 있도록 하면서, 서블릿 API 작업을 용이하게 하는 높은 수준의 추상화 프레임워크를 제공한다.
`DispatcherServlet` 클래스는 프레임워크의 프론트 컨트롤러[19]이며, HTTP 요청의 실행 단계 동안 다양한 인터페이스로 제어를 위임한다.
스프링 MVC가 정의하는 가장 중요한 인터페이스와 그 책임은 다음과 같다:
각 인터페이스는 전체 프레임워크에서 중요한 책임을 갖는다. 이러한 인터페이스가 제공하는 추상화는 강력하여 구현에 다양한 변형을 허용한다. 스프링 MVC는 이러한 모든 인터페이스의 구현과 서블릿 API를 기반으로 하는 기능 세트를 제공한다. 그러나 개발자와 공급업체는 자유롭게 다른 구현을 작성할 수 있다. 스프링 MVC는 `Model`에 대한 데이터 중심 추상화로 자바 인터페이스를 사용하며, 여기서 키는 값으로 예상된다.
이러한 인터페이스의 구현을 쉽게 테스트할 수 있다는 점은 스프링 MVC가 제공하는 높은 수준의 추상화의 중요한 장점 중 하나이다. `DispatcherServlet`은 애플리케이션의 웹 계층을 구성하기 위해 스프링 제어 반전 컨테이너에 긴밀하게 결합되어 있다. 그러나 웹 애플리케이션은 컨테이너를 포함하여 스프링 프레임워크의 다른 부분을 사용할 수 있으며 스프링 MVC를 사용하지 않도록 선택할 수 있다.
사용자가 웹 브라우저에서 링크를 클릭하거나 양식을 제출하면 요청은 스프링 `DispatcherServlet`으로 이동한다. `DispatcherServlet`은 스프링 MVC의 프론트 컨트롤러이다. `DispatcherServlet`은 매우 사용자 정의가 가능하고 유연하다. 특히 `org.springframework.web.servlet.mvc.Controller` 또는 `org.springframework.stereotype.Controller` 어노테이션이 달린 클래스의 모든 구현보다 더 많은 유형의 핸들러를 처리할 수 있다. 하나 이상의 핸들러 매핑을 참조하며, 적절한 컨트롤러를 선택하고 요청을 해당 컨트롤러로 전달한다. `Controller`는 특정 요청을 처리하고 결과를 생성하며, 이를 `Model`이라고 한다. 이 정보는 자카르타 서버 페이지(JSP) 또는 Thymeleaf와 같은 html 또는 모든 프론트 엔드 기술로 형식이 지정되어야 한다. 이것이 애플리케이션의 `View`이다. 모든 정보는 `Model` 및 `View` 객체에 있다. 컨트롤러가 특정 보기에 연결되지 않은 경우, `DispatcherServlet`은 `ViewResolver`의 도움을 받아 실제 `View` (JSP 등)를 찾는다.
서블릿 명세 버전 3.0부터 DispatcherServlet을 구성하는 몇 가지 방법이 있다:
```xml
```4. 6. 배치 프레임워크 (Spring Batch)
스프링 배치는 특정 시간대에 실행되거나 대용량의 자료를 처리하는데 쓰이는 일괄 처리(Batch Processing)를 지원하는 프레임워크이다. Quartz 기반으로 동작하며, 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 제공한다.
최적화 및 분할 기술을 통해 높은 처리량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공한다.
Spring Batch는 일련의 작업을 실행한다. 작업은 여러 단계로 구성되며, 각 단계는 "읽기-처리-쓰기" 작업 또는 단일 작업(tasklet)으로 구성된다. "단일" 작업은 tasklet이라고도 하며, 단계 시작 또는 완료 전후에 리소스를 정리하는 것과 같은 단일 작업을 수행한다.
"읽기-처리-쓰기" 프로세스는 다음과 같은 단계로 구성된다. 쉼표로 구분된 값(CSV), XML 또는 데이터베이스에서 데이터를 "읽고", 이를 "처리"한 다음 다른 리소스(CSV, XML 또는 데이터베이스)에 "쓴다". 예를 들어, 한 단계는 CSV 파일에서 데이터를 읽고 이를 처리하여 데이터베이스에 쓸 수 있다. Spring Batch는 CSV, XML 및 데이터베이스를 읽고 쓰기 위한 많은 클래스를 제공한다.
단계는 함께 연결되어 작업으로 실행될 수 있다.
4. 7. 스프링 부트 (Spring Boot)
스프링 부트는 스프링의 관례 기반 설정 솔루션으로, "그냥 실행"할 수 있는 독립 실행형 프로덕션급 스프링 기반 애플리케이션을 만드는 데 사용된다.[20] 스프링 플랫폼과 타사 라이브러리의 최상의 구성 및 사용에 대한 스프링 팀의 "독단적인 시각"으로 사전 구성되어 있어 최소한의 번거로움으로 시작할 수 있다. 대부분의 스프링 부트 애플리케이션은 스프링 구성을 거의 필요로 하지 않는다.
스프링 부트의 주요 특징은 다음과 같다.4. 8. 기타 모듈
스프링 프레임워크는 분산 환경에서 애플리케이션 간의 통신을 쉽게 구현할 수 있도록 다양한 원격 호출(RPC) 기술을 지원한다.
주요 기능:
지원 프로토콜 및 제품:
프로토콜/제품 | 설명 |
---|---|
Hessian | Caucho에서 유지 관리하는 오픈 소스 바이너리 직렬화 프로토콜이다. |
Burlap | Caucho에서 유지 관리하는 오픈 소스 XML 기반 바이너리 프로토콜이다. |
RMI (1) | 스프링에 특정한 RMI 인프라를 사용하는 메서드 호출 |
RMI (2) | 일반 RMI 사용법을 준수하는 RMI 인터페이스를 사용하는 메서드 호출 |
RMI-IIOP (CORBA) | RMI-IIOP/CORBA를 사용하는 메서드 호출 |
로컬 EJB 무상태 세션 빈 연결 | Enterprise JavaBean 클라이언트 통합 |
원격 EJB 무상태 세션 빈 연결 | Enterprise JavaBean 클라이언트 통합 |
SOAP | 아파치 Axis 웹 서비스 프레임워크와의 통합[1] |
아파치 CXF는 서버 측에서 객체를 RPC 스타일로 내보내기 위해 스프링 프레임워크와 통합을 제공한다.[1]
스프링 원격 접근 프레임워크에서 지원하는 RPC 스타일 프로토콜 및 제품(아파치 Axis 지원 제외)에 대한 클라이언트 및 서버 설정은 스프링 코어 컨테이너에서 구성된다.
대안적인 오픈 소스 구현으로 Cluster4Spring이 있으며, 다양한 원격 호출 방식(1-1, 1-many, 동적 서비스 검색)을 지원한다.
5. 스프링과 자카르타 EE (Jakarta EE)
스프링 프레임워크는 자바 플랫폼 기반 애플리케이션 개발에 필요한 기능을 제공하며, 자카르타 EE (이전의 Java EE, J2EE)의 일부 기능을 대체하거나 보완한다. 특히, EJB (Enterprise JavaBeans)의 복잡성을 해결하기 위해 스프링의 IoC 컨테이너, AOP, 데이터 접근 추상화 등이 널리 사용된다.[23]
스프링은 EJB 3.0과 부분적으로 호환되지만, 완전한 표준 준수를 목표로 하지는 않는다. 스프링은 자체적인 프로그래밍 모델이 더 강력하다고 주장한다.[23]
대한민국에서는 스프링 프레임워크가 전자정부 표준프레임워크의 핵심 기술로 사용되면서, 자카르타 EE 기술보다는 스프링 기반 개발이 주류를 이루고 있다.
6. 취약점
2022년 4월, 스프링 프레임워크의 특정 버전에 영향을 미치는 원격 코드 실행 취약점이 공개되었다. 이 취약점은 최근의 Log4Shell 취약점과 유사한 개념 증명을 가지고 있어, 공격자가 취약한 시스템에서 셸에 접근하거나[24], 심지어는 완전한 제어 권한을 얻을 수 있다는 점에서 'Spring4Shell'이라는 이름이 붙여졌다.[25]
참조
[1]
웹사이트
Spring Framework 1.0 Final Released
https://spring.io/bl[...]
2014-03-24
[2]
문서
Jolt winners 2006
http://www.ddj.com/a[...]
[3]
웹사이트
JAX Innovation Award Gewinner 2006
http://jax-award.de/[...]
2009-08-12
[4]
웹사이트
Spring Framework 3.2.5 Released
https://spring.io/bl[...]
2013-11-07
[5]
웹사이트
Announcing Spring Framework 4.0 GA Release
https://spring.io/bl[...]
Spring blog
2013-12-12
[6]
웹사이트
Spring Framework 4.2 goes GA
http://spring.io/blo[...]
Spring Blog
2015-07-31
[7]
웹사이트
Spring Framework 4.2 goes GA
http://spring.io/blo[...]
Spring Blog
[8]
웹사이트
Spring Framework Versions: Supported Versions
https://github.com/s[...]
[9]
웹사이트
Reactive Spring
http://spring.io/blo[...]
Spring Blog
2016-02-09
[10]
웹사이트
Spring Framework 6.0 goes GA
https://spring.io/bl[...]
Spring Blog
2022-11-16
[11]
문서
Spring Framework documentation for the Core Container
http://docs.spring.i[...]
[12]
문서
What is the difference between the depencylookup and dependency injection - Spring Forum
http://forum.springs[...]
Forum.springsource.org
2009-10-28
[13]
문서
Spring AOP XML Configuration
http://howtodoinjava[...]
[14]
문서
AspectJ Annotation Configuration
http://howtodoinjava[...]
[15]
문서
Hibernate VS Spring
http://houseofhaug.w[...]
[16]
웹사이트
Spring Data JPA for Abstraction of Queries
https://www.tatvasof[...]
2018-02-06
[17]
문서
Introduction to the Spring Framework
http://www.theserver[...]
[18]
서적
Johnson, Expert One-on-One J2EE Design and Development, Ch. 12. et al.
[19]
문서
Patterns of Enterprise Application Architecture: Front Controller
http://www.martinfow[...]
[20]
웹사이트
Spring Boot
http://projects.spri[...]
spring.io
[21]
웹사이트
About Spring Boot
https://aristeksyste[...]
2020-03-18
[22]
문서
Spring VS EJB3
http://www.andygibso[...]
[23]
웹사이트
Pitchfork FAQ
http://www.springsou[...]
2006-06-06
[24]
웹사이트
Spring4Shell: critical vulnerability in Spring - Kaspersky official blog
https://www.kaspersk[...]
[25]
뉴스
VMware sprung by Spring4shell vulnerability
https://itnews.com.a[...]
itnews.com.au
2022-04-04
[26]
문서
v6.1.14.RELEASE
https://github.com/s[...]
[27]
문서
Spring.NET - Application Framework
http://www.springfra[...]
[28]
문서
Jolt winners 2006
http://www.ddj.com/a[...]
[29]
문서
Spring OSTATIC
[30]
웹사이트
Pitchfork FAQ
http://www.springsou[...]
2006-06-06
[31]
문서
Apache ObJectRelationalBridge - OJB
http://db.apache.org[...]
[32]
문서
Apache Cayenne » Index
http://objectstyle.o[...]
[33]
문서
Hibernate hates Spring
http://houseofhaug.n[...]
[34]
문서
Introduction to the Spring Framework by Rod Johnson
http://www.theserver[...]
[35]
서적
Johnson, Expert One-on-One J2EE Design.., Ch. 12. et al.
[36]
문서
Front Controller
http://www.martinfow[...]
MartinFowler.com
[37]
서적
Expert One-on-One J2EE Design and Developement
Wrox
[38]
문서
Jolt Winners 2006
http://www.ddj.com/a[...]
[39]
문서
JAX Innovation Award Gewinner 2006
http://jax-award.de/[...]
2009-08-17
[40]
웹인용
Spring Boot
http://projects.spri[...]
spring.io
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com