finerss's world!

About Spring

공부/Spring2011. 12. 12. 21:25

-Framework


1) Framework 란 무엇인가?

프레임워크란  프래그래머가 프로그램을 만드는데 있어 아주 기본이 되는 골격 코드를 말한다.

중요한 것은 이 골격이라는 것이 어떤 특별한 목적을 가지고 있다는 점이다. 건물을 만들기 위한 골격, 배를 만들기 위한 골격처럼말이다.

골격을 보면 앞으로 완성품이 무엇이 될지 예상할 수가 있따. 그래서 이 프레임워크를 반제품이라고 부르는 사람도 많다.

반제품, 즉 반쯤 완성된 제품이라는 의미이다. 반쯤 완성되었기 떄문에 프레임워크를 이용하는 사람은 나머지 반 부분만 채워 넣어주면 된다.

프레임워크 자체는 완전한 애플리케이션 소프트웨어가 아닌 어떤 문제영역을 해결하기 위한 잘 설계된 일반적인,

재사용 가능한 모듈(이미만들어진 '반') 이기 떄문에 완결된 애플리케이션으로 제공되지 못한다.

따라서 사용자가 프레임워크를 확장하여 비즈니스 요구사항을 만족시키는 완전한 애플리케이션 소프트웨어를  완성시키는 작업( 나머지 ' 반') 이 요구되

는 것이다.

<변경이되지않는 Core부분인 Cold Spot 위에 훅 포인트(Hook Point)를 통해 확장한다(Hot Spot).>
 


즉 프레임워크는 Open-Closed 원칙 (이하 OCP)을 그대로 따르고있다. 재사용되는 공통된 부분은 프레임워크로 구현되어

다른사람이 그 내부를 가공 없이 이용하도록 제공하고 있다(Closed). 확장이 필요한 부분은 사용자 요구사항에 맞게 정의하여 확장시키므로

문제영역에 최적화된 애플리케이션 설계가 완성된다(Open) *이를 확장에는 열려있고, 병경에는 닫혀있다라고 말한다.

프레임워크를 애플리케이션에 적용할 떄 변경되지 않고 반복적으로 재사용되는 부분을 프레임워크의 코어로 정의한다. 변경이 잘 일어나지 않는

프레임워크의 코어부분을 콜드 스팟(Cold spot)이라고 부르기도 한다.(OCP) 에서 Closed 모듈에 해당한다).

프레임워크 코어는 각 애플리케이션마다 확장 모듈을 연결하는 확장 점을 제공하는데, 이를 훅 포인트(Hook Point)라고 한다.

대개 훅 포인트는 추상 클래스나 인터페이스의 형태로 나타낸다. 애플리케이션마다 이 훅 포인트를 통해 확장 모듈을 바인딩한다.

이확장 모듈을 핫스팟(Hot Spot)이라고 부른다(OCP에서 Open 모듈에 해당한다).

일반적으로 훅 포인트는 사용자가 소스코드 상에서 함수 호출을 통해 확장 모듈을 등록(혹은 바인딩)하게 된다.

하지만 바인딩 코드들이 사용자 코드 곳곳에 분포되어 산만하고 반복 작업을 하게 되는데 이런 불편 떄문에 현재 프레임워크는 메타 데이터를

이용하여 훅 포인트로의 연결, 정책 설정들을 정의하고 있는 추세이다.

이렇게 프레임워크에 기반해 애플리케이션을 개발하게 되면 생산성이 향상될 뿐 아니라 여러 애플리케이션이 비슷한 구조를 가지게 되므로
 
관리하기도 쉬워진다.

2) 자바 프레임워크에는 어떤 것이 있는가?

대표적인 자바 프레임 워크로는 (이것이 전부는아니다)

웹 어플리케이션 프레임워크: Spring MVC, Struts, WebWork 등
데이터베이스 관련 프레임워크: iBatis, Hibernate, Spring DAO
비지니스 관련 프레임워크 : Spring
*Spring의 경우 객체를 생성하고 객체간의 의존관계를 정의하고 라이프 사이클을 제어하는 틀을 제공해주며,
거기에다 다른 프레임워크들을 서로 연결해 주는 역활도 한다.

-Spring 소개

1)EJB

