[Spring] Spring Framework

Spring Framework 개념

Spring

Spring 이란?

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

  • 애플리케이션 프레임워크
    특정 기술에 국한된 프레임워크가 아니라, 애플리케이션 전 영역을 포괄하는 프레임워크
  • 경량급
    스프링의 탄생은 EJB 방식 애플리케이션 개발의 복잡성때문이다. 본질적인 비즈니스 로직 개발보다 개발을 위해 필요한 애플리케이션 개발에 설정과 개발, 상속의 강제 등을 통한 객체지향의 장점을 잃고, 무거워진 프레임워크에 대항해 나온 프레임워크이다.
    따라서, 스프링 프레임워크는 객체지향의 장점을 극대화하고, 불필요한 내용들에 대한 구현을 줄여 경량급이라 부를 수 있게 되었다.

Spring의 특징 3가지

1. IoC (Inversion Of Control, 제어의 역전) / DI (Dependency Injection, 의존성 주입)

의존하는 객체를 자신의 코드 안에서 new로 생성하는 것은 객체 간의 강한 결합을 일으킨다.
A → B의 방식으로 의존되었을 때 B가 자유롭게 확장/변화하더라도 A는 영향을 받지 않을 수 있어야 객체지향의 OCP를 지킨 설계일 수 있다. DI는 이러한 객체 간의 강결합을 끊기 위해 필요한 방법이다.

1-1. DI의 활용

  1. 핵심 기능의 변경
    전략 패턴이 가장 대표적이다. 컨텍스트(문맥) 안에서 변경이 잦은 일부 기능을 추상화하여 클라이언트에서 해당 기능(전략)을 주입해주는 방식으로 핵심기능을 마음대로 변경이 가능하다
  2. 핵심 기능의 동적인 변경
  3. 부가 기능의 추가
    대표적으로 데코레이터 패턴이 있다. 핵심 기능을 동적으로 확장한 객체를 이용해 클라이언트에선 핵심 객체를 사용할 때와 코드가 달라지지 않게 하되 추가적인 기능이 사용 가능하도록 한다. 이것 또한 클라이언트에선 핵심 기능을 추상화한 객체를 바라보고, 부가기능이 확장된 객체를 DI하는 방식으로 실현할 수 있다.
  4. 인터페이스 변경
  5. 프록시
  6. 템플릿과 콜백
    템플릿 콜백 패턴 또한 DI를 활용한 대표적인 패턴이다. 반복되는 부분을 템플릿화하고 변경되는 부분을 콜백으로 클라이언트에서 주입하도록 만들어 OCP를 실현하도록 했기 때문이다.
  7. 싱글톤과 오브젝트 스코프

의존관계 주입의 세 가지 조건

  1. 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야 한다.
  2. 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제 3의 존재가 결정한다.
  3. 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 주입해줌으로써 만들어진다.

2. AOP (Aspect Oriented Programming, 관점 지향 프로그래밍)

  • Spring AOP 상세 포스팅

    2-1. AOP 적용기법

    1. 다이나믹 프록시 기법
      스프링의 기본 AOP 실현 방법이다. 기존 코드에 영향을 주지 않고 데코레이터 패턴을 응용해 프록시를 구현한다. 이에 따라 부가기능은 메소드가 호출되는 시점에만 가능하다는 단점이 있다.
    2. 오픈소스 활용
      가장 널리 쓰이는 AOP 오픈소스인 AspectJ는 다이나믹 프록시 기술이 아닌 자바 바이트 코드(.class)를 컴파일시 변경시켜 AOP의 부가기능을 시행시킨다.

3. PSA (Portable Service Abstract)

스프링의 서비스 기술들은 추상화와 DI를 통해 플랫폼에 독립적으로 작동하도록 설계되어 있다. JDBC, Hibernate 등의 기술은 서로 다른 방식으로 DB에 접근하지만 스프링 프레임워크는 이러한 플랫폼에 따른 기술을 추상화된 하나의 객체로 묶고, 클라이언트에선 해당되는 추상화 객체를 이용하도록 함으로써 기반 기술에 의존되지 않고 자유롭게 실현될 수 있도록 했다.