2021 01 11 sp5

jsbak·2021년 1월 11일
0

Spring

목록 보기
3/7

session commit, rollback
2. 전형적으로 반복되는 중복 구조
3. 세션 오픈에서 발생하는 예외도 던져짐 비지니스 로직에서 persistance가 처리해야하는 로직을 처리해야하는경우가 발생하는데 이것을

@Transaction 하나로 처리할 수 있었다.
그러면 이 코드가 위닝
이것을 이야기 하는게 AOP라는 녀석이다.

그거봐도 뭔소린지 모르겠어요

왜 AOP 방법론에서는 proxy를 만들었는가
이 proxy AOP 연관?
그러면 왜 AOP가 필요한가?

언어의 변천사
pp (procedural programming)
fop (Functional Programming)
oop (Object Oriented Programming)

oriented 지향한다. 3개다 개발 방법론
POP (절차지향) - 어떤 순서에 따라 하겠다라는 것에 집중, 제일 먼저 나옴.
OOP () - 어플리케이션 규모가 커지면 절차로 진행될 때의 중복코드를 해결, 모듈화, 객체화를 해서 할것인가
FOP () -
중복제거를 객체화를 할것인가 함수화를 할것인가
여전히 중복이 발생하더라

그래서 나온것이 AOP(Aspect)
관점 지향 프로그래밍

AOP

관점
OOP의 중복을 어떻게 해결할 수 있는가?
OOP, FOP에서 어떤 상황에 중복이 발생할 수 있는가? 를 알아야한다.

예시 ) ATM에서 할 수 있는 것 몇가지
출금, 입금, 이체, 공과금 납부 등

10만원 출금시 10만원 차감 10만원 지급
도중에 잘안된다면 원자성을 띄는 단위로 묶여야함.

보안로깅?? 모든 과정에서 인증이 공통 적으로 필요 이상황에서 출금이라는 로직을 짜려면 트랜잭션을 넣고 로그도 넣고 인증하는 코드도 넣어야한다. 공통적으로 어쩔수 없지 중복이 발생
이 때 이것을 어떻게 해결할까? 하는데서 시작한게 AOP

관점/양상/관심사
1. 관심사의 분리 - 핵심 관심사, 부가 관심사
핵심 관심사 (Core concern)
코드화 : 타켓
부가 관심사 (핵심에 횡단으로 걸쳐있다. 횡단 관심(crosscutting concerns))
코드화 : 어드바이스
핵심적인 일을 나눴더나 타겟, 부가 관심사에 따라 나온 산출물(어드바이스) 각자가 자기의 관점에 따라서 만 프로그래밍하면된다.
이 타겟과 어드바이스, 이 별개의 녀석들이
런타임에 서로 맞물리는 구조를 Weaving 이라고한다.
위빙 = 타켓 + 어드바이스

5가지의 용어를 잘 알고 이해하는 것이 AOP의 시발점이다.

그래서 핵심 기능이 **중복제거**

Joinpoint(결합점?)
언제 어디서 위빙 할 것인지 표현하는게 join point이다.
클래스 로딩, 변수 선언, 메서드 선언 - 스프링은 메서드 호출 조인포인트를 지원

Pointcut
하나의 어드바이스 기준으로 어떤 타켓에다가 위빙을 할 것인가?

AOP 분리 관점에서 개발하고
조인포인트에서 위빙하고(AOP)
어떤 타겟에 위빙할지 포인트컷으로 골라낸다

메서드 호출 이전, 이후 정하는것
before advice, atfer advice(return 성공, throwing 예외)

Around advice 메서드 호출 전후를 전부 위빙 (감싸)

Aspect
구현할 어드바이스 + 포인트 컷

advisor

AOP를 이 9가지 용어를 사용해서 한문장으로 이야기하면 성공한 것
어떻게 할지의 이 핵심 기술을 proxy 라한다.

예?

어떤 비지니스가 호출
소요되는 시간 알고 싶다.
로직의 소요시간을 로그로 찍어보려한다.

이문제 해결
전통적 비지니스 로직을 건드려야한다.
처음과 끝에 잡으면 소요시간이 나오는데 이것을 비지니스 로직에서 찍어야했다.

이 코드를 전혀 건드리지 않고하려면
관심사를 분리해야한다.

핵심 - 비지니스 로직
부가 - 소요시간을 계산한 뒤 로그로 찍어라, 이 기능 가진 어드바이스를 만들어서
타켓 + 어드라이브 = 위빙한 뒤 실행

AOP (프레임워크X) 가 없는 상태에서 그 기능을 구현해보자

프록시를 통하면 기존의소스를 건드리지 않고 뭔가할수있다?
프록시 생성이 보통일이 아니며
전혀 코드 스럽지 않다. - Aspect j 프레임워크??
프록시를 생성하지 않아도 알아서 해주었다.

장점을 따와서 만든게 Spring AOP 프레임워크이다.
1. Spiring AOP 모듈
2. 위버, 확장성를 이용해서 aspect j 위버를 쓸 수 있도록 바꿧다.

aspectj위버 추가

AOP의 목적
비지니스 로직에 건드리지 않는다ㅡ.
관심사 분리 자기 관점에서 한다?
트랜잭션관리등 신경쓰지 않아도 된다
그 로직안에는 잡다한것이 섞이지 않는다.
가독성 올라고 유지보수 올라간다
결과적으로 중복제거

AOP의 핵심 기술 - Proxy 생성

선언적 프로그래밍 - 어노테이션으로 프로그래밍

오후 시큐리티??

보안 필터 보고오기

profile
끄적끄적 쓰는곳

0개의 댓글