Spring을 이야기 하기 전에 앞어 EJB를 살펴보면, EJB는 Enterprise JavaBeans 의 약자로 엔터프라이즈 급의 서비스를 제공하는 것을

목적으로 한다. EJB에 대한 문서를 읽어보면 'EJB는 엔터프라이즈 애플리케이션 개발을 단순화 한다'  라고 소개하고 있다.

하지만 이는 그 이전의 엔터프라이즈 애플리케이션과 비교하였을 때 맞는 이야기이고 실상은 그 개발이 단순화하지 못하고 있는것이

사실이다.

EJB의 선언적 프로그래밍 모델이 트랜잭션이나 보안과 같은 개발의 기반구조에 해당하는 여러 측면들을 단순화 시킨것은 사실이지만,

배치 설명자(deployment descriptor), 홈/리모트 인터페이스 등과 같은 과도한 코드를 강제함으로써 다른 방식으로 복잡해졌다고

말할 수 있다. EJB는 분산 객체나 원격 트랜잭션 등의 복잡한 문제를 해결하기 위하여 만들어 졌기 떄문에 복잡하지만,

아이러니하게도 현실적으로 봤을 때 상당수의 엔터프라이즈 애플리케이션은 그정도로 복잡하지 않다는 것이다.

이러한 고민 안에서 스프링은 탄산하게 되었다.

2)Spring

Spring은 로드 존슨이 만든 오픈소스 프레임워크 이며, 복잡한 엔터프라이즈 애플리케이션을 겨냥해 만들어졌다.

스프링은 평범한 자바빈즈(이하 POJO - Plain Old Java Object)를 사용하는데도 EJB에서만 가능했던 일들이 모두 이뤄지게 한다.

그러나 스프링의 유용성은 서버 축 개발에만 국한 한 것이아니라, 모든 자바 애플리케이션에서 단순성, 테스트 용이성, 느슨한 결함성의 측면에서

스프링의 이점을 얻을 수 있다.

Spring 의 특징을 보면

경량 - 스프링은 그 크기와 부하의 측면에서 경량(liteweight)이다. 전체 스프링 프레임워크는 기껏해야 몇 메가 안되는 하나의 JAR 파일로 배포된다.
또한 스프링 자체의 부하는 무시해도 되는 수준이다.

제어 역행- 스프링은 제어 역행(IoC - Inversion of Control) 이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
IoC가 적용되면 객체는 의존하는 다른 객체를 생성하거나 찾는 대신, 수동적으로 의존성을 받는다. 이런의미로 IoC를 의존성 주입이라고 말하기도한다.

관점지향 - 스프링은 관점지향 프로그래밍(AOP : Aspect Oriented Programming)을 위한 풍부한 지원을 한다.
관점지향 프로그래밍은 애플리케이션 비지니스 로직을 시스템 서비스로부터 분리함으로써 응집된 개발을 가능하게 한다. 애플리케이션 객체는 원래 해야할 일인 비지니스 로직을 수행하는 것 이외에는 아무것도 하지않는다. 애플리케이션 객체는 로깅이나 트랜잭션 지원과 같은 시스템적인 관심사에는 책임이 없으며 신경조차 쓰지 않는다.

컨테이너 - 애플리케이션 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 스프링은 일종의 컨테이너라고 말할 수 있따. 빈의 인스턴스를 하나만
생성시키거나 또한 필요할 떄마다 설정 가능한 프로토 타입을 기반으로 새로운 인스턴스를 생성시키는 등 빈이 어떻게 생성되야 하는지를 직접
설정할 수 있다. 또한 빈이 서로 어떻게 연관돼야 하는지도 설정할 수 있다. 이 부분이야 말로 스프링의 가장 핵심적인 기능이라고 말할 수 있다.

프레임워크 - 스프링을 사용하면 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있다. 스프링에서 애플리케이션 객체는 대게 XML파일
내에 선언적으로 구성한다. 또한 스프링은 애플리케이션 로직 개발은 개발자에게 맡기고, 다양한 기반구조 기능을 제공한다.







'공부 > Spring' 카테고리의 다른 글

Spring IOC  (0) 2011.12.12
엔티티 빈  (0) 2011.07.26
RMI(원격 메소드 호출, Remote Method Invocation)  (3) 2011.07.04