[Spring] SpringMVC DI~AOP

스프링 프레임워크

  • 기업형 응용 프로그램을 보조하기 위한 쉬운 프레임워크

  • Spring : 분산형, 기업형 응용 프로그램, 개발을 위한 API, 결합력을 낮추는 DI, DB Transaction 처리, 로그처리

20210623_025623

코드 수정 없애고 DI를 위한 설정

  • 어떤 객체를 수정해야 한다면?

20210623_030304

왼쪽은 클래스 a를 정의하면서 B라는 클래스를 이용한다. 객체화 해서 이용하고 있다.

A라고하는 녀석 B라는 녀석 쓰기 위해 자기가 생성해서 사용중이다.

이걸 A가 B를 일체형으로 가졌다고 해서 has a 관계라고 한다.

B를 A의 부품이라 인식하면 되는데 이걸 Dependency라 한다. 종속성 이런걸 쉽게 보면 부품이라 보면된다.

직접 갖게되는 프라이빗하게 쓰는 게 있으, 오른쪽은 직접 생성하지 않는다. 외부에서 생성해서 세팅해서 그걸 사용하는 방식도 가능하다.

20210623_031618

왼쪽은 일체형, 오른쪽은 조립형으로 쓴다.

스프링에서는 DI가 중요한 이유는

20210623_031636

여기서 위는 일체형, 아래는 조립형이다.

일체형 보다 조립형이 결합력이 낮아지고 부품을 쉽게 갈아끼우는게 쉽다.

느슨한 결합으로 조립형을 바꾸는 게 좋다.

A입장에선 B가 부품인데 이걸 꽂아줘야 한다.

부품인 B를 다른 말로 Dependecy라 한다면 그 Dependecy를 꽂는 작업을 injection이라 한다.

이걸 조립형으로 쓰는데 있어서 어떻게 쓰고 장단점이 무엇인지 아는게 중요하다.

장점은 부품을 쉽게 바꿀수 있는거고 단점은 부품을 직접 조립하는게 단점이다.

20210623_032747

세터를 통해서 주입, 생성자를 통해서 주입하는 방법이 있다.

이 조립이 불편하면 이 조립하는 서비스를 받는게 있는데 DI를 해주는 게있으면 좋은데 그게 스프링이다. 저 빨간 부분을 스프링이 해줄 수 있다.


요청하기 위해 주문서를 작성하는 거 마냥 스프링에서도 주문서 역할을 하는게 필요하다. 그게 XML과 annotation이 그 역할을 한다.

20210623_033556

컨테이너는 주문서대로 박스에 담을 텐데 마찬가지로 스프링도 주문서에 입력된걸 담을 수 있는 그릇이 필요하다.

부품컨테이너를 Dependecy 컨테이너라 해도 되지만 IOC 컨테이너라 한다. (IOC가 DI의 상위 개념)

그 이유는 조립 법을 보면 알수 있다.

제일 먼저 만들어 지는건 작은 부품 만들어지고 큰부품 만들어지는 순서로 간다.

부품 조립이라는 과정 거치는 건 이런식으로 간다.

20210623_034915

위는 일체형으로 제품 만드는 경우 A가 B라는 객체 만들고 B가 C라는 객체 만들고 이 안쪽을 그 전이 모름. A 만드니까 B만들어지고 C만들어지

근데 결합형은 D가 제일먼저 만들어진다. 그리고 역순으로 만들어진다.

결합을 하게되면 역순으로 만들어진다(Inversion of Control)

이 조립에 대한 순서가 역순에 대한 순서로 올라간다.

이 컨테이너가 IOC컨테이너고 단순하게 부품을 담고있으면 Dependecy Container라 했을텐데 부품이 결합까지 해서 담겨져서 IOC컨테이너라 부른다.

그럼 이 컨테이너에 내가 원하게 조립하고 작성하도록 만들 필요가 있다.


Spring IOC 컨테이너 이용하기

  • 작성한 지시서 읽어서 만들고 활용

20210623_114554

  • Application Context: 스프링에서 DI(지시서)읽어서 조립해주는 구체적 객체 이름은 APplicationCOntext고 이건 인터페이스고 이걸 구현하는게 여러개 있는데 다양하게 있따.

차이점은 지시서 넘길떄 어떻게 넘기냐에 따라 좀 달라진다.

이 중 classPathXML 쓰는게 가장 보편적


Spring DI활용하기 - 이론

  1. 빈(Beans)

20220209_000017 JavaBeans - 재사용 가능한 컴포넌트 , 상태 Servlet & JSP beans - MVC의 모델, EL, scope, JSP 컨테이너가 관리

EJB enterprise Java Beans - 복잡한 규칙, EJB 컨테이너가 관리 Spring Bean - POJO (Plain old java object). 단순 독립적 Spring container가 관리

  1. BeanFactory 와 ApplicationContext

20220209_011255

Bean - SpringContainer가 관리하는 객체

Spring container- Bean 저장소, Bean을 저장(생성,소멸, 연결)

  • 1.BeanFactory : 빈을 생성, 연결등의 기본 기능을 정의
  • 2.ApplicationContext : 빈 팩토리를 확장해서 여러 기능을 정의
  1. ApplicationContext 의 종류 20220209_011529

  2. Root Ac와 Servlet AC

20220209_012030

20220209_014236

톰캣 서버 구조 톰캣 엔진 안에 호스트 별로 영역이 있고 그 안에 모듈별로 컨텍스트가 있다.

20220209_014302

20220209_015922

Context를 감싸고 있는게 ApplicationContext라 생각하면 된다.





© 2021.03. by yacho

Powered by github