SpringFramework 등장배경
- 웹사이트가 커지며 Enterprise급 서비스가 필요하게 되었다.
그중에서도 자바 진영에서는 EJB가 Enterprise급 서비스로 각광받게 되었다.EJB(Enterprise Java Bean)란?
기업환경의 시스템을 구현하기 위한 서버 측 component 모델, 일반적으로 업무 logic을 가지고 있는 server application을 칭한다.
- EJB를 사용하면 application 작성을 쉽게 할 수 있다.
- Low Level의 transaction이나 상태관리, 멀티 threading, resource pooling같은 복잡한 Low Level의 API를 이해하지 못하더라도 아무 문제 없이 application을 개발할 수 있다.
- 이를 위해서는 EJB 스펙에 정의된 interface에 따라 코드를 작성해야하므로 기존에 작성된 POJO를 변경해야 한다는 단점이 있었다.
POJO (Plain Old java Object)란?
- 특정 Framework나 기술에 의존적이지 않은 자바 객체 위주의 방식, 이러한 특징으로 인해 특정 기술에 종속적이지 않기 때문에 생산성과 이식성 향상이 특징이다.
- Plain : component interface를 상속받지 않는 특징 (특정 Framework에 종속되지 않는)
- Old : EJB 이전의 Java class를 의미
또한 Container에 배포해야만 테스트가 가능하여 개발속도에 저하가 있었다. 또 배우기 어렵고 설정할 부분이 많았다. EJB는 무거운 Container 였다.
EJB를 사용하지않고 Enterprise application을 개발하는 방법이 생겨나기 시작했다 주로 POJO + 경량 Framework 방식이었다.
경량 프레임워크?
- EJB가 제공하는 서비스를 지원해줄 수 있는 Framework 등장
- Hibernate, JDO, iBatis(MyBatis), Spring ..
SpingFramework의 특징
- 1. 경량컨테이너
스프링은 자바객체를 담고 있는 Container로, 자바 객체의 생성과 소멸과 같은 lifecycle을 관리한다.- 2. DI(Dependency Injection - 의존성 주입) 패턴 지원
- 3. AOP(Aspect Oriented Programming - 관점 지향 프로그래밍) 지원
AOP?
- AOP란 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법을 뜻한다.
- 문제 해결을 위한 핵심 사항과 전체에 통용되는 공통 사항을 기준으로 프로그래밍함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 해준다.
- 스프링은 자체적으로 프록시 기반 AOP를 지원하므로 transaction, logging, 보안과 같이 여러 모듈에서 공통으로 필요로 하지만 핵심이 아닌 기능을 분리하여 각 모듈에 적용이 가능하다.
- 4. POJO(Plain Old Java Object) 지원
- 5. IoC(Inversion of Control - 제어의 반전)
IoC?
- 자바의 객체 생성 및 의존관계에 있어 모든 제어권은 개발자에게 있었다. Servlet과 EJB가 나타나면서 그 제어권이 넘어가게 되었다.
- 스프링에서도 객체의 생성, 생명주기를 관리하는 기능을 제공하고 있는데 그런 이유로 IoC Container라고 부르기도 한다.
- IoC의 구현 방법중 하나가 DI이다.
- 객체 간의 강한 결합도를 Factory를 통해 낮춘다.
- 6. 스프링은 트랜잭션 처리를 위한 일관된 방법 제공
- 7. 스프링은 영속성과 관련된 다양한 API 지원
JDBC를 비롯하여 MyBatis, Hibernate, JPA등 DB처리를 위해 널리 사용되는 라이브러리와 연동 지원
ORM(Object Relational Mapping)