Java Framework 역사
Spring Framework 소개
스프링 프레임워크는 어떤 플랫폼에서도 종합적인 프로그래밍과 자바 기반의 현대 엔터프라이즈 어플리케이션의 Configuration Model을 제공한다. 스프링의 핵심요소는 어플리케이션 단위의 인프라를 제공한다는 것입니다. 스프링은 기업용 어플리케이션의 plumbing에 초점을 맞추고 있습니다. 그래서 개발팀은 특정 배포 환경에서 불필요한 시도없이 어플리케이션의 비지니스 로직에 초점을 맞출 수 있습니다.
Spring Framework 정의
- 자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 어플리케이션 프레임워크
- 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
- 자바 개발을 위한 프레임워크로 종속 객체를 생성해주고, 조립해주는 도구
- POJO(Plain Old Java Object) BEAN CONTAINNER
Spring Framework 특징
- 크기와 부하의 측면에서 경량
- 제어 역행(IoC)를 통하여 어플리케이션의 느슨한 결합을 도모
- 관점지향(AOP) 프로그래밍을 위한 풍부한 지원을 함.
- 어플리케이션 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 할 수 있음.
- 간단한 컴포넌트로 복잡한 어플리케이션을 구성하고 설정할 수 있음.
스프링의 주요 컴포넌트(springframework 참조)
아래의 용어에 대한 설명은 별도의 장에서 세부적으로 진행하도록 하겠습니다.
- Plain Object Java Object : 기본적으로 사용자가 만들어낸 객체를 의미함. 스프링은 사용자가 만들 객체들에 대해서도 라이프사이클 관리를 위임해서 수행하며, 이들의 조합으로 어플리케이션을 만들 수 있음.
- AOP : 관점지향형 프로그램으로 사용자들이 트랜젝션 처리/로깅/예외 처리들의 로직을 공통으로 처리할 수 있는 기능을 지원함. 해당 기능을 잘 사용하면 비지니스로직와 기타 공통모듈이 섞이는 것을 방지하여 비지니스 로직에 집중할 수 있도록 합니다.
- PSA(Portable Service Abstraction) : 스프링은 다른 여러 모듈을 사용함에 있어서 별도의 추상화 레이어를 제공합니다. 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화 하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 사용자는 이 모듈의 의존 없이 프로그램에 집중할 수 있습니다.
스프링 모듈 다이어 그램(docs.spring.io 참조)
- 각 모듈에 대한 설명
- Spring Core : 코어는 프래임웍의 가장 기본적인 요소로 DI를 이용해서 어플리케이션을 개발할 수 있는 환경을 제공해 준다. 다른 모든 기능들은 Core 위에 놓여지게 된다.
- Spring Aop : 이 모듈은 프레임워크가 관점지향형 프로그래밍을 할 수 있도록 한다. 스프링 프래임워크는 AOP를 쉽게 수 있도록 Aspect 라이브러리를 제공해 준다. 이 라이브러리를 이용하여 트렌잭션, 로깅, 성능 모니터링, 케시, 메소드 재수행, 예외 처리등을 쉽게 처리할 수 있다.
- Spring Data : 효율적으로 스프링이 Persistance Layer의 Data들을 관리할 수 있는 기능을 제공해 준다.
- Spring Messaging - Use this module to raise the level of abstraction when interacting with the Microsoft MSMQ message queing middleware
- Spring.Messaging.NMS - Use this module to raise the level of abstraction when interacting with the Apache ActiveMQ (NMS) message queing middleware
Spring.Messaging.EMS - Use this module to raise the level of abstraction when interacting with the Tibco Enterprise Message Service (EMS) message queing middleware - Spring.Web - Use this module to raise the level of abstraction when writing ASP.NET web applications allowing you to effectively address common pain-points in ASP.NET such as data binding, validation, and ASP.NET page/control/module/provider configuration.
- Spring Web Mvc - Use this module to integrate the functionality of the Spring.Core and Spring.Aop modules into your ASP.NET MVC 2 projects.
- Spring Testing JUnit - Use this module to perform integration testing with JUnit.
- Spring.Scheduling.Quartz - Use this module to support interacting with the Quartz.NET job scheduler infrastructure.
위에서 보는 것 같이 우리가 웹을 만들기 위해 Spring을 사용하는 것으로 알고 있지만, Spring은 웹을 만드는 도구가 아니라 DI를 이용하여 JAVA 어플리케이션을 만들 수 있는 프레임워크 이다. 여기에서 추가적으로 웹 MVC모듈을 제공하여 웹을 효과적으로 만들수 있도록 도와주는 것 뿐이다.