Spring 특징
IoC(Inversion of Control) : 제어의 역전
전통적으로 객체의 생명주기에서 모든 관리를 개발자가 도맡아 했었다.
IoC는 객체의 생명주기 중 객체를 생성하고 이를 필요한 곳(의존)에 대한 관리를 컨테이너에 의해 자동으로 처리하는 개념이다.
즉, 객체의 생성 과 의존성 관리 를 개발자가 하는것이 아니라 역전되어 컨테이너가 한다 는 개념이다.
DI(Dependency Injection) : 의존성 주입
제어의 역전에 의해 객체 간 의존성을 외부에서 주입 받는 개념
DI로 인해 결합도는 낮아지고 의존성 관리를 쉽게 만들어 테스트 및 유지보수를 용이하게 한다.
AOP(Aspect-Oriented Programming) : 관점 지향 프로그래밍
전체 시스템의 기능적인 관심사인 (수직) 핵심 관심사 중 여러 관심사에 공통으로 적용되는 횡단 관심사로 분리하고, 이를 통해 개발자의 생산성을 높이고, 코드의 재사용성을 높일 수 있다.
Spring에서 AOP가 가능한 이유는 모든 Bean을 컨테이너가 Proxy 객체로 관리하게 되고, 각 기능을 횡단으로 분리할 수 있는 기술적
기반을 마련했기 때문이다.
PSA(Portable Service Abstraction) : 이식 가능한 서비스 추상화
서비스와 관련된 여러 API 및 기술을 추상화하여 개발자가 특정 기술에 종속되지 않고 이식 가능한 코드를 작성할 수 있도록 지원한다는 개념
다소 생소한 개념이라 후려처서 설명해보면, 내가 A라는 PC에서 작성한 스프링 프레임워크 코드는 B라는 환경에서도 서비스가 구동될 수 있다는 개념이다.
예를 들면,
데이터 액세스 계층(Data Access Layer)
JDBC
JPA
메시징
JMS(Java Message Service)
AMQP(Advanced Message Queuing Protocol)
트랜잭션 관리(Trasaction Management)
PlatformTransactionManager
캐싱
CacheManager
...
즉 직접적인 구현체에 의존하지 않고 이를 추상화함으로써, 다른 구현체로 변경되어도 서비스에는 영향이 없도록 유연하고 모듈화 된 아키텍처를 가능하게 한다.