Yomni's TIL Help

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

...

즉 직접적인 구현체에 의존하지 않고 이를 추상화함으로써, 다른 구현체로 변경되어도 서비스에는 영향이 없도록 유연하고 모듈화 된 아키텍처를 가능하게 한다.

Last modified: 08 October 2024