탄생배경
1996년, SUN은 자바를 위한 소프트웨어 컴포넌트 모델을 정의한 자바빈즈(JavaBeans) 1.00-A 명세를 발표했다.
이는 재사용이 가능한 자바객체를 이용해 복잡한 어플리케이션을 쉽게 구성할 수 있게 하는 일련의 코딩정책을 정의한 것이다.
그리고 앤터프라이즈급 어플리케이션의 개발을 위해 1998년 자바빈즈(EJB: Enterprise JavaBeans) 명세 1.0을 발표했다.
하지만, EJB는 어플리케이션 개발을 쉽게 구성하겠다는 본래의 의도를 벗어나게 됐다.
엔터프라이즈급의 서비스 제공을 위해 코드 및 개발이 점점 복잡해지고 어려워졌다.
이러한 분위기속에서 애스팩트 지향 프로그래밍(AOP: aspect-oriented programming), 종속객체 주입(DI: dependency injection) 같은 새로운 프로그래밍 기법으로 이전 EJB로만 가능했던 부분이 평범한 자바 객체(POJO: plain-old Java objects)로도 구현이 가능하게 됐다.
스프링 프레임워크는 이러한 가벼운 POJO 기반 개발 진영의 선두에 있다고 볼 수 있다.
스프링이란?
스프링(Spring)은 로드 존슨(Rod Johnson)이 그의 책 『Expert One-on-One: J2EE Design and Development』을 통해 소개되었다.
스프링의 특징을 간단하게 요약하면
종속객체 주입(DI: dependency injection)
: 객체가 의존관계에 있는 다른 객체를 컨테이너에서 찾아오는 것이 아니라 인스턴스가 생성되면 컨테이너가 그 객체에 필요한 종속객체를 찾아주는 것이다. 따라서 낮은 결합도를 유지하게 해준다.
애스팩트 지향 프로그래밍(AOP: aspect-oriented programming)
: 애플리케이션 개발에 있어 비즈니스 로직과 트랜잭션관리, 로깅등 시스템 서비스 관련 작업을 분리해 응집도 높은 개발을 가능하게 한다.
DI와 AOP를 근간으로 한 결합도가 낮은 애플리케이션이라 함은 개발시 테스트의 용이함 뿐만 아니라 관리시에도 상당한 편의성을 제공한다.
스프링 프레임워크는 코어 컨테이너 계층 위에 여러가지 계층으로 이루어져 있다. 이는 곧 애플리케이션 개발시 필요한 개별 모듈을 선택적으로 사용할 수 있다는 의미이다.
이 여러 계층 중 몇가지만 살펴보기로 한다.
코어 컨테이너(core container)
- 코어 컨테이너는 IoC와 DI를 제공하는 스프링 프레임워크의 기본을 구성한다. 이 모듈에 있는 BeanFactory는 스프링을 컨테이너로서의 역할을 하게 한다.
컨텍스트 계층(웹 계층)
- Context package는 Core package위에 위치하며 BeanFactory 형태를 확장하여 국제화(I18N), 애플리케이션 생명주기 이벤트, 유효성 검증, 이메일, JNDI 액세스, 리모팅 등 여러 서비스를 제공한다.
DAO 계층
- JDBC 추상화를 제공하는 DAO계층은 반복되는 데이터베이스 코드를 간단하고 깔끔하게 만들어 주며, AOP모듈을 이용해 트랜잭션 관리 서비스도 가능하며 데이터베이스 관련 각종 오류를 해결하는데 도움을 준다.
Spring's MVC 계층
- Spring's MVC 는 웹어플리케이션에 Model-View-Controller (MVC)를 적용할 수 있게 한며 애플리케이션의 결합도를 낮춰주는 역할을 한다.
스프링 프레임워크의 철학은 다른 프레임워크와 마찬가지로 개발자로 하여금 여타 불필요하거나 반복적인 작업으로 시간낭비하는 부분을 지양하게 한다. 그리고 스프링 자체의 가벼움은 기존API 및 JDBC, iBATIS, 하이버네이트, Struts, JSF등 기존 프레임워크와도 비교적 쉽게 통합하는 특징을 가진다.
탄생배경
1996년, SUN은 자바를 위한 소프트웨어 컴포넌트 모델을 정의한 자바빈즈(JavaBeans) 1.00-A 명세를 발표했다.
이는 재사용이 가능한 자바객체를 이용해 복잡한 어플리케이션을 쉽게 구성할 수 있게 하는 일련의 코딩정책을 정의한 것이다.
그리고 앤터프라이즈급 어플리케이션의 개발을 위해 1998년 자바빈즈(EJB: Enterprise JavaBeans) 명세 1.0을 발표했다.
하지만, EJB는 어플리케이션 개발을 쉽게 구성하겠다는 본래의 의도를 벗어나게 됐다.
엔터프라이즈급의 서비스 제공을 위해 코드 및 개발이 점점 복잡해지고 어려워졌다.
이러한 분위기속에서 애스팩트 지향 프로그래밍(AOP: aspect-oriented programming), 종속객체 주입(DI: dependency injection) 같은 새로운 프로그래밍 기법으로 이전 EJB로만 가능했던 부분이 평범한 자바 객체(POJO: plain-old Java objects)로도 구현이 가능하게 됐다.
스프링 프레임워크는 이러한 가벼운 POJO 기반 개발 진영의 선두에 있다고 볼 수 있다.
스프링이란?
스프링(Spring)은 로드 존슨(Rod Johnson)이 그의 책 『Expert One-on-One: J2EE Design and Development』을 통해 소개되었다.
스프링의 특징을 간단하게 요약하면
스프링은 가벼운 DI 및 AOP기반 컨테이너이자 프레임워크이다.
종속객체 주입(DI: dependency injection)
: 객체가 의존관계에 있는 다른 객체를 컨테이너에서 찾아오는 것이 아니라 인스턴스가 생성되면 컨테이너가 그 객체에 필요한 종속객체를 찾아주는 것이다. 따라서 낮은 결합도를 유지하게 해준다.
애스팩트 지향 프로그래밍(AOP: aspect-oriented programming)
: 애플리케이션 개발에 있어 비즈니스 로직과 트랜잭션관리, 로깅등 시스템 서비스 관련 작업을 분리해 응집도 높은 개발을 가능하게 한다.
DI와 AOP를 근간으로 한 결합도가 낮은 애플리케이션이라 함은 개발시 테스트의 용이함 뿐만 아니라 관리시에도 상당한 편의성을 제공한다.
스프링 프레임워크는 코어 컨테이너 계층 위에 여러가지 계층으로 이루어져 있다. 이는 곧 애플리케이션 개발시 필요한 개별 모듈을 선택적으로 사용할 수 있다는 의미이다.
이 여러 계층 중 몇가지만 살펴보기로 한다.
The Core package is the most fundamental part of the framework and provides the IoC and Dependency Injection features.
The basic concept here is the BeanFactory, which provides a sophisticated implementation
of the factory pattern which removes the need for programmatic singletons and allows you to decouple the configuration and specification of dependencies from your actual program logic.
The basic concept here is the BeanFactory, which provides a sophisticated implementation
of the factory pattern which removes the need for programmatic singletons and allows you to decouple the configuration and specification of dependencies from your actual program logic.
코어 컨테이너(core container)
- 코어 컨테이너는 IoC와 DI를 제공하는 스프링 프레임워크의 기본을 구성한다. 이 모듈에 있는 BeanFactory는 스프링을 컨테이너로서의 역할을 하게 한다.
The Context package build on the solid base provided by the Core package: it provides a way to access objects in a framework-style manner in a fashion somewhat reminiscent of a JNDI-registry.
The context package inherits its features from the beans package and adds support for internationalization (I18N) (using for example resource bundles), event-propagation, resource-loading, and the transparent creation of contexts by, for example, a servlet container.
The context package inherits its features from the beans package and adds support for internationalization (I18N) (using for example resource bundles), event-propagation, resource-loading, and the transparent creation of contexts by, for example, a servlet container.
컨텍스트 계층(웹 계층)
- Context package는 Core package위에 위치하며 BeanFactory 형태를 확장하여 국제화(I18N), 애플리케이션 생명주기 이벤트, 유효성 검증, 이메일, JNDI 액세스, 리모팅 등 여러 서비스를 제공한다.
The DAO package provides a JDBC-abstraction layer that removes the need to do tedious JDBC coding and parsing of database-vendor specific error codes. Also, the JDBC package provides a way to do programmatic as well as declarative transaction management, not only for classes implementing special interfaces, but for all your POJOs (plain old Java objects).
DAO 계층
- JDBC 추상화를 제공하는 DAO계층은 반복되는 데이터베이스 코드를 간단하고 깔끔하게 만들어 주며, AOP모듈을 이용해 트랜잭션 관리 서비스도 가능하며 데이터베이스 관련 각종 오류를 해결하는데 도움을 준다.
Spring's MVC package provides a Model-View-Controller (MVC) implementation for web-applications.
Spring's MVC framework is not just any old implementation; it provides a clean separation between domain model code and web forms, and allows you to use all the other features of the Spring Framework.
Spring's MVC framework is not just any old implementation; it provides a clean separation between domain model code and web forms, and allows you to use all the other features of the Spring Framework.
Spring's MVC 계층
- Spring's MVC 는 웹어플리케이션에 Model-View-Controller (MVC)를 적용할 수 있게 한며 애플리케이션의 결합도를 낮춰주는 역할을 한다.
스프링 프레임워크의 철학은 다른 프레임워크와 마찬가지로 개발자로 하여금 여타 불필요하거나 반복적인 작업으로 시간낭비하는 부분을 지양하게 한다. 그리고 스프링 자체의 가벼움은 기존API 및 JDBC, iBATIS, 하이버네이트, Struts, JSF등 기존 프레임워크와도 비교적 쉽게 통합하는 특징을 가진다.