스프링의 세 가지 특징


회사에서 하는 세미나에서, 자바 세미나가 끝나고 이어서 스프링 세미나를 시작하였다.

세미나를 진행하면서, 강조했던 스프링의 세 가지 특징에 대해서 설명한 부분을 정리해보겠다.

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)


image2021-3-8_18-35-52

  • 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)에 대해서도 추상화를 지원한다.
  • 버전에 따라서 라이브러리 혹은 프레임워크의 내부 API의 설계나 인터페이스가 달라지더라도, Sping에서 적절히 감싸 추상화를 하기 때문에 우리의 소스코드는 변경될 일이 없다.

참고 문헌

>> Home