[Spring] 스프링의 삼각형(IoC/DI, AOP, PSA)
스프링의 삼각형, 3대 요소(Spring Triangle)
스프링의 삼각형(Spring Triangle), 즉, 스프링의 핵심 3요소가 있다.
1. IoC/DI
IoC란 제어의 역전으로 스프링 컨테이너가 객체에 대한 제어권을 가지고 있는 것이며, DI는 의존 관계 주입으로 의존 관계를 외부에서 결정하는 것을 의미한다.
IoC/DI 예제 코드 및 의존성 주입 3가지 방법 등에 대한 자세한 내용은 아래 포스팅에서 작성했다.
2. AOP
AOP는 Aspect-Oriented Programming을 줄인 표현이며, 관점 지향 프로그래밍이다. 프로그래밍에 대한 관심을 핵심 관심 사항과 부가 관심 사항으로 나누어서 관심 기준에 따라 모듈화하는 것을 말한다. 즉, 로직을 바라볼 때, 책임과 관심사에 따라 코드를 분리하는 방식의 프로그래밍이다.
개발을 하다보면 서비스에 공통적으로 필요한 보안, 인증, 로그 기록 등의 기능들과 서비스의 핵심 비즈니스 로직이 따로 존재한다.
AOP가 필요한 이유
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 작성
- 코드의 재사용성
예를 들어, Spring에서는 @Transactional 어노테이션을 활용하여 AOP 기능을 통해 트랜잭션을 적용한다.
3. PSA
PSA는 Portable Service Abstraction으로 환경 변화와 관계 없이 일관된 방식의 기술로 접근 환경을 제공하는 추상화 구조이다. 즉, 스프링에서 제공하는 다양한 기술들을 개발자가 쉽게 사용하는 인터페이스를 말한다.
PSA가 필요한 이유
- 어떤 서비스를 이용하기 위한 접근 방식을 일관되게 유지하면 애플리케이션의 기술이 바뀌더라도 최소한의 수정으로 요구사항을 반영할 수 있다.
- 즉, 요구사항 변경에 유연하게 대처할 수 있다.
Spring은 하나의 추상화 아키텍쳐를 제시하며, 각각의 계층별로 수행할 책임과 관심사를 표방하는 인터페이스를 제공함으로써 개발자는 특정 기술에 종속되지 않는 PSA를 수행할 수 있다.
클라이언트 ↔ 프레젠테이션 계층 ↔ 서비스 계층 ↔ 데이터 액세스 계층 ↔ DB/Legacy
Spring은 Spring Web MVC, Spring Transaction, Spring Cache, MyBatis-Spring 등 다양한 PSA를 제공한다.
참고 자료
https://mininkorea.tistory.com/44
https://devloper-dreaming.tistory.com/147