6.1. Introduction

선언적 트랜잭선 관리(declarative transaction management)와 같이 EJB를 대체할 만한 선언적인 엔터프라이즈 서비스를 제공하기 위해 사용하며, 이것으로 OOP를 보완 하기 위해 사용자 정의 apect를 만들어 사용할 때 유용합니다.

6.1.1. AOP concepts

Aspect : 여러 객체를 관통하는 cross-concern을 구현한 것.
Join Point : 프로그램이 실행되는 동안의 여러 시점들.. 그 중에서 Spirng AOP는 메소드 실행 시점 만을 나타냅니다.
Advice : Aspect에 의해 제공되어 특정 join point에 끼어들어 수행하게 될 작업.
Pointcut : 특정 Join point들을 나타내는 표현 방법.
Introduction : 프록시 객체에 추가적인 메소드나 필드를 추가하는 것.
Target object : 하나 또는 여러개의 aspect에 의해 advice가 적용될 객체.
AOP proxy : Aspect를 구현하기 위해 Spring 프레임웤에서 만들어 내는 객체로, JDK의 Proxy인터페이스 또는 CGLib을 사용합니다. Spring 2.0을 사용하면 투명성을 유지하면서[footnote]이전에는 일일히 ProxyFactoryBean을 사용하여 만들어 줬었는데 이제는 그런 일을 안해도 된다는 의미 인듯 합니다.[/footnote] 프록시를 만들 수 있습니다.
Weaving : Aspect를 target 객체에 적용하는 걸 말하며, 컴파일, 클래스 로드, 런타임 때 할 수 있으나 Spring AOP는 런타임 때 합니다.

Advice Type
Before advice : 해당 join point 전에 실행 할 adive.
After returning advice : 해당 join point가 정상적으로 종료 된 뒤에 실행 할 advice
After throwing advice : 해당 join point에서 예외가 발생했을 때 실행 할 advice
After (finally) advice :  해당 join point가 정상적으로 끝나든 예외가 발생하든 무조건 실행 할 advice
Around advice :  위에서 언급한 모든 adivce의 일을 할 수 있고 해당 join point의 실행 여부도 결정할 수 있으며 join point가 반환할 값을 조작할 수 도 있습니다.

Using
the most specific advice type provides a simpler programming model with less
potential for errors.

6.1.2. Spring AOP capabilities and goals

Spring AOP는 자바로 구현했기 때문에 별도의 컴파일 처리가 필요로 하지 않습니다.

Spring AOP는 위에서도 잠시 언급했지만 메소드 실행 join point만 제공합니다.

완벽한 AOP구현이 목적이 아니라 다른 AOP 구현체와의 통합이 목표입니다. 하지만 대부분의경우 Spring AOP만으로도 충분합니다.

AspectJ와 경쟁을 하려는 것이 아니고 프록시 기반의 Spring AOP와 완전한 AOP 프레임워크인 AspectJ는 서로 상호 보완의 관계입니다.

6.1.3. AOP Proxies

6.6 에서 더 자세히 살펴 보겠지만 기본적으로 J2SE의 dynamic proxy[footnote]인터페이스를 사용하여 프록시를 만듭니다.[/footnote]를 사용합니다.

그밖에 CGLIB proxy를 사용하게 될 경우는 다음과 같습니다.
인터페이스를 구현하지 않은 클래스의 프록시를 만들 때
인터페이스에 없는 메소드를 가진 클래스의 프록시를 만들고 싶을 때
메소드의 인자로 인터페이스 타입이 아닌 특정 클래스 타입의 프록시를 넘겨주고 싶을 때

아 이런 바보..ㅠ.ㅠ

배포가 안되서 엄청 삽질을 했는데..

문제의 원인은 배포할 곳과 개발 환경의 JDK 버젼이 맞지 않아서였습니다.

