Dev/Spring

Spring2.5 - 개요 & 구성요소 & MVC패턴

창문닦이 2019. 3. 28. 10:41

스프링 개요

자바 엔터프라이즈 개발의 효율성을 높이는 오픈소스 경량 애플리케이션 프레임워크. 

말 그대로 소스코드가 굉장히 간략해지고 가벼워졌다. EJB는 유일한 엔터프라이즈 애플리케이션 개발 프레임워크였는데 너무 어려워서 개발생산성이 뛰어난 스프링이 나왔다. 스프링2.5와 3.0에서 객체 지향과 의존성 주입(IoC 제어의역전 /DI 의존성주입) 문법을 두 버전 모두 실습하고자 한다.

핵심 도구

① 객체 지향과 의존성 주입(IoC/DI)

② AOP : 테스트를 할때 어디까지 정상처리가 되고 오류가 나는지 도와줌. 굉장히 어렵다.

 

POJO 프레임워크 (비침투적 프레임워크)

① 순수 자바로 프로그래밍할 수 있다.(자바 콘솔 프로그램도 만들수있음) 

② POJO는 순수 자바클래스로 EJB(EJB 3.0 이전)나, Servlet과 같은 컨테이너에 종속되지 않는 자바 객체를 뜻한다. 

③ Spring Framework에서 관리하는 모든 POJO는 기본적으로 Singleton 처럼 관리된다. 

 

싱글톤(Singleton) 방식 : VM 위에 클래스 인스턴스가 하나만 생성되는 경우를 의미한다. 대표적인 예가 Calendar클래스. 

public class SingletonTest { 
    private static SingletonTest instance = new SingletonTest();
    private SingletonTest() { 
    //기본생성자
    }

    public static SingletonTest getInstance() { 
    return instance;
    } 
}

사용법은 다음과 같다.
SingletonTest st = SingletonTest.getInstance();

 

제어 역전 (IoC) / 의존 관계 주입(Dependency Injection)

① 객체 의존성 관리의 핵심

② 스프링 컨테이너(웹 컨테이너 = jsp컨테이너 + 서블릿컨테이너)가 효과적인 객체 생성 및 의존성 관리 기능 지원

③ Application을 개발하기 위하여 필요로 하는 POJO 빈을 프레임웍 자체 내에서 관리해 줌으로써 인스턴스 생성과, 생성된 인스턴스들 간의 의존관계를 유연 하게 변경하는 것이 가능하도록 지원한다.( 서블릿 설정 파일을 통해 객체간의 의존관계를 정의)

 

애스팩트 지향 프로그래밍 (AOP)

① 변경 가능한 다수의 위치를 대상으로 하는 관심사를 관리하고 적용하는 기법

② 프록시를 이용해서 비침투적인 방식으로 적용

 

다양한 프레임워크와 조합 iBATIS , Hibernate, JPA, JDO, JMS, Quartz, Struts 등의 프레임워크와 연동을 제공 한다.

참고 - Aspect Oriented Programming(관점 지향 프로그래밍)  

관점 지향 프로그래밍은 새로운 방법론으로, 모듈화하는 새로운 단위인 애스펙트(aspect, 다른 여러 모듈들에 걸쳐 기능을 제공함)를 도입하여 횡단 관심사를 분리한다. 횡단 관심사를 핵심 모듈에 포함 시키는 대신에 관점지향 프로그래밍을 사용하여 별도의 애스펙트에 구현한다. 컴파일러와 비슷한 애스펙트 직조기(aspect weaver)는 핵심 모듈(클래스)과 횡단 모듈(애스펙트와 클래스)을 직조(weaving) 과정으로 결합하여 최종 시스템을 구성한다. 관점 지향 프로그래밍은 횡단 관심사를 명확하게 모듈화 하기 때문에 설계, 구현, 그리고 유지보수하기가 쉬운 시스템을 제작할 수 있다.

