Spring3 발표자료 - 김연수

23
1 SPRING 3 스터디 2010-10-04 발표자 : 김연수

description

이전 회사에 근무하면서, 스프링을 처음 사용할때 스프링을 이용해 관리자 웹 사이트 개발을 하나 마친 후, 스프링에 관한 세미나를 준비하여 사내 세미나 발표를 하였던 자료 입니다. * 기존에 올린게 깨져서 지우고 다시 올렸는데, Re-upload 기능이 있었네 ㅜ.ㅜ

Transcript of Spring3 발표자료 - 김연수

Page 1: Spring3 발표자료 - 김연수

1

SPRING 3 스터디 2010-10-04

발표자 : 김연수

Page 2: Spring3 발표자료 - 김연수

2

Contents Table

Ⅰ. 스프링이란?

1. 스프링 개요

2. 스프링 아키텍처

3. 스프링 성공요인

4. 스프링의 목적

5. 스프링의 핵심(IoC, DI, AOP, POJO)

6. 스프링 3의 새기능

7. 스프링의 모듈 및 모듈간 의존관계

Page 3: Spring3 발표자료 - 김연수

3

Ⅰ. 스프링이란?

1. 스프링 개요

2. 스프링의 아키텍처

3. 스프링의 성공요인

4. 스프링의 목적

5. 스프링의 핵심기술(IoC, DI, AOP)

6. 스프링3의 새 기능

7. 스프링 모듈 및 모듈간 의존관계

Page 4: Spring3 발표자료 - 김연수

4

스프링 개요 I. 스프링이란?

스프링 개요

분류 및 성숙도 평가 설명

라이선스 Apache 2.0

기능성 ★★★★(중대형 규모의 기업의 기능적인 요구사항을 충족시킴)

커뮤니티 ★★★(개발, 오류 보고, 수정 등의 활발할 커뮤니티 활동이 있음)

성숙도 ★★★★(강력하며 높은 품질의 안정적이며 우수한 성능을 충족함)

적용성 ★★★(프레임워크가 성숙하여 기업 환경에 즉시 반영 가능함)

트렌트 ↗(전반적으로 발전하고 있으며, 중요도가 커지고 있음)

Spring Framework는 JavaEE 기반의 어플리케이션 개발을 쉽게 해주는 오픈소스 어플리케이션 프레임워

크로, 간단한 자바 객체(POJO : Plain Old Java Object) 를 Spring의 경량(Lightweight) 컨테이너를 통해

생성 및 관리하는 빈(Bean)으로 처리해준다.

* Open Source Catalogue 2007, Optaros (Spring 2.0 기준)

Page 5: Spring3 발표자료 - 김연수

5

스프링 아키텍처 I. 스프링이란?

Spring Framework는 어플리케이션을 구성하는 Bean 객체의 생명주기를 관장하는 Core를 기반으로

DAO, ORM, AOP, JEE Web으로 구성됨

스프링 아키텍처

구분 설명

Core Core패키지는 프레임워크의 가장 기본적인 부분이고 IoC와 의존성 삽입(Dependency Injection-DI)기능을 제공한다.

DAO DAO 패키지는 JDBC 코딩과 특정 데이터베이스 업체의 에러코드 파싱 등과 같은 작업의 필요성을 제거한 JDBC 추상화 계층을 제공한다. 또한 프로그램적인 트랜잭션 관리 뿐 아니라 선언적인 트랜잭션 관리 기능을 제공한다.

ORM ORM 패키지는 JAP, JDO, Hibernate, iBatis 등과 같은 객체-관계 맵핑(Object-Relational Mapping)을 위한 통합 계층을 제공한다.

AOP AOP 패키지는 AOP Alliance에서 정의한 Aspect-지향 프로그래밍 방식을 지원한다.

Web Web 패키지는 멀티파트 파일 업로드기능, 서블릿 리스너를 사용한 IoC컨테이너의 초기화, 웹-기반 애플리케이션 컨텍스트 등과 같은 기본적인 웹-기반 통합 기능들을 제공한다.

