프레임워크/Spring
#0 Spring
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 설정파일 등에 따라 자동으로 의존성을 주입
- 의존성(Dependency)
- 관점 지향 프로그래밍(Aspect Oriented Programming)
- 관점 지향 프로그래밍
- 비즈니스 로직에서 관심사와 관계없이 등장하는 공통 로직을 분리하는 것
- 공통 로직이 분리된 비즈니스 로직은 오롯이 관심사에 관련된 기능만을 담을 수 있음
- 로직의 응집도를 높여줌
- Spring에서는 프록시 패턴을 사용하여 AOP를 구현
3. Spring의 장점
- EJB가 지원하던 다양한 기능중 상당수를 지원
- EJB에서 해결하지 못했던 복잡함을 해결(IoC를 통해 결합도를 낮추고 AOP를 통해 응집도를 높임)
- EJB에 비해 쉽게 배울 수 있으며 Tomcat과 같은 가벼운 웹서버로도 운영 가능
- 다양한 디자인 패턴을 적용하고있기에 적용하는 것만으로 상당수의 디자인 패턴을 따르는 개발이 가능