한국 스프링 사용자 모임 (http://ksug.org) 1 스프링 AOP 선택, 활용, 이슈 2008.10.12 백기선.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

KUMHO SOFTWARE DEVELOPMENT 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램 2.4 자바 응용 프로그램 2.5 자바 애플릿 프로그램 2. 자바 환경과 자바 프로그램.
.Net History. Visual Studio.Net 2002 /.Net Framework 1.0 제품의 버전 / 특징 2002 년 - Visual Studio.Net 2002 /.Net Framework 1.0 첫 통합 개발 환경 - C# 언어 등장 (C# 1.0)
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
EXEM ( ) LTW를 활용한 데이터 수집기 김경식.
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
1장. 자바 시작하기.
3조 오세혁 김문환 김용현.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Power Java 제2장 자바 개발 도구.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
AOP 개념 및 Spring의 AOP 기능.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Lesson 9. 예외처리.
Lesson 6. 형변환.
Spring Framework & MyBatis
Java 기초 (Java JDK 설치 및 환경설정)
10강. AOP(Aspect Oriented Programming)-II
9강. AOP(Aspect Oriented Programming)-I
AOP (Aspect Oriented Programming)
Visual Basic .NET 처음 사용하기.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
10장. 예외처리.
7장 인터페이스와 추상 클래스.
Method & library.
AOP (Aspect Oriented Programing)
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
하이버네이트 (Hibernate) 박지혜.
전자정부 표준프레임워크 호환성 가이드 전자정부 표준프레임워크 사업단 실행환경 개발팀.
Spring 프레임워크의 이해 2. Spring Introduction.
3. Spring 프레임워크의 IoC 컨테이너 개념
Spring 프레임워크의 이해 1.Architecture.
Go Lang 리뷰 이동은.
Spring 프레임워크의 이해 3. Spring IoC 이해 및 활용.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
자바 5.0 프로그래밍.
객체지향의 한계를 넘어, AOP 전은영,이재훈 고덕윤.
컴퓨터응용과학부 Java Enterprize(DB) 제 14 주
웹디자인
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
백기선 Advising beans 백기선
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
4. Spring 프레임워크의 AOP 개념.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Spring Introduction.
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
7 생성자 함수.
Wireless Java Programming
JAVA 프로그래밍 16장 JNLP.
20 XMLHttpRequest.
Presentation transcript:

한국 스프링 사용자 모임 ( 1 스프링 AOP 선택, 활용, 이슈 백기선

한국 스프링 사용자 모임 ( 2 안녕하세요. 백기선 입니다. 목표 : 행복한 개발자. 취미 : 블로깅, 스크린캐스팅, 스프링, 하이버네 이트, 번역, 큐브, 피아노 현재 – 새싹 OpenSprout – 여친 구함 – 회사도 다니긴 … 다녀요.

한국 스프링 사용자 모임 ( 3 주제 AOP 스프링 AOP 스프링 AOP 선택 스프링 AOP 활용 스프링 AOP 이슈

한국 스프링 사용자 모임 ( 4 Aspect Oriented Programming

한국 스프링 사용자 모임 ( 5 Before

한국 스프링 사용자 모임 ( 6 After

한국 스프링 사용자 모임 ( 7 주목할 것 코드 중복 깔끔한 코드 생산성 유지보수성 재사용성

한국 스프링 사용자 모임 ( 8 (Spring) AOP 개념 정리 Target Object Advice Pointcut Joinpoint Advisor Weaving Proxy Introduction Aspect

한국 스프링 사용자 모임 ( 9 조인포인트 method call method execution constructor call constructor execution field get field set pre-initialization Initialization static initialization handler advice execution AspectJ 가 지원하는 11 개의 조인포인트 스프링 AOP 는 이 중에서 method execution 만 지원.

한국 스프링 사용자 모임 ( 10 어드바이스 Before 어드바이스 After 어드바이스 –After returning –After throwing –After (finally) Around 어드바이스

한국 스프링 사용자 모임 ( 11 Before 어드바이스 Pointcut

한국 스프링 사용자 모임 ( 12 After 어드바이스 Pointcut

한국 스프링 사용자 모임 ( 13 Around 어드바이스 Pointcut

한국 스프링 사용자 모임 ( 14 다양한 AOP 구현체 oriented_programming#Implementationshttp://en.wikipedia.org/wiki/Aspect- oriented_programming#Implementations

한국 스프링 사용자 모임 ( 15 예제 코드 Notification 예제 Java Development with the Spring Framework

한국 스프링 사용자 모임 ( 16 Spring AOP

한국 스프링 사용자 모임 ( 17 목표 쉽고 간단하게 JEE 에 필요한 AOP 기능을 제공. 모든 기능을 제공하는 AOP 프레임워크

한국 스프링 사용자 모임 ( 18 특징 – 프록시 기반 AOP 구현 별도의 컴파일 과정이나, 클래스로더 제어가 필요 없음. AspectJ 와 연동 지원. JDK Dynamic 프록시와 CGLIB 프록시 사용. Method Execution 조인포인트만 지원. ? ? ? ? ? ? ? ?

한국 스프링 사용자 모임 ( 19 클래식 스프링 AOP 어드바이스 org.aopalliance.aop org.springframework.aop Advice AfterAdvice AfterReturningAdvice ThrowsAdvice MethodInterceptor BeforeAdvice MethodBeforeAdvice

한국 스프링 사용자 모임 ( 20 @Around

한국 스프링 사용자 모임 ( 21 포인트컷 정적 (static) 포인트컷 동적 (dynamic) 포인트컷 포인트컷을 결정하는 시점이 런타임이냐 아니 냐 …

한국 스프링 사용자 모임 ( 22 클래식 스프링 AOP 포인트컷 org.springframework.aop Pointcut ExpressionPointcut AbstractExpressionPointcut AspectJExpressionPointcut StaticMethodMatcherPointcut AbstractRegexpMethodPointcut NameMatchMethodPointcut JdkRegexpMethodPointcut AnnotationMatchingPointcut ComposablePointcut ControlFlowPointcut DynamicMethodMatcherPointcut

한국 스프링 사용자 모임 ( 23 포인트컷 org.aspectj.lang.annotation AspectJ 포인트컷 표현식 ( 일부 ) 사용 가능 –execution, this, target, within … 확장 표현식 제공.

한국 스프링 사용자 모임 ( 24 “Hello World” AOP 예제 프로그래밍을 통해 직접 프록시 객체 생성 클래식 스프링 AOP aop 네임스페이스를 사용하는 스프링 AOP 스프링 + AspectJ

한국 스프링 사용자 모임 ( 25 전반전은 후반전을 위한 몸풀기였을 뿐 … 이제부터 시작입니다. 전반전 끝

한국 스프링 사용자 모임 ( 26 Spring AOP 선택

한국 스프링 사용자 모임 ( 27 선택할 것 들 AOP 시스템 문법 위빙 시점

한국 스프링 사용자 모임 ( 28 AOP 시스템 스프링 AOP – 프록시 패턴 AspectJ – 바이트 코드 수정

한국 스프링 사용자 모임 ( 29 스프링 AOP – 프록시 기반 프록시 객체 타겟 객체 포인트컷 (pointcut) 어드바이스 (Advice) 어드바이저 (Advisor) 메소드 가로채기 (Method Interception)

한국 스프링 사용자 모임 ( 30 AspectJ – 바이트 코드 조작 애스팩트 Weaver.class/.jar 바이트 코드.class/.jar.java/.aj

한국 스프링 사용자 모임 ( 31 프록시 기반 접근방법의 장점 별도의 컴파일러 필요 없음. 클래스 단위가 아닌 객체 단위로 인터셉터 적 용이 가능. 간단한 기능만 제공 – 오직 메소드 실행 조인포인트만 지원. –AOP 에 쉽게 접근할 수 있다. 빈에 특화된 표현식 제공 – 예 ) bean(*Dao), bean(Member*)

한국 스프링 사용자 모임 ( 32 프록시 기반 접근방법의 단점 메소드 실행 조인포인트만 가능 – 필드 접근이나 객체 생성 조인포인트는 사용 불가 스프링이 관리하는 빈에만 적용 가능 –new 로 생성한 객체에는 적용 불가 “self” 호출은 어드바이스 적용 안 됨. … public void foo(){ … bar(); } public void bar(){ … } … public void foo(){ … bar(); } public void bar(){ … } … 프록시를 거치지 않기 때문에, 어드바이스 적용 안 됨.

한국 스프링 사용자 모임 ( 33 AOP 시스템 선택 결론 다음의 경우 스프링 AOP 를 사용 – 메소드 실행 조인포인트로 충분할 경우 – 별도의 컴파일러를 사용하고 싶지 않을 경우 – 도메인 객체에 AOP 를 적용할 필요가 없을 – 프록시 사용에 문제가 없을 경우 그 밖의 경우에는 AspectJ 를 사용.

한국 스프링 사용자 모임 ( 34 문법 스프링 AOP –aop 스키마 스타일 – 클래식 스프링 AOP AspectJ – 예전 문법

한국 스프링 사용자 모임 ( VS XML 자바 5 이상을 사용하는 경우에는 사용을 권장합니다. 간결하며 XML 이 줄어들고 포인트컷 조합이 가능하며 AspectJ 시스템과 연동이 수월합니다. 자바 5 이전 버전을 사용할 경우에는 –XML 밖에는 …

한국 스프링 사용자 모임 ( 36 위빙 시점 컴파일 타임 –AspectJ 위빙 클래스 로딩 타임 – 로드 타임 위빙

한국 스프링 사용자 모임 ( 37 AspectJ 위빙 애스팩트 Weaver.class/.jar 바이트 코드.class/.jar.java/.aj

한국 스프링 사용자 모임 ( 38 로드 타임 위빙 java –javaagent:aspectjweaver.jar … VM 클래스와 애스팩트 aop.xml 파일들 … … Weaving Agent

한국 스프링 사용자 모임 ( 39 위빙 비교 빌드 타임 위빙 비용이 빌드 타임에 발생 클래스 로딩 빠름 빌드 시스템 수정이 필요 함 배포 옵션 변경 필요 없 음 IDE 지원 좋음 로드 타임 로드 타임 속도 저하됨 빌드 시스템 변경 필요 없음 배포 옵션 변경 필요함 IDE 지원 없음

한국 스프링 사용자 모임 ( 40 스프링 AOP 선택 결론 AOP 시스템 – 스프링 AOP 로는 부족할 때 AspectJ 스프링 AOP 문법 스타일 – 자바 5 아니면, XML 스키마 위빙 방법 (AspectJ 사용 ) – 최신 WAS 를 사용할 경우에는, LTW 사용. – 아닌 경우, (AJDT 사용 하여 ) 컴파일 타임 위빙.

한국 스프링 사용자 모임 ( 41 Spring AOP 활용

한국 스프링 사용자 모임 ( 42 개발에 유용한 AOP 개발 도중 특정 메소드 성능 검사 서비스 계층에서 트랜잭션 처리 DAO 에서 발생하는 예외 변환 처리 DAO 에서 Service 계층 호출 금지 하이버네이트와 JDBC 혼용 할 때 DB 동기화 기타 ( 로깅, 인증, 권한, 멀티쓰레드 안전관리, …) AOP 는 이 모든 것을 깔끔하게 (transparently) 처리해 줍니다.

한국 스프링 사용자 모임 ( 43 성능 테스트 간단한 메소드 실행 성능 테스트 예제 public Object showExecutionTime(ProceedingJoinPoint pjp){ stopWatch.start(); Object ret = null; try { ret = pjp.proceed(); } catch (Throwable e) { e.printStackTrace(); } stopWatch.stop(); System.out.println(stopWatch.getLastTaskTimeMillis()); return ret; }

한국 스프링 사용자 모임 ( 44 스프링 과 를 사용하여 트랜잭션 처리하기. 예제 코드 자세히 –AnnotationDrivenBeanDefinitionParser.java –AnnotationTransactionAspect.aj –TransactionInterceptor.java

한국 스프링 사용자 모임 ( 45 예외 변환 하이버네이트 예외를 스프링의 DataAccessException 으로 변환하기. 예제 코드 public void throwing="e") public void translateHibernateException(HibernateException e){ throw SessionFactoryUtils.convertHibernateAccessException(e); }

한국 스프링 사용자 모임 ( 46 아키텍처 검증 컨트롤러에서 DAO 직접 호출 금지. 서비스 계층에서 컨트롤러 호출 금지. 예제 org.opensprout.spring.aop.third.architecture.SimpleDao.*(..))") public void org.opensprout.spring.aop.third.architecture.SimpleService.*(..))") public void && callToService()") public void checkDao(JoinPoint jp){ System.out.println("Dao To Service Call Found!!"); throw new RuntimeException("Dao can't call Service's method."); }

한국 스프링 사용자 모임 ( 47 하이버네이트 상태 동기화 JdbcTemplate 사용하기 전에 Session.flush(). 왜 ? 출처 : Before a JDBC operation, flush the Hibernate Session (includes TSE example code) Before a JDBC operation, flush the Hibernate Session (includes TSE example code)

한국 스프링 사용자 모임 ( 48 하이버네이트 상태 동기화 예제 public class HibernateStateSynchronizer private SessionFactory org.springframework.jdbc.core.JdbcTemplate.*(..))") public void jdbcOperation() { public void synchronizeHibernateState() { Session session = sessionFactory.getCurrentSession(); if (session.isDirty()) { session.flush(); }

한국 스프링 사용자 모임 ( 49 Spring AOP 이슈

한국 스프링 사용자 모임 ( 50 이슈 “CGLIB 을 사용할까 JDK 프록시를 사용할까 ?” “ 어라 ! 프록시 적용이 안 되네 ?” “ 엥 ? 프록시 객체를 못 만들고 있네 ?” “ 흠... 좀 느려진 것 같은데 …” “Superficiality is the curse of our age.”

한국 스프링 사용자 모임 ( 51 JDK 프록시 VS CGLIB 프록시 성능 라이브러리 추가 여부 Concrete 클래스의 프록시 생성 가능 여부 코드로 확인하기

한국 스프링 사용자 모임 ( 52 CGLIB 을 사용할까 JDK 프록시를 사용할까 ? 라이브러리 추가에 문제가 없다면, CGLIB 프 록시 사용을 권장합니다. cglib cglib-nodep 2.1_3

한국 스프링 사용자 모임 ( 53 어라 ! 프록시 적용이 안 되네 ? JDK 프록시 제약 사항 확인 – 인터페이스 타입이 아니라 클래스 타입으로 코딩 한 것은 아닌지 확인 메서드 체인 확인 –“self” 호출이 있는지 확인. CGLIB 프록시 제약 사항 확인 – 어드바이스를 적용하려는 메소드나 클래스가 final 인지 확인.

한국 스프링 사용자 모임 ( 54 엥 ? 프록시 객체를 못 만들고 있네 ? CGLIB 프록시 제약 사항 확인 – 기본 생성자가 있어야 함. –final 클래스의 프록시는 생성하지 못함.

한국 스프링 사용자 모임 ( 55 흠... 좀 느려진 것 같은데 … 포인트컷 확인 – 어드바이스를 적용할 필요가 없는 메소드에도 어 드바이스를 적용한 것은 아닌지 확인. 확인하는 방법 –xml 사용시 AJDT 로 확인. – 클래식 AOP 사용시 어드바이스에 로그 메시지를 추가하고 확인.

한국 스프링 사용자 모임 ( 56 스프링 AOP 적용 불가능한 상황 인터페이스 없음. final 클래스 또는 final 메서드. AOP 적용하고 싶은 마음.

한국 스프링 사용자 모임 ( 57 Q&A

한국 스프링 사용자 모임 ( 58 참고자료 Spring One Making Sense of AOP Choices Spring 2.0 AOP - Spruce Up Your Domain Mo del.Spring 2.0 AOP - Spruce Up Your Domain Mo del Using AOP in the Enterprise , ,00.htmhttp:// 1622, ,00.htm 피상성 :