역사
로드 존슨이 2002년 10월에 출판한 자신의 저서인 Expert One-on-One J2EE Design and Development 에 작성한 코드를 기반으로 최초 버전을 만들게 됨.
(이후 유겐 휄러와 함께 Expert One-on-One J2EE Development without EJB 라는 제목의 저서를 발간함)
2006년에 1.2.6 버전으로 Jolt Productive Award 와 Jax Innovation Award 를 수상하였음.
버전 | 날짜 |
---|
...
...
...
...
배경
1. 엔터프라이즈 애플리케이션 개발의 어려움
엔터프라이즈 애플리케이션이란 기업과 조직의 비즈니스를 처리해주는 시스템을 의미함.
엔터프라이즈 애플리케이션 개발이 어려운 원인은 개발의 복잡성(complexity)이 증가했기 때문임.
- 과거에 비해 사회는 점점 복잡해졌으며, 이에 따라 IT 시스템에 대한 의존도가 높아져 시스템에서 다루어야 하는 업무의 복잡도가 높아짐.
- 많은 사용자의 요구를 빠르고, 안정적이면서, 확장 가능한 형태로 유지하기 위해서 필요한 로우레벨 수준의 기술적 처리가 필요해짐.
Tip | ||
---|---|---|
| ||
과거 J2EE 프로젝트가 왜 실패하는지에 대한 토론을 참고하면 당시의 상황을 이해하는 데 도움이 될 수 있음. |
엔터프라이즈 애플리케이션 개발의 복잡성은 크게 비즈니스 복잡성과 기술 복잡성으로 나눌 수 있음.
비즈니스(업무) 복잡성 | 기술 복잡성 |
---|---|
|
...
|
|
위와 같은 복잡성을 해결하기 위해서는 비즈니스 복잡성과 기술 복잡성을 나누어서 정복하는 전략(Divide and Conquer)이 필요함.
2. Java EE와 EJB
2.1.
...
과거 J2EE 프로젝트가 왜 실패하는지에 대한 토론을 참고하면 당시의 상황을 이해하는 데 도움이 될 수 있다.
Java EE에 대해서 좀 더 알고 싶다면 아래 링크를 참고하자. |
...
...
...
...
...
...
...
...
...
...
Java EE (Java Platform, Enterprise Edition)
...
EJB (Enterprise JavaBeans)
...
2.1 Overall goals
We have set the following goals for the Enterprise JavaBeans (EJB) architecture:
- ...
The Enterprise JavaBeans architecture will make it easy to write applications: Application
developers will not have to understand low-level transaction and state management details,
multi-threading, connection pooling, and other complex low-level APIs.- ...
2.1 목표
우리는 엔터프라이즈 자바빈즈 (EJB) 아키텍처에 대해 다음과 같은 목표를 가진다.
- ...
- 엔터프라이즈 자바빈즈 아키텍처는 애플리케이션 작성을 쉽게 할 수 있다 : 애플리케이션 개발자는 로우 레벨의 트랜잭션이나 상태 관리, 멀티 스레딩, 커넥션 풀링, 그리고 기타 복잡한 로우 레벨의 API를 이해하지 않아도 된다.
- ...
2.3 또 다른 문제
EJB는 침투적인(invasive) 기술로 소스코드 측면에서의 강제사항(EJB 관련 클래스를 반드시 사용)과 개발환경 측면에서의 강제사항(EJB 컨테이너 사용) 떄문에 아래와 같은 문제가 발생하였음.
- 개발 생산성 저하
- 유지 보수성 저하
- 테스트 용이성이 떨어짐
- 배포의 어려움
Tip | ||
---|---|---|
| ||
EJB를 이용한 예제코드는 아래에서 참고할 수 있음.
|
3. 스프링 프레임워크의 등장
EJB에서 문제가 되었던 부분을 해결하기 위해 비 침투적인(non-invasive) 방식을 도입하였고, 엔터프라이즈 애플리케이션 개발을 좀 더 쉽게 하기 위한 목적으로 만듦.
이러한 사상은 Spring Mission Statement에 잘 나타나 있음.
Anchor | ||||
---|---|---|---|---|
|
...
Anchor | ||||
---|---|---|---|---|
|
Anchor | ||||
---|---|---|---|---|
|