스프링의 소개

스프링이란?

  • 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
  • EJB(Enterprise Java Beans)의 단점을 보완한 프레임 워크
  • DI(Dependency Injection, 의존성 주입)과 AOP(Aspect-Oriented Programing, 관점 지향 프로그래밍)이 지원되는 경량 컨테이너 & 프레임워크


  • 자바 플랫픔으로서 자바 애플리케이션을 개발하는데 필요한 하부 구조를 포괄적으로 제공한다.
  • 스프링이 하부 구조를 처리하므로 개발자는 애플리케이션 개발에 집중할 수 있다.

경량화

  • 스프링 자체가 가볍거나 작은 규모의 코드로 이루어진 것은 아니다.
  • 오히려 스프링은 20여개의 모듈로 세분화되고 복잡하고 방대한 코드를 가진 프레임워크이다.
  • 경량화가 특징인 이유는 기존 자바 엔터프라이즈 기술의 불필요한 복잡함에 반대되는 개념에서 시작되었다.
  • 주류 기술이었던 EJB는 고가의 무거운 자바 서버(WAS)가 필요했고, 다루기 힘든 설정파일 구조, 패키징, 불편한 배포 등이 단점이었다.
  • 반면, 스프링은 톰캣과 같은 단순한 서버환경에서도 동작하며, 단순한 개발환경으로도 엔터프라이즈 애플리케이션 개발하는데 충분하다.
  • 또 EJB 등의 기존 프레임워크에서 만들어진 코드에 비해 코드량이 적고 단순하기도 하다.
  • 즉, 기존에 비해 빠르고 간편하게 애플리케이션을 개발할 수 있어 생산성이 뛰어난 프레임워크다.

스프링 기능

  • 경량 컨테이너로서 자바 객체를 직접 관리
    • 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
  • POJO(Plain Old Java Object) 방식의 프레임워크
    • 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
  • 제어 반전(또는 제어의 역전)(IoC: Inversion of Control)을 지원
    • 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
  • 의존성 주입(DI: Dependency Injection)을 지원
    • 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
  • 관점 지향 프로그래밍(AOP: Aspect-Oriented Programming)을 지원
    • 트랙잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
  • 확장성이 높음
    • 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하다.
    • 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.
  • 다른 프레임워크들의 통합

스프링의 구성

  • Spring Core
    • Core 컨테이너 기능
    • Spring 프레임워크의 근간이 되는 IoC (또는 DI) 기능을 지원하는 영역
    • BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다.
  • Spring Context
    • Spring Core에서 지원하는 기능외에 추가적인 기능들과 좀 더 쉬운 개발이 가능하도록 지원한다.
    • 또, JNDI, EJB 등을 위한 Adaptor들을 포함하고 있다.
  • AOP
    • Spring 프레임워크에 AOP를 지원하는 기능이다.
  • DAO
    • JDBC 기반하의 DAO 개발을 좀 더 쉽고, 일관된 방법으로 개발하는 것이 가능하도록 지원한다.
  • ORM
    • Object-Relational Mapping 프레임워크인 Hibernate, MyBatis, JDO와의 결합을 지원하기 위한 기능이다.
  • Spring Web
    • Web Application 개발에 필요한 Web Application Context와 MultipartRequest 등의 기능을 지원한다.
  • Portlet
    • 포탈 서버에서 돌아가는 독립된 웹 애플리케이션 원격 지원 기능

스프링 창시자

  • 스프링의 창시자인 로드 존슨(Rod Johnson)
    • 2003년 『Expert One-on-One J2EE Design and Development』책을 출간하여 JE22 애플리케이션 설계와 독창적인 개발 전략을 다루었다.
    • “항상 프레임워크 기반으로 접근하라”를 강조하였다.

오픈소스

  • 스프링은 아파치 라이선스 2.0(Apache License Ver 2.0)을 따른다.
    • 영리 목적 및 비공개 프로젝트에 자유롭게 이용가능하다.
    • 스프링을 사용하고 원 저작자를 밝히고 라이선스 정보를 포함시키는 등의 의무사항을 지켜야 한다.
  • 오픈소스는 무료로 이용할 수 있고 소스코드가 모두 공개되어 수많은 다양한 환경의 개발자들이 사용하므로 테스트에 용이하고, 빠른 피드백을 받을 수 있는 장점이 있다.
  • 반면, 오픈소스 프로젝트 팀의 사정 상 개발이 여의치 않을 경우 프로젝트가 중단에 드랍되거나 버그 수정에 많은 시간이 소요될 수도 있다.
  • 특히 스프링은 애플리케이션 프레임워크로 그 규모가 일반 오픈 소스 프로젝트에 비해 크고 엔터프라이즈 개발자들에게는 중요한 프레임워크이므로 오픈 소스의 문제점을 안고 가기에는 부정적이었다.
  • 그래서 로드 존슨과 스프링 오픈소스화의 대표적 공로자인 유겐 흴러(Juergen Hoeller)와 자바 엔터프라이즈에서 최상급 개발자들이 스프링 소스(SpringSource)를 만들어 스프링 프레임워크의 실질적인 개발을 책임지고 있다.
  • 스프링 소스는 2009년 세계적인 IT업체인 VMware가 인수하여 더욱 안정적인 환경에서 개발되고 있다.


+ Recent posts