SlideShare a Scribd company logo
자바 웹 개발 시작하기
(5주차 : 스프링 프래임워크)
2011. 11. 24

DEVELOPMENT #2

이덕곤
§  MVC 심층학습
§  모델
§  데이터
§  POJO (Plain Old Java Object)
§  스프링 MVC
§  Java쪽 유효성체크 : 스프링을 사용한 방식을 7주차에 진행합니다.
§  한 개의 작업을 위해 DB를 여러 번 다녀오는 구조로 효율성 감소…
: 하이버네이트를 사용하면서 격을 수 있는 문제입니다.(HQL로 해소가능)
§  뭔가 잘못된 접근이나 오류가 났을 때 처리를 위해 message.jsp를 추가
했습니다. 이렇게 만드니깐 많은 부분 해결이 되더군요. : 좋은 방법입니다.
§  하이버네이트를 사용하다 보니 필요 없는 부분도 읽게 되는 문제가…
: 사실 하이버네이트는 블로그 같은 시스템과는 어울리지 않습니다.
(좀더 복잡한… 비즈니스 로직이 들어가는 DW 시스템 등 에서 활용)
§  타협하라 - Eric Evans : Domain-Driven Design (2004, Addison-Wesley)
§ 

데이터베이스가 하나의 객체 저장소로 보여진다면 매핑 도구의 기능과는 상관없이 데이터 모델과 객체 모델이 서로
갈라지게 해서는 안 된다. 일부 객체 관계의 풍부함을 희생해서 관계 모델에 밀접하게 한다. 객체 매핑을 단순화
하는데 도움이 된다면 정규화와 같은 정형화된 관계 표준을 절충한다.

§  http://deview.naver.com/2011/track/A_06.html
§  다시 보는 스프링

프레임워크

§  단순함에서 발견하는 아름다움

§  IoC (Inversion of Control)
§  DI (Dependency Injection)
§  AOP (Aspect Oriented Programming)
§  중간 정리를 하는 시간… (프로젝트 범위의 설정)
§  Frame Work : 응용 프로그램 골격
§  웹사이트가 점점 커지면서 엔터프라이즈급의 서비스가 필요하게 됨
§  자바진영에서는 EJB가 엔터프라이즈급 서비스로 각광을 받게 됨
§  세션빈에서 Transaction 관리가 용이함
§  컨테이너를 제공. 로깅, 분산처리, 보안 등 처리가 용이함

§  하지만 EJB는 개발시 여러 가지 제약이 존재함(배보다 배꼽이 더 큼)
§  EJB스펙에 정의된 인터페이스에 따라 코드를 작성하므로 기존에 작성된
POJO를 변경해야 함
§  컨테이너에 배포를 해야만 테스트가 가능해 개발속도가 저하됨
§  배우기 어렵고, 설정해야 할 부분이 많음 (XML 지옥)
EJB

복잡한 개발 과정 (감싸고 감싸고…)
테스트의 어려움 (상속, 또 상속…)
컨테이너 제공 (TX, 로깅, 분산, 보안 등)

Non EJB

표준이 없다 (EJB가 표준임)
엔터프라이즈 기능을 자체 구현해야 함
빠른 개발 속도, 테스트의 용이성
§  스프링의 탄생
§  Rod Johnson : Expert One-on-One J2EE Development without EJB
§  EJB를 사용하지 않고 엔터프라이즈 어플리케이션을 개발하는 방법소개

§  Spring is a lightweight dependency injection and
aspect-oriented container and framework.
§  매우 경량 프레임워크로 엔터프라이즈 서비스를 쉽게 구축
§  의존성 주입(Dependency Injection)을 통한 유연한 (느슨한 결합)
§  관점지향 프로그래밍(Aspect oriented Programming) 지원
§  평범한 자바빈으로(POJO) 프로그래밍 모델 가능
§  다양한 API, 프레임워크와의 연동을 지원함
§  반복적인 코드의 제거, 생산성 향상
§  EJB Container
§  EJB(세션빈, 엔티티빈, MDB)의 생성, 생성 후 초기화, 서비스 실행,
소멸에 관한 모든 권한을 가지면서 EJB의 생명주기를 관리
§  개발자들이 직접 EJB 생성하고 서비스할 수 없다
§  Transaction, Security, EJB Pooling등의 추가적인 기능을 제공

