Spring Framwork는 자바로 엔터프라이즈 에플리케이션을 만들 때 포괄적으로 사용하는 Programming 및 Configuration Model을 제공해 주는 Framework이다. 에플리케이션 수준의 인프라 스트럭처를 제공한다.
Framework는 뼈대이다. 즉, 어떻게 웹을 만들든 공통된 뼈대는 스프링이 알아서 처리해줄 수 있다. 그렇기 때문에 개발자가 실수하기 쉬운 Low Level에 신경 쓰지 않고 Business Logic 개발에 전념하게 해준다.
Spring의 구조
Spring 삼각형
- POJO
특정 환경 및 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체
테스트하기 용이하며, 객체지향 설계를 자유롭게 할 수 있다.
- PSA
환경과 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 설계 원칙
트랜잭션 추상화, OXM 추상, 데이터 액세스의 Exception 변화기능..등 기술적인 복잡함은 추상화를 통해 Low Level의 기술 구현 부분과 기술을 사용하는 인터페이스를 '분리'
예를 들어 데이터베이스에 관계없이 동일하게 적용 할 수 있는 트랜잭션 처리방식
- IoC/DI
DI는 유연하게 확장 가능한 객체를 만들어 두고 객체 간의 의존관계는 외부에서 다이나믹하게 설정, 제어 역전
- AOP
관심사의 분리를 통해서 소프트웨어의 모듈성을 향상
공통 모듈을 여러 코드에 쉽게 적용가능
Spring의 모듈
- Spring Core
Spring Framework의 핵심 기능 제공, Core 컨테이너의 주요 컴포넌트는 Bean Factory
- Spring Context
Spring을 컨테이너로 만든 것이 Spring core의 Bean Factory라면 Spring을 Framework로 만든 것은 Context module이다. 이 모듈은 국제화된 메세지, Application의 생명주기 이벤트, 유효성 검증 등을 지원함으로서 Bean Factory의 개념을 확장을 한다.
- Spring AOP
설정 관리 기능을 통해 AOP 기능을 Spring Framework와 직접 통합시킨다.
- Spring DAO
Spring JDBC DAO 추상 레이어는 다른 데이터베이스 벤더들의 예외 핸들링과 오류 메시지를 관리하는 중요한 예외계층을 제공한다.
- Spring ORM
Spring은 여러 ORM Framework에 플러그인 되어, Object Realational 툴을 제공한다.
- Spring Web
Web Context module은 Application Context module 상위에 구현되어, Web기반 Application에 context을 제공한다.
- Spring Web MVC
Spring은 자체적으로 MVC 프레임워크를 제공하고 있으며, 스프링만 사용해도 MVC기반 웹 어플리케이션 개발이 가능하다.