JEE Spring 환경에서 다양한 Java EE 기술을 사용할 수 있도록 지원한다.

Page 6: Spring3 발표자료 - 김연수

6

스프링의 성공요인 I. 스프링이란?

스프링은 단지 최첨단의 화려한 기능을 제공해주기만 하는게 아니라, 오히려 견고하고 건전한 자바와 엔터프라이즈 개

발의 핵심 가치에 충실했기 때문에, 스프링을 사용하는 개발자들은 자연스럽게 자바와 엔터프라이즈 개발의 기본에 충

실한 베스트 프랙티스를 적용할 수 있고, 이상적인 개발 철학과 프로그래밍 모델을 이해하게 되고, 좋은 개발 습관을 채

득하게 된다.

스프링의 성공요인

단순함

• EJB의 불필요하게 복잡한 기술을 단순하고 명쾌하게 접근

• 시간이 지나면서 기술이 복잡해져 잃어버렸던 객체지향 언어의 장점을 다시 살려줌(단순한

POJO 프로그래밍)

유연성

• 뛰어난 유연성과 확장성

• 많은 서드파티 프레임워크의 지원

• 확장을 권장하며, 개발자가 직접 확장해서 사용해도 버전 호환성 문제가 거의 없음

Page 7: Spring3 발표자료 - 김연수

7

스프링의 목적 I. 스프링이란?

스프링의 목적은 경량급 프레임워크인 스프링을 활용해서 엔터프라이즈 애플리케이션 개발을 편하게 하는 것이다.

스프링의 목적

엔터프라이즈 개발의 복잡함

• 기술적인 제약 조건과 늘어나는 요구사항

• 엔터프라이즈 애플리케이션이 구현해야

할 핵심기능인 비즈니스 로직의 복잡함

증가

비 침투 적인 방식을 통한 효과적인 해결책:

스프링

• EJB의 문제점인 어떤 기술을 적용했을 때

그 기술과 관련된 코드나 규약 등을 코드

에 등장시키는 침투적인 기술을 스프링은

DI, AOP 등으로 비침투적으로 해결

• 일관성 없는 기술과 서버 환경의 변화에

대응하기 위한 서비스 추상화(기능을 인

터페이스에 정의하고 그를 상속받아 구현

하는 형태, 스프링의 기본적인 클래스도

확장하기 쉽게 인터페이스로 많이 구성됨)

Page 8: Spring3 발표자료 - 김연수

8

I. 스프링이란?

스프링의 핵심(IoC)

IoC(Inversion of Control) Container는 객체의 생성 시, 객체가 참조하고 있는 타 객체에 대한 의존성을 소스 코드 내부

에서 하드 코딩 하는 것이 아닌, 소스 코드 외부에서 설정하게 함으로써, 유연성 및 확장성을 향상시킨다.

스프링의 핵심(IoC, DI, AOP, POJO)

Page 9: Spring3 발표자료 - 김연수

9

I. 스프링이란?

스프링의 핵심(IoC, DI)

IoC의 주요 기능

Dependency Injection : 객체 생성시 의존성을 주입시켜준다.

Bean Lifecycle Management : 객체 생성 및 파괴 등의 생명주기를 관리한다.

스프링의 핵심(IoC, DI, AOP, POJO)

Page 10: Spring3 발표자료 - 김연수

10

I. 스프링이란?

스프링의 핵심(IoC, DI)

Scope 설명

singleton 하나의 Bean 정의에 대해서 Spring IoC Container 내에 단 하나의 객체만 존재한다.

prototype 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다.

request 하나의 Bean 정의에 대해서 하나의 HTTP request의 생명주기 안에 단 하나의 객체만 존재한다. 즉, 각각의 HTTP request는 자신만의 객체를 가진다.

session 하나의 Bean 정의에 대해서 하나의 HTTP Session의 생명 주기 안에 단 하나의 객체만 존재한다.

global session 하나의 Bean 정의에 대해서 하나의 global HTTP Session의 생명주기 안에 단 하나의 객체마 존재한다. 일반적으로 portlet context 안에서 유효하다.

