SPRING

what is Spring framework?

nang. 2019. 3. 15. 17:38
반응형
SMALL

- 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


반응형
LIST