객체지향의 한계를 넘어, AOP 전은영,이재훈 고덕윤.

Slides:



Advertisements
Similar presentations
온누리교회 일대일 사역팀. CONTENTS 1. 예수님의 공생애 사역 2. 죄의 기원과 죄의 결과 3. 죄 문제의 해결 I. 예수님의 부활은 그리스도의 죽음과 함께 기독교 II. 인간은 하나님 앞에 모두 죄인이다. III. 따라서 나도 죄인이라는 사실을 깨달아야 한다.
Advertisements

서울혁신기획관 익명성과 인간소외 심화, 공동체 해체 … 시민의 행복지수와 삶의 질 하락 … 2 I. 왜 … 마을공동체인가 ! 1.
2009 년 행정안전부 공직설명회 년 행정안전부 공직설명회 2 목 차 I. 개 요 II. 기능직 개편원칙 III. 정보통신현업 개편방안 IV. 주요 이슈.
융합형 전문가, 기술경영자 한성대학교 경영학부 하성욱 교수 2014 년 10 월 29 일 2014 년 한성여고 방과후 특강.
건강새마을 조성사업 주민 참여 모니터링 강 민 정.
목 차 I 방위산업의 정의 II 방위산업의 특성 III 방위산업의 현황.
1월 월간업무보고 경 리 부.
“2008년도 준정부기관 고객만족도 조사 결과 보고서”로 본 보고서를 선박안전기술공단의 제출합니다. 제 출 문
목 차 I 퇴직연금의 필요성 II 퇴직급여제도 종류 퇴직연금제도 도입배경 III IV 과학기술인 퇴직연금 개요 V
홍보출판 위원회 출판국 2010년 사역 계획서 발표자 : 출판국 국장 / 박수만권사 일시: 2010년 01월 17일(일) 1.
영호남 공동발전을 위한 학술문화 교류사업 보고
대학생 봉사단을 통한 경정사업 이미지 제고 ICARUS 조영호/염윤성.
서울특별시 중구 통일로 10 연세재단세브란스빌딩
目 次 I. 총칙 II. 특허 요건 III. 특허 출원 IV. 심사 절차 V. 특허 등록 및 특허권 VI. 특허권자 보호
Chapter 2 정보시스템 아키텍처 (IS Architecture)
Vision System Lab, Sang-Hun Han
EXEM ( ) LTW를 활용한 데이터 수집기 김경식.
OSGi 번들 서비스 의존성 해결을 위한 Residential Gateway 소프트웨어 구조 설계
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
역대 정부개편의 교훈과 새로운 정부조직개편의 방향
최신 소프트웨어 공학 개요 11.1 컴포넌트 기반 소프트웨어 개발 11.2 웹 엔지니어링 11.3 정형적 명세 기법
14주차 1교시 강화계획 [학습목표] 1. 강화계획의 정의를 안다 [학습내용] 1. 단순한 강화계획 2. 간헐적 강화 3. 복합 계획 4. 선택과 대응법칙 [사전학습] 강화계획이 일어날 수 있는 사례를 생각해본다.
기록관리 업무담당자 교육 2017년 경상북도문경교육지원청.
연장근로와 야간·휴일근로 김영호 노무사 나눔 노사관계연구소 소장 연세대 일반대학원 박사 수료 고려사이버대 법학과 외래교수
김종찬 김정석 이상미 임성규 담당 교수님 최병수 교수님
체위변경과 이동 요양보호 강사 : 이윤희.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
팀 명: Con Spirito 팀 원: 경주리 김다정 김소담 최은미
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
TDD Junit TDD & Spring Framework 참고자료
Internet Computing KUT Youn-Hee Han
자바 5.0 프로그래밍.
AOP 개념 및 Spring의 AOP 기능.
소프트웨어설계 UML 학기.
Hadoop 김연왕
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
10강. AOP(Aspect Oriented Programming)-II
지역맞춤형 일자리창출 사업 기관 평가
자바 5.0 프로그래밍.
올바른 이메일 사용법
2016학년도 학교평가 안내 충청북도교육청 (기획관).
AOP (Aspect Oriented Programing)
Systems Engineering 충북대학교 토목공학부 토목시스템공학전공 정보기술기반 건설경영연구실
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
대촌중 최영미.
소프트웨어 공학 (Software Engineering)
신 윤 호 ㈜엘림에듀 초등사업본부장, 중앙대학교 체육학박사
[CPA340] Algorithms and Practice Youn-Hee Han
지방공무원 임용시험 위탁 및 공동추진 충청북도교육청 (목) 총무과 교육행정 6급 안 병 대
대박콜 전국화물 퀵서비스 회사소개서 (기업 퀵서비스,택배,문서수발).
myfood.com 상명대 맛집 홈페이지 구축 제안서
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
백기선 Advising beans 백기선
Chapter 02. 소프트웨어와 자료구조.
기업회생 절차.
2. 윤리학의 원리와 적용 가. 상대주의와 절대주의.
Barat을 이용한 Code Transformation
1월 KB손해보험 설계사 시상 I. 설맞이 2017년 Good Start 상품시상 II. A군 FC 주차시상 5만원↑
3장,4장 발표 서정우.
1장 시스템 개발 과정의 이해 소프트웨어 위기와 소프트웨어 공학 출 현 배경 이해 시스템(소프트웨어)의 개발자들
교육기부 진로체험기관 인증제와 지역 센터 운영 방안 한국직업능력개발원 김승보.
존 듀이의 경험교육론에 기초한 초등학교 체험활동 특징에 관한 연구
발표 : KAB부동산연구원 조윤제 부연구위원
제9주 예산 수립과 집행.
양초 한 자루의 과학 과학영재교육 전공 김 연 주 류 은 희 이 상 희.
간식의 세계!!.
2019년 헤럴드경제 자본시장대상(안) 2019년 3월 헤럴드경제 IB금융섹션.
접수번호 : MWC 2015 한국공동관 참가 지원서 - 프로젝트명(서비스/콘텐츠) : 업 체 명 :
Modeling Aspect and Weaving
우울증 예방 관리 강사 :.
Presentation transcript:

