Spring 특징
- 경량 컨테이너로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
- 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크
- 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에
- 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
- 스프링은 제어의 역행(IoC : Inversion of Control)을 지원
- 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
- 스프링은 의존성 주입(DI : Dependency Injection)을 지원
- 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
- 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원
- 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
- 스프링은 영속성(dao,영속객체,persistence)과 관련된 다양한 서비스를 지원
- 객체관계매핑(ORM – Object Relational mapping) DB와 객체지향프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
- iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
- 스프링은 확장성이 높음
- 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가
- 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.
제어의 역행(IoC)
- ‘제어의 역전’ 또는 ‘역제어’라는 뜻으로 객체에 대한 제어권이 바꿘 것을 의미한다.
- 기존의 개발자들이 New 연산자, 인터페이스 호출, 팩토리 호출방식으로 객체의 인스턴스를 생성함으로 인스턴스 생성 방법에 대한 제어권을 개발자들이 가지고 있었다.
- IoC란 인스턴스 생성의 제어를 개발자 본인이 아닌 다른 누군가에게 해주는 컨테이너이다.
- 어떤 모듈이 제어를 가진다는 것은 ‘어떤 모듈을 사용할 것인지’, ‘모듈의 함수는 언제 호출할 것인지’ 등을 스스로 결정한다는 것을 의미한다.
- 즉, IoC란 인스턴스의 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다는 뜻이다.
의존성 주입(DI)
- DI란 모듈 간의 의존성을 모듈의 외부(컨테이너)에서 주입시켜주는 기능으로 IoC의 한 종류이다.
- 런 타임시 사용하게 될 각 모듈 간의 의존 관계를 컨테이너가 빈 설정 정보를 바탕으로 자동적으로 연결해 주는 것을 의미한다.
관점지향 프로그래밍(AOP)
- 특정 기능이 있는 클래스 안에는 본질적인(핵심적인) 처리만 기술하고, 본질적이지 않은(추가 기능, 부가 기능)기능을 따로 구현하는 개발 방법이다.
- 트랜잭션이나 로깅, 보안 인증과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리한다.
- 기존의 프로그래밍에서는 각 객체별로 처리했던 것을 각 관점별로 외부에서 접근을 하는 것이 AOP의 핵심이다.