§  IoC(또는 DI) Container
§  POJO의 생성, 초기화, 서비스 소멸에 관한 모든 권한을 가지면서
POJO의 생명주기를 관리
§  개발자가 직접 생성할 수도 있지만, 모든걸 Container에게 맡김
§  Transaction, Security 추가적인 기능을 제공한다. AOP 기능을
이용하여 새로운 Container 기능을 추가하는 것이 가능
Non EJB

EJB
장점

장점
Spring Framework
Light Container 구현

• EJB에 비해 배우기 쉽다.
• 빈의 설정이 쉽다(XML)
• 테스트가 용이하다.
• AOP, OOP 개발에 제약이 없다.

장점
• 필요한 인스턴스를 스프링에서
미리 생성해 준다.
• 클래스 사이의 결합을 느슨하게
(loosely coupled)할 수 있어
클래스 간의 의존 관계가 약해진다.
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
§  IOC(Inversion of control : 제어권의 역전)
§  객체의 생성부터 생명주기 관리까지 객체에 대한 제어권이 바뀜
§  자바 개발 초기 : 객체 생성, 의존관계 연결 등의 제어권이 개발자에게
§  EJB 등장 : 제어권이 서블릿과 EJB를 관리하는 컨테이너에게

§  DI (Dependency Injection : 의존성 주입)
§  DI는 Spring 프레임워크에서 지원하는 IoC의 형태이다.
§  DI는 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가
자동적으로 연결해주는 것
§  개발자들은 빈 설정 파일(저장소 관리 파일)에 의존관계가 필요하다는
정보를 추가하면 됨
§  Spring 프레임워크는 Setter Injection, Constructor Injection, Method
Injection의 세가지 유형 존재
•  EJB
•  Spring

IoC : Inversion of Control
DI : Dependency Injection
DP : Dependency Pull

DP
IoC

Setter Injection

DI
Constructor Injection
•  Spring
•  PicoContainer

Method Injection
§  구현체를 new 키워드를 사용하여 생성

§  스펙이 바뀌거나 하면
적용이 쉽지 않고
수정할 사항도 많아짐
§  인터페이스로 의존도는 낮아졌지만 여전히..
§  스프링에서 DI(Dependency Injection)패턴
§  객체 외부의 조립기(Assembler)가 각 객체의 의존관계를
설정해 줌
§  DI 사용하지 않은 코드 구현
§  테스트 하기 어려움

§  인터페이스를 사용하여 개선
§  개선 해도 문제는 여전히 남아있음
§  new 필요함

§  DI 사용하여 코드 개선
§  new 필요하지 않음
§  종속성은 컨테이너가 알아서~
§  loose coupling
§  스프링 컨테이너가 지원하는 핵심 개념 중 하나
§  DI는 객체 사이의 의존 관계를 객체 자신이 아닌
외부의 조립기(스프링 컨테이너)가 수행한다는
개념
§  스프링은 설정 파일이나 어노테이션을 이용하여
객체 간의 의존 관계를 설정할 수 있다
§  우리는 이미 계속 사용하고 있었음
§  AOP 적용하지 않고 로깅 구현.
§  중복되는 코드 발생.
§  종속성 발생.

§  AOP 사용하여 코드 개선.
§  중복 제거.
§  non intrusive.
주 문
로깅
•  일반적인 객체지향 프로그래밍 방법
•  문제가 되지 않는다.

문제가 발생한다.!!!

주 문

로깅

대 여
반 납

기타 업무
§  사용자 요구사항의 변화
§  해당 업무 호출 필요가 없어진다
§  다른 업무로 대체
§  시점의 변화 등
§  이름 변경

Modify
Business Logic
주 문
대 여

• call
• Return Jointpoint Cross
• throw 추가기능 넣는 곳

로깅
Cutting Concern
Advisor

어느 객체에서 필요 한가?

Pointcut

반 납

언제 무엇을 해야하는가?

Advice

기타 업무
IOC / DI

ProxyFactoryBean
§  Before Advice
§  메소드를 실행하기 전에 어떠한 일을 추가하고 싶을 경우

§  After Advice
§  메소드를 실행완료 후 어떠한 일을 추가하고 싶을 경우
§  After-retuning Advice
§  메소드의 실행을 무사히 완료한 뒤에 추가할 작업을 정의