객체지향의 한계를 넘어, AOP 전은영,이재훈 고덕윤

Let’s play AOP 특별한 순서 AOP의 개요 AOP의 요구공학 AOP의 UML 디자인 AOP의 구현

오늘 임원회의에서 보안정책 강화지시가 내려졌어요 전은영씨 왜요? 과장님 설마 인터넷뱅킹에도 적용되는건 아니죠? 정확해요 설마 몰디브은행 전산팀 오늘 임원회의에서 보안정책 강화지시가 내려졌어요 전은영씨 왜요? 과장님 설마 인터넷뱅킹에도 적용되는건 아니죠? 정확해요 설마 계좌이체, 입출금, 이자계산까지 다 적용되는건 아니죠? 그것도 정확해요 은영씨? 네? 일주일안에 무조건하세요 설마 시간을 일주일만 주시는건 아니죠? 역시 은영씨는 정확해요 힘들어요 한 달안에는 불가능해요 네…

I. Overview

프로그래밍 패러다임의 변화 초기 프로그래밍 언어 절차적 프로그래밍 객체지향 프로그래밍 관점지향 프로그래밍 프로그래밍 패러다임의 변화 초기 프로그래밍 언어 절차적 프로그래밍 객체지향 프로그래밍 관점지향 프로그래밍 발전된 객체지향 프로그래밍

OOP의 문제점 이런 구조인데.. 일주일 만에 완료하라고? 제대로 짜증이죠? 계좌이체 입출금 이자계산 로깅 로깅 로깅 보안 트랜잭션 트랜잭션 트랜잭션