6.0에서 String 클래스에 isEmpty()를 추가했더군요. 원래 있는 건 줄알고 이클립스의 자동완성 기능에서 보이길래 사용한건데.. 그게 말썽을 부렸습니다.

에러라도 떨어지면…금방 찾았을 텐데.. 아무런 에러도 없고 폼이 넘어가지 않기만 하기 때문에 원인을 찾는게 힘들었습니다. 흐흐..

개발 환경과 배포 환경의 버젼을 맞춰야 한다는 기본적인걸..ㅠ.ㅠ 이렇게 느끼게 되네요.

me2day – 2007년 3월 30일

  • 평소보다 30분 정도 더 잤는데 이렇게 좋을 수가~ 늦잠을 잘 수 있어서 좋습니다. 오전 8시 47분
  • ProxyFactoryBean에 advice랑 advisor 둘 다 주입할 수 있습니다. 오전 10시 36분
  • 그럼 advice만 주입했을 때 포인트컷은 대체 어디죠? 타켓에 있는 모든 메소드? 오전 10시 37분
  • 원래 오늘 하려던것 중에 하나긴 했지만.. 서버 부터 만진담에 하려고 했는데 버스에서 책 보다가 몇 일전 발표에서 실언을 한게 떠올라서 도무지 그냥 넘어 갈 수 가 없네요.이것 부터 공부해야겠습니다. 오전 10시 39분
  • 흠냐.. 기선 씨네마로 AOP 공부하기~ 흐흐흐 오후 1시 6분
  • 아침에 궁금했던건 해결 했으니 원래 하려던 서버를 만져야 겠구나.ㅠ..ㅠ 오후 1시 6분
  • 헐..서버 ssh에 접속이 안되네;; 그럼 작업을 어떻게 하지?? 밥먹고 하라는 뜻인가.. 오후 1시 13분
  • 수업 끝! 나이스.. 오늘은 간만에 운동 하러 가야겠습니다. 오후 5시 55분
  • 오늘은 일찍 잡니다. 눈이 마구 감겨요. ㅠ.ㅠ 오후 11시 16분

이 글은 whiteship님의 미투데이 2007년 3월 30일 내용입니다.

이번 주 나의 시간 측정


