정의

Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

대한민국 공공기간의 웹 서비스 개발시 사용을 권장하고 있는 전자 정부 표준 프레임워크의 기반 기술이다.

특징

  1. 경량 컨테이너로서 자바 객체를 직접 관리한다.

각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

== 인스턴스를 준비하는 역할은 스프링이 하기에 인스턴스 준비코드를 작성할 필요 없음

  1. 스프링은 POJO(**Plain Old Java Object)**방식의 프레임워크이다.

Java에서 제공하는 API 외에 종속되지 않음

환경에 종속되지 않는 것의 장점

일반적인 Java EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.

  1. 스프링은 **제어의 역전(IoC : Inversion of Control)**을 지원한다.

스프링 컨테이너가 필요에 따라 개발자 대신 Bean 객체들을 관리(제어)해주는 행위를 함으로써, 객체에 대한 제어권이 컨테이너로 역전되었다고 한다.

  1. 스프링은 **의존성 주입(DI : Dependency Injection)**을 지원한다.

DI는 스프링 컨테이너가 지원하는 IoC의 형태이다.

클래스 사이의 의존관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것

  1. 스프링은 **관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)**을 지원한다.

기존의 OOP에서 기능별로 class를 분리했음에도 불구하고, 여전히 로그, 트랜잭션, 자원해제, 성능테스트, 등 처럼 공통적으로 반복되는 중복코드가 나오는 단점을 해결하고자 나온 방식

개발코드에서는 비지니스 로직에 집중하고 실행시 비지니스 로직 앞, 뒤 등 원하는 지점에 해당 공통 관심사(트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능)를 수행할 수 있게 함으로써 중복 코드를 줄일 수 있는 방법

  1. 스프링은 영속성과 관련된 다양한 서비스를 지원한다.

iBatis나 하이버네이트 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

  1. 스프링은 확장성이 높다.

스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.