AOP (Aspect Oriented Programming)

Slides:



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

한국 스프링 사용자 모임 ( 1 스프링 AOP 선택, 활용, 이슈 백기선.
.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.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Power Java 제3장 이클립스 사용하기.
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ch.07-5 xml-rpc 사용하기 김상엽.
Spring 4 기반의 RESTful Web Service 구현
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
IOC, DI 2015 Web Service Computing.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
AOP 개념 및 Spring의 AOP 기능.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Spring Framework & MyBatis
10강. AOP(Aspect Oriented Programming)-II
9강. AOP(Aspect Oriented Programming)-I
1. C++ 시작하기.
6강. DI설정 방법 XML파일을 이용한 DI설정 방법 JAVA를 이용한 DI설정 방법 XML과 JAVA를 같이 사용
FTP 프로그램 채계화 박재은 박수민.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
Power Java 제14장 배치 관리자.
KHS JDBC Programming 4 KHS
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
CHAP 12. 리소스와 보안.
13. 연산자 오버로딩.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
Method & library.
AOP (Aspect Oriented Programing)
전자정부 표준프레임워크 호환성 가이드 전자정부 표준프레임워크 사업단 실행환경 개발팀.
Spring 프레임워크의 이해 2. Spring Introduction.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
백기선 Advising beans 백기선
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
4. Spring 프레임워크의 AOP 개념.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
Spring Introduction.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
3. 모듈 (5장. 모듈).
JSP Programming with a Workbook
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
.Net FrameWork for Web2.0 한석수
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
7 생성자 함수.
6 객체.
JAVA 프로그래밍 16장 JNLP.
Presentation transcript:

AOP (Aspect Oriented Programming) 2015 Web Service Computing

트랜잭션의 구현 만약 @Transactional을 직접 구현한다면? 비즈니스 로직 코드와 트랜잭션 관련 코드가 명백하게 분리되어 있긴 하지만 트랜잭션 관련 코드가 비즈니스 로직 코드와 함께 공존 모든 DAO 클래스에 적용한다면? 동일한 기능의 중복 불가피

AOP란 무엇인가? 앞서 트랜잭션과 같은 부가기능에 해당하는 기능의 모듈화 작업은 기존의 객체지향 설계 패러다임과 구분되는 새로운 특성이 있다고 판단 애스펙트 (Aspect) 객체 지향 기술에서 부가기능 모듈을 부르는 이름 애스펙트 자체로는 애플리케이션의 핵심기능을 담고 있지는 않지만 요소요소마다 공통 관심사항이 될 수 있음 즉, 애플리케이션을 구성하는 한가지 측면

AOP란 무엇인가? 애스펙트 (Aspect)의 분리 왼쪽 오른쪽 부가기능이 핵심기능의 모듈에 침투해 들어가면서 설계와 코드가 지저분해짐 부가기능 코드가 여기저기 메소드에 마구 흩어져서 나타나고 코드는 중복됨 오른쪽 코드 사이에 침투한 부가기능을 독립적인 모듈인 애스팩트로 구분 각각 성격이 다른 부가기능은 다른 면에 존재하여 독립적으로 그 코드를 살펴 볼 수 있음

AOP란 무엇인가? 애스펙트 지향 프로그래밍 (Aspect Oriented Programming) 관점 지향 프로그래밍 애플리케이션의 핵심적인 기능에서 부가적인 기능을 분리하여 애스펙트라는 모듈로 구분하여 설계하고 개발하는 방법 AOP는 OOP를 돕는 보조적인 기술이지 OOP를 대체하는 기술은 아님 애플리케이션을 다양한 측면에서 독립적으로 모델링하고, 설계하고, 개발할 수 있도록 함

AOP 용어 타겟 (Target) 어드바이스 (Advice) 조인 포인트 (Join Point) 포인트컷 (Pointcut) 부가기능을 부여할 대상 (예: 클래스) 어드바이스 (Advice) 타겟에게 제공할 부가기능을 담은 모듈 객체로 정의하기도 하지만 메소드 레벨에서 정의하기도 함 조인 포인트 (Join Point) 어드바이스가 적용될 수 있는 위치 스프링 프록시 AOP에서 조인 포인트는 메소드의 실행 단계임 포인트컷 (Pointcut) 어드바이스를 적용할 조인 포인트를 선별하는 작업 또는 그 기능을 정의한 모듈 스프링의 포인트컷은 특정 타입 객체의 특정 메소드를 선정하는 기능

AOP 용어 프록시 (Proxy) 어드바이저 (Advisor) 위빙 클라이언트와 타깃 사이에 투명하게 존재하여 부가기능을 제공하는 객체 DI를 통해 타겟 대신 클라이언트에 주입 어드바이저 (Advisor) 포인트컷과 어드바이스를 지닌 객체 즉, 어떤 부가기능(어드바이스)을 어디에(포인트컷) 전달할 것인가를 알고 있는 객체 스프링의 어드바이저는 아주 단순한 애스펙트의 한 형태 위빙 어드바이스를 포인트컷에 전달하는 과정

@AspectJ를 이용한 AOP 적용 @AspectJ란 AOP를 활용하여 실습하고자 하는 것 @AspectJ는 Java Annotation을 사용한 일반 Java 클래스로 관점(Aspect)를 정의하는 방식이다. @AspectJ 방식은 AspectJ 5 버전에서 소개되었으며, Spring은 2.0 버전부터 AspectJ 5 어노테이션을 지원한다. AOP를 활용하여 실습하고자 하는 것 1) 앞서 만들었던 회원가입 기능(단순 DB 삽입)을 서비스(AOP 타겟)로 구현 2) 위 서비스의 특정 함수를 실행할 때 실행 전 후로 부가기능(간단한 문구 출력) 삽입

