본문 바로가기
학습/Spring

[spring] 핵심2_Aspect Oriented Programming

by KKambi 2020. 3. 21.

Spring Triangle

  1. Inversion Of Control (IOC)
  2. Aspect Oriented Programming (AOP)
  3. Portable Service Abstraction (PSA)

 

흩어진 AAAA와 BBBB -> 모아놓은 AAAA와 BBBB

  • 다양한 메소드에 공통 코드가 흩어져 있을 때!
  • 일일이 수정하긴 어렵다!
  • 공통코드를 별도 클래스의 별도 메소드로 분리

 

EX) 처리시간을 재는 메소드

  1. StopWatch 인스턴스 생성
  2. stopWatch.start( );
  3. 코드
  4. stopWatch.stop( );
  5. System.out.println(stopWatch.prettyPrint( ));

 

AOP 구현1 ~ 컴파일 단계

  • A.java를 A.class로 컴파일하는 단계에서 원하는 코드를 끼워넣는다.
  • 소스에는 해당 코드가 없지만, 컴파일하면서 원하는 코드가 들어간다
  • AspectJ 사용

 

AOP 구현2 ~ 런타임 단계

  • A.class를 클래스로더가 메모리에 적재할 때 원하는 코드를 끼워넣는다.
  • 컴파일한 A.class 파일도 소스코드랑 동일하지만, 클래스 로딩 시점에 달라진다.
  • 클래스로더에 특별한 옵션을 붙여서 구현한다.
  • AspectJ 사용

 

AOP 구현3 ~ 프록시 패턴

 

Spring이 자동으로 프록시 객체 등록

  • Bean이 등록될 때, 원하는 코드가 추가된 프록시 객체를 대신 등록
  • 이 과정은 자동으로!
  • Ex) @Transactional이 붙은 객체에 대해, Proxy object를 대신 등록

 

@Transactional

  • 다수의 SQL쿼리문을 Transaction 단위로 묶음
  • SQL문 앞에서 커넥션에 Set Autocommit = false;
  • SQL문 뒤에서 Commit || Rollback
  • 트랜젝션을 위한 추가 코드가 삽입된 Proxy object를 대신 등록!

 

 

 

 

참고

인프런-예제로 배우는 스프링 입문 (백기선)

9~11강 (스프링 AOC 및 프록시 패턴)을 들으며 정리한 내용입니다.

댓글