여러 모듈에 걸쳐 있는 시스템 전체적인 관심사를 횡단 관심사(crosscutting concern)라고 한다. 관점지향 프로그래밍(Aspect Oriented Programming, AOP)은 이런 횡단 관심사를 관리한다. 그리고 관심사(concern)는 전체적인 소프트웨어 시스템의 목적을 달성하기 위해 처리해야 하는 구체적인 요구 사항이나 고려사항을 의미한다.

스프링 프레임워크 모듈(구성요소)

 

 

스프링은 컨테이너 자체가 단순화되어있고 이 컨테이너들을 통해 자동화시키고자 함

① Spring Core : 가장 기본이 되는 핵심 엔진. 스프링의 의존관계 주입 기능을 지원.BeanFactory(Factory 패턴의 구현)이다. BeanFactory는 Inversion of Control (IOC) 패턴을 사용하여 애플리케이션의 설정 및 의존성 스팩을 실제 애플리케이션 코드에서 분리시킨다.

② Spring AOP :  에러를 수시로 체크하여 효율적으로 관리할 수 있는 기술

③ Spring Context : 코어를 감싼다. 웹을 만들기 위한 기본 Context를 통해 web / web MVC를 실행. JNDI, EJB, 국제화, 밸리데이션, 스케줄링 같은 엔터프라이즈 서비스들이 포함된다.

④ Spring DAO :JDBC, DAO 지원.  트랜잭션 관리. 스프링에서 만든 DB를 연결하는 방법 ibatis만큼 간략화 되지 않아 사용이 잦진 않음

⑤ Spring ORM : DB를 연결하는 기술. Hibernate, iBatis 지원.

⑥ Spring web MVC : 웹 어플리케이션의 MVC 기능 지원. 스프링에만 있는 고유의 기술. pdf파일에 대한 구조의 이해 필요. 통계자료가 실시간으로 바뀌는 데이터를 pdf나 엑셀로 바뀌도록 기능을 구현하고 싶을때 사용하는 기술. (Velocity, Excel, PDF와 같은 다양한 UI 기술들을 사용하기 위한 API 제공)

⑦ Spring web : 웹 컨텍스트 모듈은 애플리케이션 컨텍스트 모듈의 상단에 구현되어, 웹기반 애플리케이션에 컨텍스트를 제공한다. 기본적인 웹 프로그램 지원. Web Application 개발에 필요한 Web Application Context, Multipart Request(파일) 등의 객체와 기능 지원. Struts, Webwork(=struts2) 등과 같은 다른 프레임워크와의 통합 지원.

스프링 MVC

스프링 MVC는 Front Controller pattern 기반 구현.

클라이언트가 보낸 요청을 받아내는 프론트 컨트롤러(xml파일. dispatcherServet)가 존재. 어느 컨트롤러에 할당되는지 전달. 컨트롤러는 여러개가 될 수 있음. DB에서 오는 데이터건 컨트롤러에서 오는 데이터컨 전달되는 데이터는 모델에 해당. VIew는 출력되는 페이지. Model에 따라 어느 View로 연결되어야 하는지 Front Controller 가 다시 view를 정해서 전달.

- DispatcherServlet을 FrontController 구현체로 제공 - DispatcherServlet 생성과 함께 WebApplicationContext 객체 생성 (web.xml에서 진행)

 

 

① 클라이언트의 요청

② 프론트컨트롤러가 핸들러매핑에게 request를 전달

③ request를 보고 어느 컨트롤러에게 가야되는지 전달

④ 프론트컨트롤러는 해당되는 컨트롤러에 전달

⑤ request를 받은 컨트롤러는 DB에 연결해야 된다면 액세스하여 Model을 받아 프론트 컨트롤러에게 다시전달

⑥ ViewResolver를 이용해서 View를 결정하고 호출

호출된 View는 전달된 Model 객체를 이용해서 화면을 구성하고 반환

(a.jsp)에 모델을 전달하여 클라이언트에게 response


스프링 플러그인 기능 설치 - 이클립스 

Help ▶ Eclipse Marketplace 

find ▶ spring ▶ 원하는 버전 Install

maven.springframework.org 페이지에서 다운로드  

spring-2.5.6.jar파일 다운