§  After-throwing Advice
§  메소드에서 예외(Exception)가 발생했을 경우 특정한 일을 추가

§  Around Advice
§  위의 역할을 모두 다 할 수 있는 Advice
Business Logic
Business Logic

주 문
대 여
반 납

Cross Cutting Concern
기타업무
§  라이브러리 추가
§  com.springsource.org.aopalliance-1.0.0.jar
§  com.springsource.org.apache.commons.collections-3.2.1.jar
§  com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

§  applicationContext.xml 수정
§  xmlns:aop="http://www.springframework.org/schema/aop"
§  http://www.springframework.org/schema/aop http://www.springfr
amework.org/schema/aop/spring-aop-3.0.xsd
§  <aop:aspectj-autoproxy />
@Aspect
@Component
public class BoardAop
{
@Before("execution(* com.starpl.study.model.dao.BoardDao.getBoardList(..))")
public void beforeGetBoardList() throws Throwable {
System.out.println("[List(); ★: " + "글 목록 보기 시작 합니다." + "]");
}
@After("execution(* com.starpl.study.model.dao.BoardDao.getBoardList(..))")
public void afterGetBoardList() throws Throwable {
System.out.println("[List(); ★: " + "글 목록 보기 종료 합니다." + "]");
}
}
@Around("execution(* com.starpl.study.*.*.BoardDao.getBoardList(..))")
public Object observeService(ProceedingJoinPoint joinPoint) throws Throwable
{
Object result = null;
String runTarget = joinPoint.getTarget().getClass().getName();
String runMethod = joinPoint.getSignature().getName();
StopWatch stopWatch = new StopWatch();
stopWatch.start();
result = joinPoint.proceed();
stopWatch.stop();
System.out.println("★ " + String.format("%06.3f", stopWatch.getTotalTimeSeconds())
+ "s : [" + runTarget + "." + runMethod + "]");
return result;
}
§  @Around("execution(* com.starpl.study.*.*.BoardDao.getBoardList(..))")
§  @Before("execution(
* com.starpl.study.model.dao.
BoardDao.getBoardList(..))")
§  @After("execution(
* com.starpl.study.model.dao.
BoardDao.getBoardList(..))")
§  @Around("@annotation
(org.springframework.web.bind.annotation.RequestMapping)")
§  @Around("within(@org.springframework.stereotype.Repository *) ")
§  @Around("within(@org.springframework.stereotype.Service *) ")
§  프레임워크의 개념에 대해 이해함
§  스프링 프레임워크의 특징을 이해 함
§  IoC : 제어의 역행
§  DI : 의존성의 주입 (조립기가 필요)
§  AOP : 관점 지향 프로그래밍 (횡단 관심사 부여)

§  DI를 활용하여 프로젝트를 설계할 수 있음
§  인터페이스의 사용과 조립기를 이해함

§  AOP를 활용하여 프로젝트를 설계할 수 있음
§  로깅 처리를 이해하고 구현할 수 있음
§  간단한 게시판을 만들어보자! (특히 DB 고민)
§  DataBase : MySQL, DBCP
§  하이버네이트
§  기초 쿼리(CRUD)
§  예외처리
§  Transaction(TX)
§  과제 : 게시판 기능 추가
§  http://en.wikipedia.org/wiki/Dependency_Injection
§  http://en.wikipedia.org/wiki/Aspect-oriented_programming
§  http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/Spring_Over
all_Quick_View
§  http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/%EC%8A%
A4%ED%94%84%EB%A7%81_%ED%95%B5%EC%8B%AC_%EA
%B0%9C%EB%85%90_-_Ioc
§  http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/%EC%8A%
A4%ED%94%84%EB%A7%81_%ED%95%B5%EC%8B%AC_%EA
%B0%9C%EB%85%90_-_Aop
§  http://blog.java2game.com/241
§  http://en.wikipedia.org/wiki/Convention_over_Configuration
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)

More Related Content

PDF
자바 웹 개발 시작하기 (4주차 : MVC)
PDF
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
PDF
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
PDF
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
PDF
자바 웹 개발 시작하기 : 계획
PDF
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
PDF
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
PDF
20131217 html5
자바 웹 개발 시작하기 (4주차 : MVC)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 : 계획
자바 웹 개발 시작하기 (8주차 : 명세서, 단위테스트, 통합)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
20131217 html5

