- Spring : 라이브러리들의 집합이고 관리해주고 실행시켜준다
--> 컨테이너
--> 컨테이너가 실행시켜준다.
--> org.springframework.beans.factory.BeanFactory 를 구현
--> 객체들의 life-cycle 관리 및 assembler 역할 수행
--> 객체들을 생성 및 초기화하고 DI를 통해 객체들 사이의 의존 관계 생성
--> assembler 코드 구현은 안해도 되는데 설정 정보를 알려줘야 스프링이 그걸 참조해서 알아듣고 관리를 하거든
--> 그래서 객체 설정 정보 코드가 필요하다.
- Dependency(의존) Injection(주입)
--> DI
* 의존? (Dependency)
: A객체랑 B객체가 있는데 A객체가 B객체의 어떤 메소드를 호출하고 값을 리턴한다치면
( A ----> B )
===> A에서 B에 있는걸 불러 ===> A는 B가 필요해... B한테 의존할거야... 너 없으면 안돼...
===> A는 B에 의존한다.
* 주입? (Injection)
: 의존이랑 비슷한데 의존이랑 반대야
===> A에서 B에 있는걸 불러 ===> B가 A에 들어가... B를 A에 주입할거야...
===> B를 A에 주입한다.
===> A는 주입 받는다.
★ A는 B에 의존 = B를 A에 주입
★ 불려지는게 B 의존 객체 (의존할 객체) -----> 지존
★ 불러서 쓰는게 A 의존하는 객체
장점)
1. Plain Old Java Objects (POJOs) 이용 --> 쉬운 개발
* POJO란?
- 오래된 방식의 간단한 자바 객체 라는 뜻
- 특정 자바 모델이나 기능, 프레임워크를 따르지 않은 자바 오브젝트
- Spring --> POJO
- 시간이 지날 수록 이것저것 제한사항이 생겨서 더 어려워졌는데 그럴 필요 있냐는거지 원래 것을 쓰겠다~ 이말
- extends, implements 같은거 안써도 된다~
2. Dependency Injection과 interface를 활용한 객체들 간의 느슨한 결합 --> 쉬운 변경 가능, 유지 보수 유리
* 스프링에서는 이런 의존도를 낮추기 위해 개발자가 직접 new 해서 객체 생성하지 않고 설정파일에 설정만 함으로써 알아서 객체 주입을 해줌
스프링이 알아서~
* XML이나 Annotation이나 Java Code로 설정 통해서 객체들 간의 의존 관계를 설정한다.
3. Aspects(공통 기능), common conventions(공통 규약), annotation(주석)을 통한 선언적 프로그래밍(declarative programming)
--> default로 정해져 있는게 많아서 편리
4. Aspects와 Templates를 이용한 단순 반복 코드 제거 (boilerplate reduction)
* boilerplate
: 상용구 - 자주 사용하는 문장이나 수식, 명령어 등을 입력해 놓았다가 필요할 때에 간단한 키 입력으로 불러내어 쓰는 것
5. Light-weight
* 크기가 작고 성능이 우수
* Java 객체의 life-cycle 관리
6. Aspect-Oriented Programming (AOP 지원)
* AOP란?
- 관점(관심) 지향 프로그래밍
- 소프트웨어의 요구사항을(각 기능을) 핵심 기능과 부수적 기능으로 분할하여 개발 후 통합
- 모듈화를 극대화하는 개발 방법
- OOP(Object-Oriented Programming)의 한계 극복
--> 모듈화를 잘 하더라도 부수적 기능이 핵심 기능에 포함 됨
- OOP와 달리 분리하면 핵심 기능에서 부수적 기능을 직접 호출하는 것이 아니라 Aspects를 활용함
- 런타임 시 weaving
--> aspect가 적용된 Proxy를 생성하여 Proxy를 통해 핵심 로직에 접근
- 핵심 business logic과 system services 사이의 독립성 보장
★ DI : 객체와 객체 사이 의존
★ AOP : 컴포넌트 간 , 서비스 간 의존
* core ----> cross
7. 효율적인 Web Application 개발 지원
8. JDBC, JPA, 선언적 Transaction 처리 등 데이터베이스 연동 지원
9. 원래는 독립적 기술들인 다양한 기술들 연동 지원
★ 더 쉬운 결론
1. 분석, 설계 구현 모두에서 재사용성 증가
2. 빠른 구현, 시간 감소
3. 쉬운 관리
4. 개발자들의 역량 획일화
5. 검증된 아키텍져의 재사용과 일관성 유지
< History >
① EJB (Enterprise Java Beans)
: Enterprise application 개발을 위한 표준 component model
: 트랜잭션, 보안, 분산 컴퓨팅 서비스 제공
단점)
1. 복잡한 코드 개발
2. 성능 미흡
3. tomcat 같은 서버가 따로 필요 --> 상용 구매 해야 함
4. EJB를 실행시킬 수 있는 서버가 따로 있는데 너무 복잡함
② Spring 1.0
: Rod Johnson
: open source
: light-weight framework
: 새로운 개념인 DI, AOP, POJO 기반으로 Enterprise application 개발 가능
장점)
1. EJB와 다른 방식
2. 별도의 서버 이용 필요 X
③ EJB 3.0
: Spring의 장점 반영해서 DI, POJO 기반 개발 방법 지원
④ Spring 2.0
: XML
: namespaces
: @Component
⑤ Spring 4.0 / 4.3
: Java SE, Ramda
: Java EE
⑥ Spring 5.0 / 5.1
: Reactive Programming
: Servlet
: JDK 9
'SPRING' 카테고리의 다른 글
DI / 의존 관계 설정 방법 2 (Annotation 이용 방법) (0) | 2019.03.18 |
---|---|
DI / 의존 관계 설정 방법 1 (XML 이용 방법) (0) | 2019.03.18 |
DI (Dependency Injection) / 의존 객체 생성 방법 (0) | 2019.03.18 |
Spring Web MVC framework (0) | 2019.03.16 |
spring Components (0) | 2019.03.15 |