[#M_ more.. | less.. | 7 : 20 -> 기상, 씻기 -> 7 : 30
7 : 30 -> 코딩(매쉬업) -> 7 : 45
7 : 45 -> 아침밥 -> 8 : 01
8 : 01 -> 등교(AOP) -> 9 : 16
9 : 16 -> 잡일(돈계산) -> 9 : 33
9 : 33 -> 코딩(매쉬업) -> 10 : 03
10 : 03 -> 교수님과 스터디 -> 11 : 40
11 : 40 -> 점심 -> 12 : 35
12 : 36 -> 코딩(매쉬업) -> 1 : 30
1 : 30 -> 수업중 코딩(매쉬업) -> 4 : 10
4 : 10 -> 스터디(JEDI) -> 5 : 40
5 : 40 -> 잡일 -> 6 : 00
6 : 00 -> 코딩(매쉬업) -> 9 :00
9 : 00 -> 블로깅 -> 9 : 45
9 : 45 -> 디버깅 -> 10 : 40
10 : 40 -> 하교(AOP) -> 11 : 33
11 : 33 -> 디버깅 -> 1 : 00_M#]화
[#M_ more.. | less.. | 7 : 40 -> 기상 -> 7 : 45
7 : 45 -> 아침밥 -> 8 : 00
8 : 00 -> 디버깅 -> 9 : 06
9 : 06 -> 등교(AOP) -> 10 : 13
10 : 13 -> 공부(AOP) -> 10 : 46
10 : 46 -> 스터디(JEDI) -> 11 : 54
11 : 54 -> 디버깅 -> 1 : 30
1 : 30 -> 점심 -> 2 : 00
2 : 00 -> 디버깅 -> 4 : 30
4 : 30 -> 블로깅 -> 5 : 00
5 : 00 -> 공부(AOP) -> 6 : 48
6 : 48 -> 블로깅 -> 7 : 10
7 : 10 -> 하교(AOP) -> 8 : 20
8 : 20 -> 운동 -> 9 : 40
9 : 40 -> 코딩(Classic Mania) -> 11 : 00
11 : 00 -> 채팅 -> 11 : 40
11 : 40 -> 공부(AOP) -> 2 : 00_M#]수
[#M_ more.. | less.. | 7 : 30 -> 기상, 아침밥 -> 7 : 46
7 : 46 -> 공부(AOP) -> 10 : 30
10 : 30 -> 스터디(JEDI) -> 10 : 45
10 : 45 -> 공부(AOP) -> 11 : 30
11 : 30 -> 코딩(매쉬업) -> 1 : 00
1 : 00 -> 데이트 -> 12 : 00
12 : 00 -> PPT(AOP) -> 12 : 45
12 : 45 -> 블로깅 -> 1 : 05
1 : 05 -> 코딩(매쉬업) -> 1 : 26
1 : 26 -> 블로깅 -> 1 : 49_M#]목
[#M_ more.. | less.. | 8 : 00 -> 기상 -> 8 : 20
8 : 20 -> 등교(AOP) -> 9 : 20
9 : 20 -> 블로깅 -> 9 : 35
9 : 35 -> 코딩(매쉬업) -> 1 : 30
1 : 30 -> 점심 -> 2 : 15
2 : 15 -> 블로깅 -> 3 : 30
3 : 30 -> 스터디(JEDI) -> 3 : 45
3 : 45 -> 코딩(Classic Mania) -> 4 : 30
4 : 30 -> 수업 -> 5 : 42
5 : 42 -> 코딩(Classic Maina) -> 6 : 20
6 : 20 -> 수업 -> 8 : 22
8 : 22 -> 코딩(매쉬업) -> 10 : 00
10 : 00 -> 하교(AOP) -> 11 : 05
11 : 05 -> 블로깅 -> 11 : 40
11 : 40 -> 스터디(JEDI) -> 1 : 00_M#]금
[#M_ more.. | less.. | 8 : 30 -> 기상 -> 8 : 40
8 : 40 -> 아침밥 -> 9 : 00
9 : 00 -> 블로깅 -> 9 : 30
9 : 30 -> 등교(AOP) -> 10 : 30
10 : 30 -> 공부(AOP) -> 1 : 10
1 : 10 -> 블로깅 -> 1 : 30
1 : 30 -> 공부(AOP) -> 2 : 06
2 : 06 -> 점심밥 -> 2 : 50
2 : 50 -> 공부(AOP) -> 4 : 00
4 : 00 -> 수업 – > 5 : 35
5 : 35 -> 블로깅 -> 6 : 13
6 : 13 -> 배포(매쉬업) -> 7 : 30
7 : 30 -> 채팅 -> 8 : 20
8 : 20 -> 배포(매쉬업) -> 9 : 15
9 : 15 -> 하교(AOP) -> 10 : 30
10 : 30 -> 블로깅 -> 10 : 50
_M#]

종합 평가
1. 점점 아침에 잠이 많아 지고 있습니다.
2. 수업을 세 번밖에 안 들었군요.
3. 이번주에 제일 많이 한 일 “개발(코딩, 디버깅, 배포)” > “공부(AOP)” > “블로깅”
4. 저녁을 안 먹고 살고 있습니다.
5. 하루라도 블로깅을 안 하면 입안에 가시가 돋을 것 같습니다.

다음 주 계획
1. JSP, Servlet 구동 파악.
2. Spring AOP Reference 6장 공부 & 발표.
3. 운동을 좀 더 자주 하자.

희한하네요. 피로가 쌓였는지 평소 1, 2시에 자는데 벌써 눈이 감기기 시작합니다. 왜이러지;;
anyway good night!