Spring 이 나온 배경

  1. Dependency Injection (DI)
  2. transaction management

Java EE와 Java SE 를 함께 사용해왔는데 Enterprise Edition (EE) 가 더 효율적인 spring framework 로 대체

Spring의 역할 및 사용 목적

  1. MVC - DI
  2. 트랜젝션 관리 - AOP
  3. 인증과 권한 - servlet filter

Spring Framework 가 나오기 전 문제점

UI - service - Dao(Data access object) - DB

* 객체 수정이 필요하다면?
1. Dao 계층에서 객체 코드 수정
2. 코드 추가후 덮어쓰기 -> service 계층에서 코드수정 필요
객체 수정이 이루어질 때 소스코드가 필요하다 -> 결합력이 높다

* 코드없이 수정할 순 없을까?
결합력이 낮은 코드를 만드는 게 목적 -> 코드가 없어도 수정 가능한 서비스 -> interface 사용
service 계층은 데이터를 직접 조작하지 않고 interface와 연결.

UI - service - Dao(interface) - Dao - DB

유지보수 측면에서 코드를 직접 수정하고 재배포하는 작업은 복잡할 뿐만 아니라 위험함.
다른 파일로 객체를 저장해 UI 계층에서 컨트롤할 수 있도록 설계.

DI(Dependency Injection)

일체형(construction injection)

  • 생성자를 이용해 인스턴스 생성.
  • 상위 계층에서 조작 불가능.

조립형(setter injection) => good!!

  • setter 를 이용하여 인스턴스 생성.
  • 상위 계층에서 조작 가능.
Student student = new Student(); // 부품 ; dependency
School school = new School(); // 부품 ; dependency
school.setStudent(student); // 조립 ; injection

IoC (Inversion Of Control) 컨테이너

부품을 조립하기 위해선(DI) 주문서(명세서)가 필요함.
주문서는 XML 파일이나 annotation 으로 이루어짐.
주문서에 있는 내용대로 객체를 생성한 후 IoC 컨테이너에 저장.

Why is it called IoC?
일체형의 경우 범위가 큰 객체를 만든 후 하위계층에 인스턴스가 만들어진다.
조립형의 경우 작은 부품을 만들어 상위 계층에 조립한다.
조립형은 일체형과 부품 생성 순서가 반대라는 의미로, Inversion Of Control

profile
단단한 프론트엔드 개발자가 되고 싶은

0개의 댓글

Powered by GraphCDN, the GraphQL CDN