스프링 프레임워크(Spring Framework) 소개
스프링 프레임워크(Spring Framework) 사용에 앞서 특징에 대해 알아보도록 하겠습니다.
스프링(Spring)
스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 프레임워크입니다. 애플리케이션 프레임워크는 애플리케이션의 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API등을 제공합니다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며, 한국에서는 공공기관의 웹 서비스 개발시 사용을 권장하는 전자정부 표준프레임워크의 기반 기술로서 사용되고 있습니다.
스프링의 역사
스프링은 로드 존슨(Rod Johnson)이 2002년에 출판한 자신의 저서인 Expert One-on-One J2EE Design and Developement 에 선보인 코드를 기반으로 시작하여 점점 발전하게 되었습니다. 스프링은 2003년 6월에 최초로 아파치 2.0 라이선스로 공개되었으며 주요 버전의 이력은 다음과 같습니다.
- 1.0 : 2004년 3월
- 2.0 : 2006년 10월
- 2.5 : 2007년 11월
- 3.0 : 2009년 12월
- 3.1 : 2011년 12월
- 4.0 : 2013년 12월
스프링의 특징
스프링은 자바를 통해 엔터프라이즈 시스템을 개발하기 위해 좀 더 나은 방법과 전략을 찾고 고민한 많은 개발자의 노력이 오랜 시간에 걸쳐 집약된 결정체입니다. 이렇듯 많은 개발자가 제안했던 아이디어를 구체화하여 오픈소스 생태계를 통해 효과적으로 검증하고 발전시킨 결과물이 바로 스프링입니다.
· 단순함 (Simplicity)
스프링은 EJB(Enterprise Java Beans)라는 표준 기술을 비판하면서 등장했습니다. EJB는 불필요하게 복잡한 기술이었고 스프링의 단순하고 명쾌한 접근 방법과 자바 언어의 근본을 통해 문제에 대한 해법을 찾았습니다.
자바는 이상적인 객체지향 언어로써 등장하였고 이로 인하여 학계와 업계에서 모두 주목을 받았지만 시간이 지날수록 복잡해져 가면서 객체지향 언어의 특징을 잃어가게 되었습니다.
스프링은 객체지향 언어의 특징을 살려서 개발할 수 있도록 도와주는 도구이며 가장 단순한 객체지향 개발 모델인 POJO 프로그래밍을 지향합니다.
· 유연성 (Flexibility)
스프링은 유연성과 확장성이 매우 뛰어납니다. 유연성으로 인하여 다른 많은 프레임워크와 편리하게 접목하여 사용할 수 있습니다. 스프링 기능의 대부분은 핵심 기능을 확장하여 발전시킨 결과물이며 개발자들에게 스프링을 확장해서 사용하도록 권장합니다.
스프링은 공개 이후 코드 베이스를 수정하거나 새로 만드는 일 없이 기존 아키텍쳐와 설계 및 코드를 유지하면서 안정적으로 발전해왔습니다. 따라서 스프링을 제대로 사용하기 위해서는 유연성과 확장성을 이해하고 필요에 맞게 확장하여 목적에 맞는 프레임워크를 만들어 사용할 줄 알아야 합니다.
· 스프링 컨테이너
스프링은 Spring Container 또는 Application Context 라고 불리는 스프링 런타임 엔진을 제공합니다. 스프링 컨테이너는 애플리케이션의 기본 틀이며 설정 정보를 참고하여 애플리케이션을 구성하는 Object를 생성하고 관리합니다.
스프링 컨테이너는 일반적으로 웹 모듈에서 동작하는 서비스나 서블릿으로 등록하여 사용하고 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리합니다.
· IoC/DI, 서비스 추상화, AOP
스프링은 애플리케이션을 구성하는 Object가 생성되고 동작하는 방식에 대한 틀과 함께 애플리케이션 코드가 어떻게 작성돼야 하는지에 대한 기준도 제시해줍니다. 이런 틀을 프로그래밍 모델이라고 하는데 스프링은 3가지 핵심 프로그래밍 모델을 지원합니다.
1. IoC(Inversion of Control) / DI(Dependency Injection)
Object의 생명주기와 의존 관계에 대한 프로그래밍 모델입니다. 스프링의 가장 중요하고 핵심적인 기능으로서 Object의 생명주기를 관리하고 의존성 주입(DI : Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰줍니다. 이러한 기능들은 주로 환경설정을 담당하는 XML 파일에 의해 설정되고 수행됩니다.
스프링이 직접 제공하는 모든 기술과 API, 컨테이너도 IoC/DI 방식으로 작성되어 있으며 스프링을 올바르게 이해하고 효율적으로 사용하는데에 기본이 되는 가장 중요한 기술입니다.
2. 서비스 추상화
스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나고 유연한 애플리케이션을 만들 수 있습니다. 이를 가능하게 해주는 것이 서비스 추상화입니다. 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법입니다.
3. AOP(Aspect Oriented Programming)
AOP는 관점 지향 프로그래밍의 약자로써 스프링의 로깅이나 보안, 트랜잭션 등의 핵심적인 비즈니스 로직과는 관련이 없으나, 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행시에 서로 조합할 수 있도록 해줍니다.
간단히 설명하면 공통 모듈을 만든 후 코드 외부에서 비즈니스 로직에 삽입하여 개발하는 방식이며 코드 외부에서 설정되는 것이 핵심이라 할 수 있습니다.
· 기술 API
스프링은 애플리케이션을 다양한 영역에 활용할 수 있는 방대한 양의 기술 API를 제공합니다. UI 작성 및 웹 프레젠테이션 계층, 비즈니스 서비스 계층, 기반 서비스 계층, 도메인 계층, 데이터 액세스 계층 등에서 필요한 주요 기술을 일관된 방식으로 사용할 수 있도록 지원해줍니다.
스프링이 제공하는 기술 API들은 모두 스프링의 프로그래밍 모델에 따라 작성되어 있기 때문에 코드에 자연스럽게 적용할 수 있습니다.스프링의 모든 기술은 표준 자바 엔터프라이즈 플랫폼(Java EE)에 기반을 두고 있기 때문에 표준 기술과 더불어 오픈소스 및 주요 상용 기술에 대한 지원도 다양하게 제공됩니다. 널리 알려진 기술 API 및 라이브러리로는 iBATIS(MyBatis), Hibernate 등이 있습니다.
스프링 프레임워크의 공식 사이트는 다음과 같습니다.
다음은 국내 전자정부 표준프레임워크 공식 사이트입니다.
이상으로 Spring Framework의 특징에 대해서 알아보았습니다.
※ 참고 문헌
이일민, 『토비의 스프링 3.1』, 에이콘출판(2012)
위키백과, 스프링 프레임워크, https://ko.wikipedia.org/wiki/스프링_프레임워크