What's hot (20)

PDF
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

PDF
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
PDF
Facebook은 React를 왜 만들었을까?
PPTX
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
PDF
Javascript everywhere - Node.js | Devon 2012
PDF
역시 Redux
PDF
Front-end Development Process - 어디까지 개선할 수 있나
PDF
Isomorphicspring Isomorphic - spring web seminar 2015
PPTX
Leadweb Nodejs
PDF
React Native를 사용한
 초간단 커뮤니티 앱 제작
PPTX
Node.js의 도입과 활용
PPTX
세미나 Spring mybatis
PPTX
Nodejs 발표자료
PDF
Node.js 기본
PDF
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
PDF
Node.js 시작하기
PDF
overview of spring4
PPTX
아꿈사 발표 Node JS 프로그래밍 8장
PDF
Node.js 현재와 미래
PDF
React 튜토리얼 2차시
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
Facebook은 React를 왜 만들었을까?
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
Javascript everywhere - Node.js | Devon 2012
역시 Redux
Front-end Development Process - 어디까지 개선할 수 있나
Isomorphicspring Isomorphic - spring web seminar 2015
Leadweb Nodejs
React Native를 사용한
 초간단 커뮤니티 앱 제작
Node.js의 도입과 활용
세미나 Spring mybatis
Nodejs 발표자료
Node.js 기본
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Node.js 시작하기
overview of spring4
아꿈사 발표 Node JS 프로그래밍 8장
Node.js 현재와 미래
React 튜토리얼 2차시
Ad

Viewers also liked (20)

PPSX
스프링 프레임워크로 블로그 개발하기
PPTX
SpringMVC 전체 흐름 알아보기
PDF
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
PDF
20141229 dklee docker
PPSX
스프링시큐리티와 소셜연습 이해를 위한 글
PDF
20130118 토비의 스프링 세미나
PPTX
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
PDF
Starpl 20111012 스타플5를_만들기_시작하며
PDF
스프링 코어 강의 1부 - 봄 맞이 준비 운동
PPTX
Spring 웹 프로젝트 시작하기
PDF
스프링보다 중요한 스프링 이야기
PPSX
스프링 오픈소스 정리
PPSX
spring data jpa 간단한 튜토리얼
PDF
8주 dom & event basic
PDF
7주 JavaScript Part2
PDF
4주 CSS Layout
PPTX
Database design
PPTX
자바 프로그래밍 Agile(1장 시작하기)
PDF
NDC12_Lockless게임서버설계와구현
PDF
그루비 소개 발표자료 - 김연수
스프링 프레임워크로 블로그 개발하기
SpringMVC 전체 흐름 알아보기
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
20141229 dklee docker
스프링시큐리티와 소셜연습 이해를 위한 글
20130118 토비의 스프링 세미나
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
Starpl 20111012 스타플5를_만들기_시작하며
스프링 코어 강의 1부 - 봄 맞이 준비 운동
Spring 웹 프로젝트 시작하기
스프링보다 중요한 스프링 이야기
스프링 오픈소스 정리
spring data jpa 간단한 튜토리얼
8주 dom & event basic
7주 JavaScript Part2
4주 CSS Layout
Database design
자바 프로그래밍 Agile(1장 시작하기)
NDC12_Lockless게임서버설계와구현
그루비 소개 발표자료 - 김연수
Ad

Similar to 자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크) (20)

PDF
Spring Framework - Inversion of Control Container
PDF
[오픈소스컨설팅]Spring 3.1 Core
PDF
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
PPTX
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
PPTX
[Spring]오브젝트와 의존관계
PDF
스프링 프레임워크 입문
PDF
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
PDF
Spring3 발표자료 - 김연수
PDF
11장 시스템
PDF
Implementing_AOP_in_Spring_SYS4U
PDF
Spring Framework 튜토리얼 - 네이버 최영목님
PPTX
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
PPTX
Spring
PPTX
3.Spring IoC&DI(spring ioc실습, XML기반)
PPTX
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
PDF
스프링 스터디 1장
PPT
스프링공부1
Spring Framework - Inversion of Control Container
[오픈소스컨설팅]Spring 3.1 Core
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
[Spring]오브젝트와 의존관계
스프링 프레임워크 입문
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
Spring3 발표자료 - 김연수
11장 시스템
Implementing_AOP_in_Spring_SYS4U
Spring Framework 튜토리얼 - 네이버 최영목님
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
Spring
3.Spring IoC&DI(spring ioc실습, XML기반)
스프링프레임워크 & 마이바티스 무.료 강의자료 제공 (Spring IoC & DI)_ 구로자바학원/구로오라클학원/구로IT학원
스프링 스터디 1장
스프링공부1

