본문으로 건너뛰기

스프링의 특징

스프링의 핵심 개발자들이 쓴 Professional Spring Framework 라는 책에서는 스프링의 정수(essence)는 "엔터프라이즈 서비스 기능을 POJO에 제공하는 것" 이라고 했다.

POJO(Plain Old Java Object)

객제지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지 정의해놓은 설계 정보로 구분된다.

IoC/DI(Inversion of Control/Dependency Injection)

제어의 역전(IoC)은 스프링에서만 적용되는 개념은 아니다.
간단하게 설명하자면 프로그램의 제어 흐름 구조가 바뀌는 것이다.
프레임워크는 제어의 역전이 적용된 대표적인 기술이라고 볼 수 있다.
의존성 주입(DI)은 클래스 사이의 의존관계를 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해 주는 것을 의미한다.
스프링은 IoC/DI를 통해 싱글톤 형태의 오브젝트의 생성, 관계 설정, 공급에 대한 기능을 제공한다. 그렇기 때문에 IoC 컨테이너 또는 DI 컨테이너라고도 불린다.

토비의 스프링에서는 DI 컨테이너라는 용어에 대해 다음과 같이 설명하고 있다.

IoC가 매우 느슨하게 정의돼서 폭넓게 사용되는 용어라는 점이다. 때문에 스프링을 IoC 컨테이너라고만 해서는 스프링이 제공하는 기능의 특징을 명확하게 설명하지 못한다. … 새로운 용어를 만드는 데 탁월한 재능이 있는 몇몇 사람의 제안으로 스프링이 제공하는 IoC 방식의 핵심을 짚어주는 의존관계 주입(DI)이라는, 좀 더 의도가 명확히 드러나는 이름을 사용하기 시작했다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불린다. … 그래서 초기에는 주로 IoC 컨테이너라고 불리던 스프링이 지금은 의존관계 주입 컨테이너 또는 DI 컨테이너라고 많이 불린다.
토비의 스프링 p.111

AOP(Aspect Oriented Programming)

애플리케이션의 핵심적인 기능에서 부가적인 기능을 분리해서 모듈화하는 것
예) 핵심 기능 = 비즈니스 로직, 부가 기능 = 로깅, 트랜잭션
관점 지향 프로그래밍이라고 하는데 이는 OOP와 같이 독립적인 프로그래밍 패러다임이 아닌 보조적인 기술이다.

PSA(Portable Service Abstraction)

환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 기술이다.
POJO로 개발된 코드는 특정 환경이나 구현 방식에 종속적이지 않아야 한다.
스프링은 POJO 코드가 특정 기술에 종속되지 않게 일관성 있는 서비스 추상화 기술을 제공한다.

참고 자료

Spring Core, Spring.io
토비의 스프링 3.1, 이일민