IoC Container에서 설정할 수 있는 Bean Scope(객체가 유효한 범위)

다음과 같이 BeanScope를 설정하면 IocContainer가 설정된 BeanScope를 참조하여 Bean의 LifeCycle을 관리하여 준다.

스프링의 핵심(IoC, DI, AOP, POJO)

Page 11: Spring3 발표자료 - 김연수

11

I. 스프링이란?

스프링의 핵심(AOP)

객체지향 프로그래밍을 보완하는 개념으로 어플리케이션을 객체지향적으로 모듈화 하여 작성하더라도 다수의 객체들

에 분산되어 중복적으로 존재하는 공통 관심사가 여전히 존재한다. AOP는 이를 횡단관심으로 분리하여 핵심관심과 엮

어서 처리할 수 있는 방법을 제공한다.

Pointcut : 어떤 클래스의 어느 JoinPoint를 사용할 것인지를 결정하는 선택 기능 JoinPoint : Advice가 삽입될 위치 Advice : 관점의 실제 구현체로 결합점에 삽입되어 동작할 수 있는 코드

스프링의 핵심(IoC, DI, AOP, POJO)

Page 12: Spring3 발표자료 - 김연수

12

I. 스프링이란?

스프링의 핵심(AOP)

- 중복 코드의 제거 • 횡단 관심을 여러 모듈에 반복적으로 기술되는 현상을 방지

- 비즈니스 로직의 가독성 향상 • 핵심 기능 코드로부터 횡단 관심 코드를 분리함으로써 비즈니스 로직의 가독성 향상

- 생산성 향상 • 비즈니스 로직의 독립으로 인한 개발의 집중력을 높임

- 재사용성 향상 • 횡단 관심 코드는 여러 모듈에서 재사용될 수 있음

- 변경 용이성 증대 • 횡단 관심 코드가 하나의 모듈로 관리되기 때문에 이에 대한 변경 발생시 용이하게

수행할 수 있음

스프링의 핵심(IoC, DI, AOP, POJO)

Page 13: Spring3 발표자료 - 김연수

13

프로젝트 적용 사례 I. 스프링이란?

프로젝트 적용 사례

가맹점 ASP 프로젝트에 DI 및 AOP 사용한 사례입니다.

쿠폰 관리 DB 처리

시퀀스관리 DB 처리

메일 발송 처리

파일 업로드 처리

HTTP 파일 전송

Service 클래스의 B/L에서의 트랜잭션을 관리 한다(메소드에서 Exception이 발생하는 경우 rollback)

Page 14: Spring3 발표자료 - 김연수

14

프로젝트 적용 사례 I. 스프링이란?

프로젝트 적용 사례

가맹점 ASP 프로젝트에 DI 및 AOP 사용한 사례입니다.

CouponService

MailSender UploadManager

CouponDAO

SequenceDAO

HttpFileSender

메일발송 HTTP 파일 전송 파일 업로드 처리

쿠폰관리 DB 처리

시퀀스관리 DB 처리

쿠폰 등록

종료

시퀀스를 가져온다

업로드 파일 처리(디스크에 저장)

업로드 파일을 HTTP로 다른 WAS에 전송

쿠폰 정보 DB에 등록

Page 15: Spring3 발표자료 - 김연수

15

스프링의 핵심(IoC, DI, AOP, POJO) I. 스프링이란?

스프링의 핵심(POJO)

POJO

PSA 설계정보

▶ 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정

의해놓은 설계정보로 구분된다. DI의 기본 아이디어는 유연하게 확장 가능한 오브젝트를 만들어 두고 그 관계는 외부

에서 다이내믹하게 설정해준다는 것이다.

▶ 스프링의 주요 기술인 IoC/DI, AOP와 PSA(Portable Service Abstraction)는 애플리케이션을 POJO로 개발할 수 있게

해주는 가능 기술이라고 부른다.

Page 16: Spring3 발표자료 - 김연수

16

스프링의 핵심(IoC, DI, AOP, POJO) I. 스프링이란?

스프링의 핵심(POJO)

• 특정 규약에 종속되지 않는다.

