Spring Framework 소개 -1

2008. 5. 14. 10:19Java/Spring Framework

오늘은 우선 간단히 Spring이라는 프레임워크가 어떤 것이며 어떠한 장점이 있는지 알아보도록 하겠습니다^^

Spring Framework는 Rod Johnson의 “Expert One-on-One J2EE Design and Devlopment” 에서 소개된 코드를 기초로 한 J2EE Application Framework이며 2005년 2월 28일에 Spring Framework 1.1.5가 릴리스 되었습니다.

Spring이라는 Framework는 단어 그대로 유연한 특성을 가지는 프레임워크라 할 수 있는데 … J2EE용 프로젝트를 위해 설계된 Open Source project이며 내부적으로 구성된 layed Archtecture를 지원하여 J2EE 개발을 쉽게 해 주는 프레임워크 입니다. (Transaction, Persistence, Web User Interface 등의 기능과 컴포넌트를 결합하고 설정할 수 있게 함)

Spring을 이용하면 Middle Tire Object(Bean)에 대해 체계적인 관리가 가능하며 Singleton의 확산을 방지할 수 있으며 Application이 가능하다면 자체 API에 덜 의존하게 되며, Unit Test가 쉽고 일관성 있는 Data Access Framework을 제공하는 장점이 있습니다. 또한 MVC Model을 적용한 Web 어플리케이션 구축을 위한 독자적인 Class들이 준비되어 있어 Web 어플리케이션의 구축이 가능합니다.

JSP/JSTL, Tiles, Velocity, FreeMarker, Excel, XSL, PDF 등의 View 기술과 통합이 용이하며 Core에서 제공하는 IoC(Inversion of Control)가 테스트를 쉽게 해주는데 IoC란 실행 시점에서 의존성을 부가하는 방식으로 개발 시에는 의존성이 거의 없어 JUnit으로 대부분의 클래스를 테스트할 수 있습니다.

위에서 Spring Framework를 J2EE 어플리케이션을 쉽게 구현하게 해주는 Framework라고 했지만 엄밀하게 본다면 각종 Bean의 생성 및 관리를 하는 Lightweight Container로 볼 수있으며(이 부분에 대해서는 아래에 다시 살펴보도록 하겠습니다.) 그러므로 독립적으로 각종 어플리케이션을 만드는 것이 아니라 Struts나 Webwork, Tapestry등의 다른 Framework와 연계해 이용하는 것이 일반적 입니다. 당연히 Spring Framework는 J2EE의 기능에 의존하고 있는 것은 아니기 때문에 Stand Alone Application이나 Applet 같은 것에서도 이용이 가능 하구요~

EJB의 경우  기술하는 코드가 EJB에 의존해 버리며 EJB를 지원하지 않는 Container에서는 작성한 코드가 동작하지 않으며 기동하는데 걸리는 시간이 길다는 단점이 있어 이에 대해 Spring Framework에서는 IoC(Inversion of Control)를 채용하는 것으로 어플리케이션 코드의 Spring Framework API에의 의존도를 줄이며 Spring Framework가 관리하는 Bean에 대해서는 POJO(Plain Old Java Object)로서 직접 액세스 할 수가 있기 때문에 Bean을 사용하는데 생기는 overload 또한 없습니다. 나아가 Bean에 대해서 Transaction 처리 등을 추가하는 경우에도 AOP Interceptor를 통한 기능 추가가 가능합니다. 이와 같이 Spring Framework는 Bean의 관리에 수반하는 여러 처리를 가능한 가볍게 처리하므로 Lightweight Container로서 Spring을 접근해 볼 수도 있습니다.

Spring을 이용한다면 저 수준의 Java Beans 코드는 컨테이너 내부에 포함되며 beans 설정의 대부분은 Spring의 XML Configuration Service를 사용하면 됩니다. 이를 통해 각 Bean들의 클래스 이름, 필드, 초기값 등을 설정하여 이름을 통해 다른 Bean들을 참조할 수 있습니다. 또한 XML 파일을 이용하여 필드에 대한 초기값을 설정하는데 Java의 reflection 기능을 이용하여 객체를 생성하고 활성화 합니다.

Spring 홈페이지(http://www.springframework.org)에서 Spring의 소스 코드와 바이너리 코드 및 매뉴얼 등을 모두 다운로드 받을 수 있다. Spring은 자바 버전 뿐 아니라, 닷넷 버전도 개발중이다. 아직 정식 배포본은 아니지만, Spring 닷넷 페이지(http://www.springframework.net/)에서 그 모습을 볼 수 있다.
Spring은 어디에 쓸 수 있는 것인가? 자바 혹은 J2EE 어플리케이션 개발에 있어서 Spring은 어디에도 또, 어떤 형태로도 사용이 가능하다. 다만, Spring이 적절하게 쓰일 수 있는 경우가 어디인지 고민해보면, 굳이 EJB가 필요하지 않은 어플리케이션 개발 중에서 어느 정도 규모가 있는 프로젝트에 사용했을 때 빛을 발할 것이다. WAS 제품 없이도 J2EE가 자랑하는 트랜젝션(Transaction)이나 리모팅(Remoting) 등이 가능하다는 것은 대단한 장점이다. 문제는 Spring을 써서 개발할만한 인력이 국내에는 많지 않다는 점과 실제 프로젝트에서 아직 성공 사례가 없다는 점일 것이다.
 
마지막으로 Mission Statement를 통해서 Spring 개발팀이 지향하는 바를 정리해본다.
  • J2EE는 사용하기 쉬워야 한다.
  • 클래스보다는 인터페이스에 기반한 프로그래밍을 해야 한다.
  • 자바빈을 사용하는 방식은 탁월한 어플리케이션 설정 방법이다. 
  • 객체지향 설계는 J2EE와 같은 특정 구현기술보다 중요하다.
  • 자바에는 너무 많은 예외 상황을 체크한다.
  • 테스트는 필수적이다.
위의 미션은 대부분 EJB 중심의 J2EE 프로그래밍 모델의 취약점에 대한 개선을 말하는 것이다. 거대 벤더위주의 EJB 프로그래밍 방식은 상당한 종속성을 내포하고 있다. 마케팅 용어로는 Customer Lockin이라고 하는 것은 기업 입장에서는 중요한 전략이다. WebSphere나 WebLogic 등의 WAS, JBuilder, WSAD 와 같은 IDE 역시 편의 기능을 제공함과 동시에 그 제품에서만 사용할 수 있는 기능들을 노출시킨다. 결국 그 제품에 익숙해진 프로그래머는 다른 제품으로 옮겨가는 일이 점점 어려워진다. 이것은 MS가 잘하는 것이고, 타도 MS를 부르짖는 자바 진영의 메이저들도 결국 비슷한 방법으로 돈을 벌고 있다.
 
Spring은 일종의 J2EE 개발자의 독립운동이다.  (좀 오버가..ㅡㅡ;)

참조 : http://blog.naver.com/julymorning4/100024341807