자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)

  • 1. 자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크) 2011. 11. 24 DEVELOPMENT #2 이덕곤
  • 2. §  MVC 심층학습 §  모델 §  데이터 §  POJO (Plain Old Java Object) §  스프링 MVC
  • 3. §  Java쪽 유효성체크 : 스프링을 사용한 방식을 7주차에 진행합니다. §  한 개의 작업을 위해 DB를 여러 번 다녀오는 구조로 효율성 감소… : 하이버네이트를 사용하면서 격을 수 있는 문제입니다.(HQL로 해소가능) §  뭔가 잘못된 접근이나 오류가 났을 때 처리를 위해 message.jsp를 추가 했습니다. 이렇게 만드니깐 많은 부분 해결이 되더군요. : 좋은 방법입니다. §  하이버네이트를 사용하다 보니 필요 없는 부분도 읽게 되는 문제가… : 사실 하이버네이트는 블로그 같은 시스템과는 어울리지 않습니다. (좀더 복잡한… 비즈니스 로직이 들어가는 DW 시스템 등 에서 활용) §  타협하라 - Eric Evans : Domain-Driven Design (2004, Addison-Wesley) §  데이터베이스가 하나의 객체 저장소로 보여진다면 매핑 도구의 기능과는 상관없이 데이터 모델과 객체 모델이 서로 갈라지게 해서는 안 된다. 일부 객체 관계의 풍부함을 희생해서 관계 모델에 밀접하게 한다. 객체 매핑을 단순화 하는데 도움이 된다면 정규화와 같은 정형화된 관계 표준을 절충한다. §  http://deview.naver.com/2011/track/A_06.html
  • 4. §  다시 보는 스프링 프레임워크 §  단순함에서 발견하는 아름다움 §  IoC (Inversion of Control) §  DI (Dependency Injection) §  AOP (Aspect Oriented Programming) §  중간 정리를 하는 시간… (프로젝트 범위의 설정)
  • 5. §  Frame Work : 응용 프로그램 골격 §  웹사이트가 점점 커지면서 엔터프라이즈급의 서비스가 필요하게 됨 §  자바진영에서는 EJB가 엔터프라이즈급 서비스로 각광을 받게 됨 §  세션빈에서 Transaction 관리가 용이함 §  컨테이너를 제공. 로깅, 분산처리, 보안 등 처리가 용이함 §  하지만 EJB는 개발시 여러 가지 제약이 존재함(배보다 배꼽이 더 큼) §  EJB스펙에 정의된 인터페이스에 따라 코드를 작성하므로 기존에 작성된 POJO를 변경해야 함 §  컨테이너에 배포를 해야만 테스트가 가능해 개발속도가 저하됨 §  배우기 어렵고, 설정해야 할 부분이 많음 (XML 지옥)
  • 6. EJB 복잡한 개발 과정 (감싸고 감싸고…) 테스트의 어려움 (상속, 또 상속…) 컨테이너 제공 (TX, 로깅, 분산, 보안 등) Non EJB 표준이 없다 (EJB가 표준임) 엔터프라이즈 기능을 자체 구현해야 함 빠른 개발 속도, 테스트의 용이성
  • 7. §  스프링의 탄생 §  Rod Johnson : Expert One-on-One J2EE Development without EJB §  EJB를 사용하지 않고 엔터프라이즈 어플리케이션을 개발하는 방법소개 §  Spring is a lightweight dependency injection and aspect-oriented container and framework. §  매우 경량 프레임워크로 엔터프라이즈 서비스를 쉽게 구축 §  의존성 주입(Dependency Injection)을 통한 유연한 (느슨한 결합) §  관점지향 프로그래밍(Aspect oriented Programming) 지원 §  평범한 자바빈으로(POJO) 프로그래밍 모델 가능 §  다양한 API, 프레임워크와의 연동을 지원함 §  반복적인 코드의 제거, 생산성 향상
  • 8. §  EJB Container §  EJB(세션빈, 엔티티빈, MDB)의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 모든 권한을 가지면서 EJB의 생명주기를 관리 §  개발자들이 직접 EJB 생성하고 서비스할 수 없다 §  Transaction, Security, EJB Pooling등의 추가적인 기능을 제공 §  IoC(또는 DI) Container §  POJO의 생성, 초기화, 서비스 소멸에 관한 모든 권한을 가지면서 POJO의 생명주기를 관리 §  개발자가 직접 생성할 수도 있지만, 모든걸 Container에게 맡김 §  Transaction, Security 추가적인 기능을 제공한다. AOP 기능을 이용하여 새로운 Container 기능을 추가하는 것이 가능
  • 9. Non EJB EJB 장점 장점 Spring Framework Light Container 구현 • EJB에 비해 배우기 쉽다. • 빈의 설정이 쉽다(XML) • 테스트가 용이하다. • AOP, OOP 개발에 제약이 없다. 장점 • 필요한 인스턴스를 스프링에서 미리 생성해 준다. • 클래스 사이의 결합을 느슨하게 (loosely coupled)할 수 있어 클래스 간의 의존 관계가 약해진다.
  • 11. §  IOC(Inversion of control : 제어권의 역전) §  객체의 생성부터 생명주기 관리까지 객체에 대한 제어권이 바뀜 §  자바 개발 초기 : 객체 생성, 의존관계 연결 등의 제어권이 개발자에게 §  EJB 등장 : 제어권이 서블릿과 EJB를 관리하는 컨테이너에게 §  DI (Dependency Injection : 의존성 주입) §  DI는 Spring 프레임워크에서 지원하는 IoC의 형태이다. §  DI는 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동적으로 연결해주는 것 §  개발자들은 빈 설정 파일(저장소 관리 파일)에 의존관계가 필요하다는 정보를 추가하면 됨 §  Spring 프레임워크는 Setter Injection, Constructor Injection, Method Injection의 세가지 유형 존재
  • 12. •  EJB •  Spring IoC : Inversion of Control DI : Dependency Injection DP : Dependency Pull DP IoC Setter Injection DI Constructor Injection •  Spring •  PicoContainer Method Injection
  • 13. §  구현체를 new 키워드를 사용하여 생성 §  스펙이 바뀌거나 하면 적용이 쉽지 않고 수정할 사항도 많아짐
  • 14. §  인터페이스로 의존도는 낮아졌지만 여전히..
  • 15. §  스프링에서 DI(Dependency Injection)패턴 §  객체 외부의 조립기(Assembler)가 각 객체의 의존관계를 설정해 줌
  • 16. §  DI 사용하지 않은 코드 구현 §  테스트 하기 어려움 §  인터페이스를 사용하여 개선 §  개선 해도 문제는 여전히 남아있음 §  new 필요함 §  DI 사용하여 코드 개선 §  new 필요하지 않음 §  종속성은 컨테이너가 알아서~ §  loose coupling
  • 17. §  스프링 컨테이너가 지원하는 핵심 개념 중 하나 §  DI는 객체 사이의 의존 관계를 객체 자신이 아닌 외부의 조립기(스프링 컨테이너)가 수행한다는 개념 §  스프링은 설정 파일이나 어노테이션을 이용하여 객체 간의 의존 관계를 설정할 수 있다 §  우리는 이미 계속 사용하고 있었음
  • 18. §  AOP 적용하지 않고 로깅 구현. §  중복되는 코드 발생. §  종속성 발생. §  AOP 사용하여 코드 개선. §  중복 제거. §  non intrusive.
  • 19. 주 문 로깅 •  일반적인 객체지향 프로그래밍 방법 •  문제가 되지 않는다. 문제가 발생한다.!!! 주 문 로깅 대 여 반 납 기타 업무
  • 20. §  사용자 요구사항의 변화 §  해당 업무 호출 필요가 없어진다 §  다른 업무로 대체 §  시점의 변화 등 §  이름 변경 Modify
  • 21. Business Logic 주 문 대 여 • call • Return Jointpoint Cross • throw 추가기능 넣는 곳 로깅 Cutting Concern Advisor 어느 객체에서 필요 한가? Pointcut 반 납 언제 무엇을 해야하는가? Advice 기타 업무 IOC / DI ProxyFactoryBean
  • 22. §  Before Advice §  메소드를 실행하기 전에 어떠한 일을 추가하고 싶을 경우 §  After Advice §  메소드를 실행완료 후 어떠한 일을 추가하고 싶을 경우 §  After-retuning Advice §  메소드의 실행을 무사히 완료한 뒤에 추가할 작업을 정의 §  After-throwing Advice §  메소드에서 예외(Exception)가 발생했을 경우 특정한 일을 추가 §  Around Advice §  위의 역할을 모두 다 할 수 있는 Advice
  • 23. Business Logic Business Logic 주 문 대 여 반 납 Cross Cutting Concern 기타업무
  • 24. §  라이브러리 추가 §  com.springsource.org.aopalliance-1.0.0.jar §  com.springsource.org.apache.commons.collections-3.2.1.jar §  com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar §  applicationContext.xml 수정 §  xmlns:aop="http://www.springframework.org/schema/aop" §  http://www.springframework.org/schema/aop http://www.springfr amework.org/schema/aop/spring-aop-3.0.xsd §  <aop:aspectj-autoproxy />
  • 25. @Aspect @Component public class BoardAop { @Before("execution(* com.starpl.study.model.dao.BoardDao.getBoardList(..))") public void beforeGetBoardList() throws Throwable { System.out.println("[List(); ★: " + "글 목록 보기 시작 합니다." + "]"); } @After("execution(* com.starpl.study.model.dao.BoardDao.getBoardList(..))") public void afterGetBoardList() throws Throwable { System.out.println("[List(); ★: " + "글 목록 보기 종료 합니다." + "]"); } }
  • 26. @Around("execution(* com.starpl.study.*.*.BoardDao.getBoardList(..))") public Object observeService(ProceedingJoinPoint joinPoint) throws Throwable { Object result = null; String runTarget = joinPoint.getTarget().getClass().getName(); String runMethod = joinPoint.getSignature().getName(); StopWatch stopWatch = new StopWatch(); stopWatch.start(); result = joinPoint.proceed(); stopWatch.stop(); System.out.println("★ " + String.format("%06.3f", stopWatch.getTotalTimeSeconds()) + "s : [" + runTarget + "." + runMethod + "]"); return result; }
  • 27. §  @Around("execution(* com.starpl.study.*.*.BoardDao.getBoardList(..))") §  @Before("execution( * com.starpl.study.model.dao. BoardDao.getBoardList(..))") §  @After("execution( * com.starpl.study.model.dao. BoardDao.getBoardList(..))") §  @Around("@annotation (org.springframework.web.bind.annotation.RequestMapping)") §  @Around("within(@org.springframework.stereotype.Repository *) ") §  @Around("within(@org.springframework.stereotype.Service *) ")
  • 28. §  프레임워크의 개념에 대해 이해함 §  스프링 프레임워크의 특징을 이해 함 §  IoC : 제어의 역행 §  DI : 의존성의 주입 (조립기가 필요) §  AOP : 관점 지향 프로그래밍 (횡단 관심사 부여) §  DI를 활용하여 프로젝트를 설계할 수 있음 §  인터페이스의 사용과 조립기를 이해함 §  AOP를 활용하여 프로젝트를 설계할 수 있음 §  로깅 처리를 이해하고 구현할 수 있음
  • 29. §  간단한 게시판을 만들어보자! (특히 DB 고민) §  DataBase : MySQL, DBCP §  하이버네이트 §  기초 쿼리(CRUD) §  예외처리 §  Transaction(TX) §  과제 : 게시판 기능 추가
  • 30. §  http://en.wikipedia.org/wiki/Dependency_Injection §  http://en.wikipedia.org/wiki/Aspect-oriented_programming §  http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/Spring_Over all_Quick_View §  http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/%EC%8A% A4%ED%94%84%EB%A7%81_%ED%95%B5%EC%8B%AC_%EA %B0%9C%EB%85%90_-_Ioc §  http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/%EC%8A% A4%ED%94%84%EB%A7%81_%ED%95%B5%EC%8B%AC_%EA %B0%9C%EB%85%90_-_Aop §  http://blog.java2game.com/241 §  http://en.wikipedia.org/wiki/Convention_over_Configuration