• 특정 환경에 종속되지 않는다. POJO의 조건

• 특정한 기술과 환경에 종속되지 않는 깔끔한 코드

• 환경의 제약이 없으므로 자동화된 테스트에 매우 유리(예를

들어 EJB 2는 테스트하려면 서버의 구동 및 빌드와 배치 과정

이 필요하여 복잡하고 번거롭다)

• 객체지향적인 설계를 자유롭게 적용(다형성, 디자인 패턴 등)

POJO의 장점

Page 17: Spring3 발표자료 - 김연수

17

스프링3의 새기능 I. 스프링이란?

스프링3의 새기능

Spring3

Java5와

JavaEE6

JSR-330

OXM

@MVC와

REST

내장형 DB

지원

Converter,

Conversio

nService,

Formatter

SpEL

구분 설명

Java5와 JavaEE6 스프링 3.0은 자바 5 언어의 특징을 본격적으로 적용해서 만들어진 최초의 스프링 버전이다. 스프링 3.0은 J2EE 1.4와 JavaEE5와 완벽하게 호환되며 JavaEE6의 일부 스펙을 지원한다.

JSR-330 자바 코드를 이용한 빈 메타정보 생성과 DI 설정 기능이 추가됐다. 자바 클래스와 메소드에 @Configuration과 @Bean 등의 애노테이션을 부여해서 DI 설정정보로 이용할 수 있다.

SpEL SpEL은 3.0에서 새롭게 도입된 강력한 기능을 가진 스프링의 공식 표현식 언어다. 또, SpEL API를 애플리케이션에서 직접 활용할 수도 있다.

OXM OXM은 오브젝트-XML 매핑의 약자다. 오브젝트와 XML 문서의 상호변환을 지원하는 자바 기술에 대한 서비스 추상화 모듈인 OXM이 새롭게 추가 됐다.

@MVC와 REST @MVC는 애노테이션을 적극적으로 활용해서 웹 프레젠테이션 계층을 편리하게 개발할 수 있도록 만들어진 스프링의 최신 웹 기술이다. 스프링 3.0은 RestTemplate과 메시지 컨버터를 이용해 REST 개발을 완벽하게 지원해 주기도 한다.

내장형 DB 지원 Derby, HSQL, H2에 대한 내장형 유 지원 기능이 추가됐다.

Converter, ConversionService, Formatter

기존에 사용되던 PropertyEditor를 대신할 수 있는 Converter와 ConversionService 타입 변환 API가 추가 됐다. 웹환경에 특화돼서 만들어진 Formatter도 제공된다.

Page 18: Spring3 발표자료 - 김연수

18

스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?

Aspects ASM Core

Instrument

Instrument.Tomcat

Test

JMS

Transaction

JDBC

ORM

Bean

AOP

Context

Context.Support

Web.Servlet

Expression

OXM

Web

Web.Struts

Web.Portlet

스프링의 아키텍처를 좀더 자세하게 모듈 별로 나누게 되면 아래와 같은 모듈 목록이 나오게 되고, 화살표가 그어진 모

듈들은 필수 의존관계를 나타냅니다.

Page 19: Spring3 발표자료 - 김연수

19

스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?

구분 주요 기능 설명

ASM 모듈 ASM 재패키징 ASM 모듈은 클래스 바이트코드 조작 및 분석 프레임워크인 ASM을 재패키징한 모듈이다.

Core 모듈 공통 기능 Core 모듈은 대부분의 스프링의 모듈에서 필요로 하는 공통 기능을 갖고 있는 핵심 모듈이다. 스프링이 사용하는 주요 타입, 애노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제공한다.

Beans 모듈 빈 팩토리 Beans는 스프링 DI 기능의 핵심인 빈 팩토리와 DI 기능을 제공하는 모듈이다. 빈 메타 정보, 빈 리더, 빈 팩토리의 구현과 프로퍼티 에디터가 포함되어 있다.

AOP 모듈 AOP AOP는 스프링의 프록시 AOP 기능을 제공하는 모듈이다. 프록시 기반 AOP를 만들 때 필요한 어드바이스, 포인트컷, 프록시 팩토리빈, 자동 프록시 생성기 등을 제공한다.