OOP의 문제점    // core concern code ---------------------------    if (fromAcc.hasEnoughMoney(amount) == false) {    throw new AccountException(“not enough money”);    }    fromAcc.withdraw(amount);    toAcc.credit(amount);    // core concern code ---------------------------    unlockingAccount(fromAcc);    unlockingAccount(toAcc);    saveAccount(fromAcc);    saveAccount(toAcc);    txManager.commit();   }   catch(TransasferException e) {    txManager.rollback();    errorHandler.saveAppException(e);    errorHandler.sendErrorNotificationToManager();    logger.exception(e);    throw new BakingRuntimeException(e);   }   catch(PersistentException e) {    logger.exception(e);    errorHandler.sendErrorNotificationToDBA();    throw new BakingRuntimeException(e);   }   finally {    txManager.close();    connectDB.close();   }   logger.end(“transfer”);   } ... } public class AccountTransfer extends AbstractAccountModule {  Logger logger = MyLogger.getLog(“accountTransfer”);  TransactionManager txManager = new MyDBTransactionManager(TxDefinition.Default);  PersistentHelper persistentHelper = new MyPersistentHelper(Account.class,  DBConst.DBConnectionInfo);  Authentication auth = new LDAPAuthentication();  ErrorHandler errorHandler = MyHandlerFactory.getErrorHandler();  ...  public void transafer(Accouno fromAcc, Account toAcc, int amount) {   logger.begin(“transfer”);   if (auth.checkLoginedUser() == false) {    throw new NotLoginedUserAccessException();   }   if (auth.checkAuthorization() == false) {    throw new AuthorizationFailException();   }   persistentHelper.connectDB();   txManager.beginTransaction();   try {    loadAccount(fromAcc);    loadAccount(toAcc);    lockingAccount(fromAcc);    lockingAccount(toAcc); …

OOP의 문제점 중복코드 지저분한 코드 생산성 저하 재 활용성 저하 변화의 어려움

새로운 대안 Crosscut Concern (횡단관심) 묶자 계좌이체 입출금 이자계산 로깅 로깅 로깅 보안 보안 보안 트랜잭션

AOP 의 적용 public class AccountTransfer extends AbstractAccountModule {  public void transafer(Accouno fromAcc, Account toAcc, int amount) {   if (fromAcc.hasEnoughMoney(amount) == false) {    throw new AccountException(“not enough money”);   }   fromAcc.withdraw(amount);   toAcc.credit(amount);  } … }

AOP 의 적용 Aspect Class 핵심관심모듈 횡단관심모듈 Weaving 로 깅 계좌이체 보 안 입출금 트랜잭션 이자계산

Inheritance vs. Aspect Dead-lock 발생, Data 영속성 오류 지저분한 코드 그렇다면, 이 문제는 OOP의 상속으로 해결이 가능하지 않아? Dead-lock 발생, Data 영속성 오류 지저분한 코드 (Java의 경우) 다중상속의 불가 재활용성의 감소 상위 클래스가 하위 클래스의 종속화

II. Requirement Engineering

AOP 요구공학의 기본 모델 Identify concerns Identify viewpoints, Discover requirements and relate to concerns Specify concerns Identify candidate aspects Specify and prioritize aspects Specify aspect dimensions

Ex. 고속도로 High-pass system 전국 고속도로에 High-pass 시스템을 도입 할 예정입니다. 자동차 안에 단말기를 설치하고, 그 단말기를 통해 통행 정보를 수집합니다. 통행정보에는 개인 데이터, 은행계좌번호, 자동차 상세내역이 포함됩니다. 단말기의 센서에 의해 계좌에서 자동으로 도로 요금이 지불됩니다. 허가된 자동차는 통과 시 부스에 녹색등이 켜지고, 지불 총액이 표시됩니다. 비 허가된 자동차가 통과 시 노란등이 켜지고 감시 카메라가 작동합니다.

Identify concerns 보안 반응 시간 다중 사용자 시스템 호환성 법적 이슈 정확성 가용성

Specify concerns Concern : 호환성 External Req. 사용자는 요금 지불 시 단말기를 켜야 한다. 경찰은 단말기가 없는 사용자를 관리한다.

Concern : 반응 시간 External Req. 톨게이트는 다음과 같은 과정을 거친다. 단말기 번호를 식별한다. 사용자가 지나기 전에 등을 켠다. 사용자가 지나기 전에 금액을 표시한다. 허가된 사용자가 아니면 사진을 찍는다. 시스템은 다음이 충족해야 작동한다. 사용자가 단말기를 켠다.

