스프링프레임웍

개념
- EJB 기반의 복잡함과 무거움을 극복하고 개발생산성 향상과 고품질의 시스템 개발을 위한 자바 플랫폼 상의 경량화된 오픈소스 웹 어플리케이션 프레임워크 - 안정성과 유연성이 입증되어 전자정부 표준 개발 프레임워크의 핵심 근간으로 활용

1. 자바 기반 경량화된 컨테이너의 선두주자, Spring 프레임워크

가. Spring 프레임워크의 개념

   - EJB 기반의 복잡함과 무거움을 극복하고 개발생산성 향상과 고품질의 시스템 개발을 위한 자바 플랫폼 상의 경량화된 오픈소스 웹 어플리케이션 프레임워크

- 안정성과 유연성이 입증되어 전자정부 표준 개발 프레임워크의 핵심 근간으로 활용

나. Spring 프레임워크의 특징

구분

설명

비고

객체 관리

컨테이너에서 직접 객체 관리(생성/소멸)

개발자의 객체 생성 및 소멸 관리 부담 감소

제어 반전

(IoC)

컨트롤의 제어권이 프레임워크에 존재

스프링에서 사용자 코드 호출 가능

의존성 주입

(DI)

각각의 계층이나 서비스들 간에 의존성 존재할 경우 프레임워크가 상호 연결시켜줌

XML 파일을 통한 환경설정

관점지향 프로그래밍

(AOP)

여러 모듈에서 공통적으로 사용하는 기능의 분리 지원

추상화된 트랜잭션 관리, 로깅, 보안 등의 공통 기능 활용

영속성

데이터베이스 처리 라이브러리와 인터페이스 제공

JDBC, iBatis, Hibernate 등에 대한 지원

- 작고 쉬운 과거의 자바 개발 환경을 따르자는 POJO(Plain Old Java Object) 기반의 특징을 가짐

[EJB 단점을 극복하는 Spring 프레임워크의 특징]

구분

EJB의 단점

Spring의 특징

코드 개발

EJB 구현 위해 실질적인 클래스 외에 3개 이상의 클래스 추가 생성 필요

경량화된 컨테이너로 코드 개발의 양이 줄고, 쉬워짐

테스트

테스트는 EJB 컨테이너에 배포 후 가능

(개발 생산성 저하)

TDD(Test Driven Development)와 CI(Continuous Integration) 사상 지원

실행 속도

분산 환경 지원 위한 Client와 Server 간 직렬화로 어플리케이션 속도의 저하

서비스 및 어플리케이션 간 의존성 및 결합도 감소로 실행 속도 저하 없음

확장성

대형 벤더들의 실행속도 향상 위한 개별 기능 추가로 EJB 기반 어플리케이션 간 이식성 저하

수많은 라이브러리 내장 및 별도 분리 지원으로 스프링 프레임워크에 통합이 용이

- EJB가 지원하는 모든 기능들을 내포하며 단점을 개선하고 대체하는 특징을 가짐

2. 경량화된 개발이 가능케 하는 Spring 프레임워크의 구성

가. Spring 프레임워크 구성 모듈

- 객체지향 기반으로 유연한 개발 및 확장성을 제공, 주요 사상으로는 AOP와 IoC를 꼽을 수 있음

나. Spring 프레임워크 구성 모듈별 기능과 역할

구성 모듈

기능 및 역할

세부 기능 및 사례

DAO

- 단순화된 JDBC 기능

- 대부분의 ORM 프레임워크와 통합

- 트랜잭션 관리 기능

- JTA에 대한 ‘global’ transaction 지원

- 단일 데이터 소스에 대한 ‘local’ transaction 지원

ORM

- 객체 관계형 모델 지원

- 다양한 DB 접속 방식 및 인터페이스 지원

- Hibernate, JDO, Oracle Toplink, iBatis, JPA 등

J2EE

- 원격접근

- EJB 대체 및 통합

- 스케줄링 및 동적 언어 지원

- 테스트 기반환경 제공

- 다양한 프로토콜에 대한 POJO 기반 원격접근

- JUnit 통합, DI에 의한 용이한 테스팅

- 어플리케이션 서버 밖에서 통합 테스트 지원

WEB

- Spring Web MVC

- 이벤트 기반 프레임워크

- 타 웹 어플리케이션 프레임워크와 대체 통합

- Request 기반 프레임워크

- JSP, PDF, Excel 등 다양한 View 기술 지원

- Struts, WebWork, JSF 등

Core(IoC)

- IoC(Inversion of Control) Container

- 객체간 의존성 감소로 코드 변경에 유연한 대처 가능하고 재사용 가능성 제고시킴

