Scala0114 2022. 4. 20. 21:18

1. Spring이란?

  • Java 기반 웹 애플리케이션 개발 프레임워크
  • EJB가 지원하던 다양한 고급기술들을 훨씬 가볍게 사용할 수 있게 해주는 경량 프레임워크

 

 

2. Spring의 특성

  • 비침투적(non-invasive)
    • 프레임워크를 적용한다고 해서 코드에 그에 따른 규약이나 제약 사항등이 나타나지 않음
    • EJB와 달리 Spring을 적용하더라도 아무런 제약 없이 Java를 사용할 수 있음
    • 기존 Java에서 하던 방식대로 객체를 구성할 수 있음(POJO)

 

  • 제어의 역전(Inversion of Control)
    • 의존성(Dependency)
      • 객체지향 프로그래밍에서 의존성(Dependency)이란 객체간의 의존관계를 의미
      • A 객체가 동작하기 위해 B 객체를 필요로할 경우 A는 B에 의존하는 상태

    • 의존성 역전 원칙(Dependency Inversion Principal)
      • 문제는 어떤 객체가 구체적인 객체(추상화되지 않은 객체)에 의존할 때 발생
      • A가 B에 의존할 때, B가 변경될 경우 A는 정상적으로 작동할 수 없게될 수 있음
      • 이 문제를 해결하기 위해 추상화된 객체를 사용(Interface)
      • A는 인터페이스 C에 의존하고 B는 C를 구현하도록 구조를 변경
      • 그러나 인터페이스에 의존한다고 해도 결국 인스턴스를 생성할 때는 구체적인 B에 의존해야함
      • A가 C의 구현체에 종속적이지 않도록 구현체를 전달해줄 무언가가 필요

    • 의존성 주입(Dependency Injection)
      • 의존성 역전을 지키기 위해 객체는 자신이 의존할 인터페이스의 구현체를 외부에서 주입받아야함
      • A를 사용할 객체가 A가 의존할 C의 구현체인 B를 생성하여 넣어주는 모순이 발생

    • 결국 실행 흐름에 참여하지 않으며 의존성을 주입해줄 완전한 제3자가 필요해지며 이 역할,
      즉 프로그램의 흐름에 대한 제어권을 프레임워크에게 위임하는 방식을 제어의 역전이라 함

    • IoC 컨테이너가 의존성을 주입해주기에 개발자는 구체적인 것에 종속되지 않는 객체를 설계 가능

    • 코드상에 의존관계가 명시되지 않기 때문에 객체간 결합도가 낮아지고 재사용과 유지보수가 용이

    • Spring의 경우 Spring 컨테이너가 XML 파일이나 Spring 설정파일 등에 따라 자동으로 의존성을 주입

 

  • 관점 지향 프로그래밍(Aspect Oriented Programming)
    • 관점 지향 프로그래밍
    • 비즈니스 로직에서 관심사와 관계없이 등장하는 공통 로직을 분리하는 것
    • 공통 로직이 분리된 비즈니스 로직은 오롯이 관심사에 관련된 기능만을 담을 수 있음
    • 로직의 응집도를 높여줌
    • Spring에서는 프록시 패턴을 사용하여 AOP를 구현

 

 

3. Spring의 장점

  • EJB가 지원하던 다양한 기능중 상당수를 지원
  • EJB에서 해결하지 못했던 복잡함을 해결(IoC를 통해 결합도를 낮추고 AOP를 통해 응집도를 높임)
  • EJB에 비해 쉽게 배울 수 있으며 Tomcat과 같은 가벼운 웹서버로도 운영 가능
  • 다양한 디자인 패턴을 적용하고있기에 적용하는 것만으로 상당수의 디자인 패턴을 따르는 개발이 가능