Discover requirements and relate to concern Viewpoint : 자동 지불 Concerns : 보안, 호환성, 반응시간 Requirements: 사용자의 카드번호, 계좌번호, 단말기 번호를 시스템으로 보낸다. 단말기 식별번호와 함께 시스템에 계좌번호를 보낸다. 새로운 정보를 수정하기 위해 새로운 계좌번호와 카드번호, 단말기 번호를 시스템에 보낸다.

Concerns : 반응시간, 정확성, 법적 이슈 Requirements : Viewpoint : 출구 Concerns : 반응시간, 정확성, 법적 이슈 Requirements : 운전자가 입구를 통과하지 않은 자면, 노란 불을 켠다. 요금은 입구의 위치에 따라 결정된다.

Identify candidate aspect 자동지불 : 보안, 호환성, 반응시간 출구 : 반응시간, 정확성, 법적 이슈 Candidate Aspect : 반응시간

Specify and prioritize aspects 보안 법적 이슈 <

Specify aspect dimensions Candidate Aspects Influence Mapping 호환성 Specification, Architecture, Design Evolution Function 반응시간 Architecture, Design Aspect 법적이슈 Specification Function 보안 Architecture, Design Aspect 가용성 Architecture Function 다중 사용자 Architecture, Design Aspect

III. UML Design

Using UML for OOM

Collaboration Diagram for OOM

Class Diagram for OOM

Using UML for AOM

Class Diagram for AOM

Collaboration Diagram with an Interceptor

Aspect Modeling using Collaboration Stereotype

장난해?

IV. Implementation

Coding AOP Joinpoint 계좌이체 Pointcut Advice 이체 로깅 Joinpoint Joinpoint

AspectJ의 포인트 컷 명칭 사용 예 발생 시점 excution Excution(void Point.setX(int) 메소드가 실행될 때 call Call(void Point.setX(int) 메소드가 호출될 때 handler Handler(ArrayOutOfBound Exception) 예외처리 발생시 this This(SomeType) 객체가 수행중일 때 target Target(SomeType) 대상객체가 SomeType일때 within Within(MyClass) 코드가 MyClass에 속할 때 cflow Cflow(call(void Test.main()) Joinpoint가 Test.main 안에 있을때

Coding AOP public class AccountTransfer extends AbstractAccountModule {  public void transafer(Accouno fromAcc, Account toAcc, int amount) {   if (fromAcc.hasEnoughMoney(amount) == false) {    throw new AccountException(“not enough money”);   }   fromAcc.withdraw(amount);   toAcc.credit(amount);  } … }

그렇다면, 유지보수 시에도 한 개의 Aspect만 수정하면, 간단하네요 public aspect MethodLoggingAspect {  Logger logger = MyLog.getLogger(“methodcall”); } pointcut methodcall() : execution(* *.*(..)) && !within(MethodLoggingAspect) pointcut methodcall() : execution (void AccountTransfer.transfer(..)) &&   !within(MethodLoggingAspect);  before() : methodcall() {   logger.begin(thisJoinPointStaticPart.getSignature().getName());  } after() : methodcall() {   logger.end(thisJoinPointStaticPart.getSignature().getName());  }

AOP Tools

V. Quality Management

AOP 를 사용하면.. 각 모듈의 기능이 명확해진다. 일관적인 구현이 가능해진다. 재사용성의 향상 개발 대상의 기술이전이 쉽다.

AOP 로 개발할 때.. 개발정책을 확립하라. Logging을 강화하여 품질보증에 힘쓰라. Mock 객체를 이용하여 테스트 하라. What-if 분석에 충실 하라.

VI. Prospective AOP

해결해야 할 과제 표준의 부재 학습의 어려움 OOP와의 충돌 도입 전략의 부재

소프트웨어 Crisis 해결의 Solution Be the Solution 재사용성 개발 생산성의 향상 OOP의 장점을 극대화 “AOP가 없었을 때는 어떻게 개발을 했는지 모르겠다.” 소프트웨어 Crisis 해결의 Solution