Expression 모듈 SpEL Expression은 스프링 표현식 언어 기능을 지원하는 모듈이다.

Context 모듈 애플리케이션 컨텍스트

Context는 애플리케이션 컨텍스트 기능을 제공하는 모듈이다. 애플리케이션 컨텍스트를 만드는 데 필요한 대부분의 기능을 포함해서 빈 스캐너, 자바코드에 의한 설정 기능, EJB 지원 기능, 포매터, 로드타임 위빙, 표현식, JMX, JNDI, 리모팅, 스케줄링, 스크립트 언어 지원, 검증기 등의 애플리케이션 컨테이너로서의 주요한 기능을 담고 있다.

Context.Support 모듈

컨텍스트 부가 기능 컨텍스트에서 필요로 하는 부가기능을 담은 모듈이다. EhCache, 메일 추상화 서비스, CommonJ와 Quartz 스케줄링 그리고 FreeMarker, JasperReports, Velocity 팩토리 기능을 제공한다.

Transaction 모듈 트랜잭션 Transaction은 스프링의 데이터 액세스 추상화의 공통 기능을 담고 있는 모듈이다. DataAccessException 예외 계층구조와 트랜잭션 추상화 기능, 트랜잭션 동기화 저장소 그리고 JCA 지원 기능을 포함하고 있다.

JDBC 모듈 JDBC JDBC는 JDBC 템플릿을 포함한 JDBC 지원 기능을 가진 모듈이다.

ORM 모듈 ORM(Hibernate, JPA, iBats 등)

ORM은 하이버네이트, JPA, JDO, iBatis와 같은 ORM에 대한 스프링의 지원 기능을 갖고 있는 모듈이다.

각 모듈 설명

Page 20: Spring3 발표자료 - 김연수

20

스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?

각 모듈 설명(계속)

구분 주요 기능 설명

Web 모듈 웹 공통 Web은 스프링 웹 기술의 공통적인 기능을 정의한 모듈이다. 스프링 MVC 외에도 스프링이 직접 지원하는 스트럿츠, JSF 등을 적용할 때도 필요하다. 또한 Caucho, HttpInvoker, JAX-RPC, JAX-WS 등의 리모팅 기능도 포함하고 있다. 기본적인 바인딩, 컨텍스트 로더, 필터, 멀티파트, 메시지 컨버터 기능도 제공한다.

Web.Servlet 모듈 서블릿 Web.Servlet은 스프링 MVC 기능을 제공하는 모듈이다. 전통적인 스프링 MVC와 최신 @MVC 기능이 모두 포함되어 있다.

Web.Portlet 모듈 포틀릿 Web.Portlet은 Portlet 개발에 사용하는 스프링 모듈이다.

Web.Struts 모듈 스트럿츠 1 지원 Web.Struts는 스트럿츠 1.x를 지원하는 모듈이다. 스트럿츠 1.x를 스프링의 웹 프레젠테이션 계층으로 사용할 때 유용한 기능을 제공한다.

JMS 모듈 JMS JMS는 스프링의 JMS 지원 기능을 사용할 때 필요한 모듈이다.

Aspects 모듈 AspectJ 지원 Aspects는 스프링이 제공하는 AspectJ AOP 기능을 사용할 때 필요한 모듈이다. AspectJ로 만든 기능은 @Configurable을 이용한 도메인 오브젝트 DI 기능, JPA 예외 변한기, AspectJ 방식의 트랜잭션 기능 등이 있다.

Instrument 모듈 스프링 Java Agent Instrument는 스프링의 로드타임 위버 기능을 적용할 때 필요한 모듈이다. JVM의 –javaagent 옵션을 사용해 자바에이전트로도 사용된다.

Instrument.Tomcat 모듈

톰캣 클래스 로더 Instrument.Tomcat은 애플리케이션이 아니라 톰캣 서버의 클래스 로더로 사용하는 모듈이다.