- 컨테이너가 객체의 생성부터 소멸까지 관리

- 컴포넌트를 개별적으로 테스트 가능

- The Hollywood Principle: “Don’t call me, I will call you”

- 컨테이너에 의한 Dependency Injection(의존성 주입)

AOP

- 트랜잭션 관리, 로깅 등과 같은 관심사에 대한 모듈화

- 횡단 관심사의 분리로 코드 변경 없이 더해지거나 제거 가능(유지보수성, 변경 용이성)

- Crosscutting Concern

- Aspect = Advice + Pointcut

- Join Point, Pointcut, Weaving

- AspectJ(사실상 표준)

3. Spring 프레임워크의 핵심 구성 모듈(Core Modules)

가. SW 컴포넌트 결합도를 낮추기 위한 제어의 역전 현상, IOC(Inversion of Control) 모듈

- 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 개발자로부터 컨테이너로 넘어간 현상

- 서블릿, EJB 컨테이너는 서블릿과 EJB에 대한 제어권만 컨테이너가 담당하고 객체에 대한 제어권을 개발자들이 직접 담당

- Spring 컨테이너는 일부 POJO에 대한 제어권만을 가지고 대부분의 POJO에 대한 제어권은 개발자에게 있는 상태

[IoC 컨테이너의 분류체계]

- DL(Dependency Lookup)은 저장소에 저장되어 있는 빈(Bean)에 접근하기 위해 개발자들이 컨테이너에 제공하는 API를 이용하여 사용하고자 하는 빈(Bean)을 Lookup하는 것(컨테이너에서 제공하는 API와 의존관계 증가)

- DI(Dependency Injection)는 각 클래스 사이의 의존관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결시켜주는 것(개발자들이 컨테이너 API를 이용하여 의존관계에 관여할 필요가 없어 API 종속성 감소)

[Dependency Injection의 유형]

유형

기능

Setter Injection

클래스 사이의 의존관계를 연결시키기 위한 방법

Constructor Injection

생성자를 통하여 클래스 사이의 의존관계를 연결시키는 방법

Method Injection

Singleton 인스턴스와 Non Singleton 인스턴스의 의존관계를 연결시키는 방법

나. 공통 기능의 재사용성 높여 주는 관점지향프로그래밍, AOP(Aspect Oriented Programming)

- 로깅이나 트랜잭션관리, 보안 등과 같은 시스템 공통 서비스(횡단관심사)를 컴포넌트 고유의 기능과 분리하여 유연하게 호출 / 재사용 가능하도록 해주는 프로그래밍 방식

- 시스템 서비스를 모듈화해서 컴포넌트에 선언적으로 적용할 수 있게 해 줌으로써 응집도가 높고 본연의 관심사에 집중하는 컴포넌트를 개발하는 방식

[AOP 개념도]

구분

설명

구현 및 사례

Primary Concern

- 시스템의 핵심가치와 목적 영역

- 컴포넌트 고유의 역할 및 기능

- 구현물을 Code라 부름

- 수강신청 서비스, 교과과정 서비스, 강사 서비스, 교육내용 서비스 등

Crosscutting Concern

- 횡단 관심사

- 시스템에서 공통으로 사용되는 요구사항

- 구현물을 Advice라 부름

- 트랜잭션 관리자, 보안모듈, 로깅모듈 등

Pointcut

- 횡단 관심사에 대한 Advice를 Code의 어디에 위치시킬 것인지를 결정

- Joinpoint 결정

Weaving

- Advice와 Code를 Pointcut 정보를 이용하여 결합

- 시점에 따라 컴파일시, 클래스 로딩시, 런타임시로 구분 가능

- 객체지향프로그래밍 기법에서 횡단관심사 구현의 어려움을 극복해 주고, 코드의 혼란을 방지해 줌

- 컴포넌트로 하여금 고유 기능에 집중할 수 있게 해 주고 개발의 단순화와 생산성 향상 효과를 제공

4. Spring 프레임워크에 대한 활용 방안

 

- Spring 프레임워크은 분산 환경을 지원할 수 없다는 것이 가장 큰 단점

- 분산 환경을 지원하는 어플리케이션 개발 할 때 적은 비용으로 Spring 프레임워크를 활용 가능

- 어플리케이션의 모든 기능은 Spring 프레임워크 기반 하에서 우선 개발 하고 EJB나 웹 서비스 통해 클라이언트와 인터페이스만 하도록 구현함으로써 개발생산성, 테스트 용이성 확보 가능

- POJO 빈을 이용하여 비지니스 계층을 전담하게 함으로써 비지니스 계층의 재사용성을 극대화

댓글