AOP 실습을 위한 구성 pom.xml에 다음과 같이 추가 <!-- Spring AOP + AspectJ --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.2.0.RELEASE</version> </dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.0</version> <artifactId>aspectjweaver</artifactId> <version>1.8.6</version>

AOP 실습을 위한 구성 koreatech.cse.service.UserService package koreatech.cse.service; import koreatech.cse.domain.User; import koreatech.cse.repository.UserMapper; import org.springframework.stereotype.Service; import javax.inject.Inject; import java.util.Date; @Service public class UserService { //타겟 @Inject private UserMapper userMapper; public Boolean signup(User user) { if(user.getEmail() == null || user.getPassword() == null) return false; userMapper.insert(user); System.out.println(“User created: " + new Date()); return true; }

AOP 실습을 위한 구성 koreatech.cse.aop.AopTester 스프링 설정파일에 다음과 같이 추가 package koreatech.cse.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import java.util.Date; @Aspect public class AopTester { @Before("execution(* koreatech.cse.service.UserService.signup(..))") //포인트컷 public void beforeMethod(JoinPoint joinPoint) { //어드바이스 System.out.println("Before " + joinPoint.getSignature().getName() + ": " + new Date()); } @After("execution(* koreatech.cse.service.UserService.signup(..))") public void afterMethod(JoinPoint joinPoint) { System.out.println("After " + joinPoint.getSignature().getName() + ": " + new Date()); 스프링 설정파일에 다음과 같이 추가 <aop:aspectj-autoproxy /> <bean id="userServiceAspect" class="koreatech.cse.aop.AopTester" />

AOP 실습을 위한 구성 UserController를 다음과 같이 수정 실행 결과 @Transactional @RequestMapping(value="/signup", method= RequestMethod.POST) @ResponseBody public String signup(@ModelAttribute User user) { userService.signup(user); return "success"; } 실행 결과 Before: Fri Sep 11 14:36:41 JST 2015 User created at Fri Sep 11 14:36:41 JST 2015 After: Fri Sep 11 14:36:41 JST 2015

@AfterReturning Pointcut에 지정한 함수가 실행 완료 후 결과값을 활용 @AfterReturning(pointcut = "execution(* koreatech.cse.service.UserService.signup(..))", returning= "result") public void afterReturningMethod(JoinPoint joinPoint, Object result) { System.out.println("After Returning " + joinPoint.getSignature().getName() + ": " + new Date() + ", Value = " + result); }

@Around @Before와 @After를 통합하여 실행 가능 @Around("execution(* koreatech.cse.service.UserService.signup(..))") public void aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("@Around is running!"); System.out.println("Before " + joinPoint.getSignature().getName()); joinPoint.proceed(); System.out.println("After " + joinPoint.getSignature().getName()); }

(참고) 포인트컷 표현식 보다 복잡하고 세밀한 포인트컷 필터 기준 설정 포인트컷 표현식 클래스와 메소드 이름, 정의된 패키지, 메소드 파라미터, 리턴 값, 부여된 어노테이션, 구현한 인터페이스, 상속한 클래스 포인트컷 표현식 효과적으로 포인트컷의 클래스와 메소드는 선정하는 언어 문법은 다음과 같다.

(참고) 포인트컷 표현식 포인트컷 표현식 테스트용 인터페이스 포인트컷 표현식 테스트용 클래스 1

(참고) 포인트컷 표현식 포인트컷 표현식 테스트용 클래스 2 클래스 선정 기능 테스트용

표현식과 선정 결과

표현식과 선정 결과