Test 모듈 테스트 Test는 스프링의 테스트 지원 기능을 가진 모듈이다. 테스트 컨텍스트 프레임워크나 목 오브젝트 등을 이용해 테스트를 만들 때 사용한다.

Page 21: Spring3 발표자료 - 김연수

21

스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?

모듈별 의존 라이브러리(요약)

스프링 3.0.3 배포판에는 스프링 모듈 외에도 97개의 의존 라이브러리가 포함되어 있다. 어떤 스프링 모듈을 사용할지

결정됐다면, 각 모듈별로 활용할 세부적인 기능에 따라서 필요한 의존 라이브러리를 선택하면 된다. 거의 대부분의 스

프링 의존 라이브러리는 필수가 아니다.(모듈별 의존 라이브러리 중 개인적으로 흥미로운 것들만 요약하였습니다.)

구분 사용분야 설명

Jamon API 모니터링 애플리케이션 모니터 API이며, AOP를 이용한 간단한 성능측정/모니터링 기능이 필요한 경우에 사용

BeanShell 스크립트 언어 BeanShell 스크립트를 실행하거나 빈으로 등록해서 사용할 수 있는 기능을 제공

Groovy 스크립트 언어 Groovy를 이용해서 빈을 만들어서 사용하거나 Groovy 코드를 실행시켜야 할때 필요하다.

JRuby 스크립트 언어 Jruby 스크립팅 언어 지원 기능에 사용한다. Jruby를 이용해 만든 빈을 사용할 경우에 필요하다.

JSR-303 Bean Validation

빈 검증 JSR-303의 빈 검증기를 이용한 검증 기능을 적용할 때 필요하다. JSR-303은 웹 환경의 모델 검증에도 사용되지만 독자적으로 검증기를 만들어 적용할 수 도 있다.

Joda Time 시간 및 날짜 Java Date and Time API를 이용한 포매터에 사용된다.

FreeMarker 템플릿 FreeMarker 템플릿 지원 기능에 필요하다. FreeMarker는 스프링 MVC의 뷰로도 사용하지만 독립적인 템플릿 엔진으로 활용할 수 도 있다.

Java Mail 메일 JavaMail을 이용한 메일 메시지 추상화에 필요하다.

Ehcache 캐싱 EhCache 빈을 생성할 경우에 필요하다.

JasperReports

문서화(보고서 형식)

JasperReports를 이용할 때 활용할 수 있는 편리한 기능을 제공해주는 JasperReportsUtils를 사용할 때 필요하다.(PDF, HTML, XLS, CSV 파일 등으로 출력하는 리포팅 툴)

iText 문서화(PDF) PDF 뷰를 만들때 필요

Page 22: Spring3 발표자료 - 김연수

22

스프링의 모듈 및 모듈간 의존관계 I. 스프링이란?

모듈별 의존 라이브러리(요약)

스프링 3.0.3 배포판에는 스프링 모듈 외에도 97개의 의존 라이브러리가 포함되어 있다. 어떤 스프링 모듈을 사용할지

결정됐다면, 각 모듈별로 활용할 세부적인 기능에 따라서 필요한 의존 라이브러리를 선택하면 된다. 거의 대부분의 스

프링 의존 라이브러리는 필수가 아니다.

구분 사용분야 설명

Quartz 스케쥴링 Quartz를 이용한 스케줄링 기능을 사용할때 필요하다.

JAX-RPC, JAX-WS, XML SOAP

RPC 리모팅 기능을 만들때 사용한다.

Axis Web Service 웹 서비스를 구현할 때 필요하다. 하지만 Axis 보다는 JAX-WS를 사용하도록 권장한다. Axis 지원 기능은 앞으로 제거될 예정이다.

Jackson Mapper

JSON Converter JSON 메시지 컨버터에 사용된다.

Syndication RSS RSS/Atom 피드 뷰를 만들 때 필요

JExcelApi 엑셀 제어 엑셀 뷰를 만들 때 필요

POI 엑셀 제어 엑셀 뷰를 만들 때 필요

Page 23: Spring3 발표자료 - 김연수

23

감사합니다.