스프링의 세 가지 특징
회사에서 하는 세미나에서, 자바 세미나가 끝나고 이어서 스프링 세미나를 시작하였다.
세미나를 진행하면서, 강조했던 스프링의 세 가지 특징에 대해서 설명한 부분을 정리해보겠다.
1. IoC / DI, DL
스프링 프레임워크는 DL (Dependency Look-up)과 DI(Dependency Injection)를 통해서 IoC (Inversion of Control)을 구현합니다.
- 프로젝트를 진행하면서, 많은 라이브러리를 사용할 것이다.
- 특정 라이브러리에서 원하는 기능을 사용하려면
new
를 통해서 객체를 생성해야하는데, 이 객체를 생성하기 위해서는 다른 객체를 생성해야하는 등 복잡한 의존 관계가 발생하고 사용자는 파악하기 힘들다. - 따라서 스프링 프레임워크는 이러한 객체에 대한 생성과 객체간의 의존관계에 대한 관리를 개발자가 스프링에게 위임하게 된다.
- 개발자는 스프링이 요구하는 대로 설정만 하면, 설정에 따라서
Bean
을 생성하여 컨테이너에 담고Bean
간의 의존관계를 파악(Dependency Look-up
)하여 주입 (Dependency Injection
)해준다.
POJO (Plain Java Object)
- 스프링에서 생성되어 관리되는 POJO 기반의 객체를 우리는
Spring Bean
이라고 한다. - 여기서
POJO
는 단순getter/setter
만으로 구성되어 있으며 단순히new
를 통해서 생성 가능한 형태를 말한다. - 핵심은 특정 기술에 종속되는 어떤 클래스도 상속하지 않고 있으며 어떠한 인터페이스도 구현하고 있지 않은 자바 클래스이다.
2. AOP (Aspect Oriented Programming)
-
AOP는 관점지향 프로그래밍을 말한다.
-
대부분의 프로젝트는 고유한 핵심 기능 외에 트랜잭션, 보안처리(인증, 인가), 로깅 등의 공통 기능을 반드시 포함할 것이다.
-
별다른 정책이 없다면, 우리는 매번 프로젝트에서 똑같은 로직을 계속해서 개발할 것이고 버그가 발생하면 여기저기서 수정 작업을 할 것이다.
-
AOP는 어플리케이션의 기능을 핵심 기능과 공통 기능을 각각 종단 관심사와 횡단 관심사로 분리하고 공통 기능을 적절히 끼워넣을 수 있게 한다.
PSA (Portable Service Abstraction)
- 환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있는 환경을 제공하려는 추상화 구조를 말한다.
- 스프링은 언어가 아닌 기술(구현체의 기술)에 얽메이는 것에 큰 반감을 가짐 (
EJB
,Servlet
) - 스프링에서 동작할 수 있는 라이브러리들은
POJO
형태로 되어 있음 - 대표적인 추상화의 예
- JPA의 구현체(
Hibernate
,Eclipse Link
)를 추상화하는Spring Data JPA
Mybatis
를 추상화하는Spring-mybatis
Spring Transaction Manager
,Spring Cache Manager
- 서비스가 구동되는 환경(
Web MVC
,Web Flux
)에 대해서도 추상화를 지원한다.
- JPA의 구현체(
- 버전에 따라서 라이브러리 혹은 프레임워크의 내부 API의 설계나 인터페이스가 달라지더라도,
Sping
에서 적절히 감싸 추상화를 하기 때문에 우리의 소스코드는 변경될 일이 없다.