사실 스프링 프레임워크는 스프링 삼각형으로 대표되는 POJO, IoC-DI, PSA, AOP가 근본(?)입니다.
Plain Old Java Object의 줄임말로, 흔히 우리가 작성하는 간단한 자바 클래스로 만들어지는 객체라고 생각하면 됩니다.
POJO를 이루기 위한 원칙이 있으며, 이는 EJB로 인해 촉발되었습니다.
예전에 제가 POJO에 대해 정리해 둔 글을 첨부합니다.
스프링은 제어의 역전을 훌륭히 따르는 프레임워크로 스프링 프레임워크를 IoC Container라고도 부릅니다. DI는 IoC를 다루는 방법 중 하나로, 의존성은 객체에서 의존하고 있는 외부 객체가 있는 것을 의미합니다. DI는 외부에서 의존성을 주입해주는 방법으로, 객체간 결합 고리를 끊을 수 있습니다. 스프링은 DI 방식을 지원해주며 스프링을 DI 프레임워크라고 부르기도 합니다.
스프링의 꽃 중의 하나입니다. Portable Service Abstraction의 줄임말로, Service Abstraction은 추상화를 제공하는 것을 의미하고, Portable이 붙음으로써 기술에 관계없는 추상화를 제공함을 의미합니다.
대표적으로 스프링이 제공하는 추상화는 Database 관련 추상화인 Spring Data 시리즈가 있습니다.
그 밖에도 캐시 추상화, Web관련 추상화도 있고, 스프링의 원칙을 따른다면 직접 PSA를 구현할 수도 있습니다.
AOP는 사실 OOP와 더 연관이 있습니다. 이전에 수아님이 설명하셨지만, AOP는 OOP를 보조하기 위한 성격의 패러다임입니다. AOP는 종단 관심사를 하나로 모아 중복을 제거할 수 있도록 해줍니다. 이를 이용해서 좀 더 중복되지 않는 코드를 만들 수 있습니다. Spring AOP는 AOP를 좀 더 편하게 쓸 수 있도록 해주고, 직접 지원하기도 합니다. 예를 들어 트랜잭션 추상화는 애노테이션 방식으로 적용시 Spring AOP가 적용되어, 트랜잭션이 메서드단위로 생성되도록 해줍니다.