Spring/Spring DI와 AOP

[Spring AOP] AOP의 개념과 사용

2022. 3. 7. 15:50
목차
  1. 1.AOP(Aspect Oriented Programming)란?
  2. 2.공통 코드의 분리
  3. 3.자동 코드추가의 위치
  4. 4.AOP와 관련 용어

1.AOP(Aspect Oriented Programming)란?

 AOP의 약자를 풀어쓰면 관점 지향 프로그래밍이다. 관점 지향 프로그래밍? 어려운 말이다. 간단히 말하면 관점을 나눠서 프로그램을 짜는 방식이라고 말할 수 있다. AOP는 다른 말로 부가기능(advice)을 동적으로 추가해주는 기술이다. 이 말도 어렵다 부가기능은 무엇이고 동적이란 말은 무엇인가? 부가기능은 핵심기능의 반댓말이다. 그리고 동적이란 말은 실행중이라는 뜻이다. 즉 핵심기능이 아닌 기능을 실행중에 추가하는 기술이다. 하지만 그래도 어렵다. 마지막으로 한 줄로 AOP를 요약하면 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가하는 기술이다. 코드를 통해 AOP의 개념을 조금 더 살펴보자.

 

 

2.공통 코드의 분리

 

 MyClass 클래스의 각 메서드 시작과 끝에 '[before]{'와 '}[after]'를 추가한다고 가정해보자. 코드를 추가하면 오른쪽 같이 작성되는데 보는 바와같이 코드가 중복된다. 코드도 낭비되고 보기에도 복잡해진다. 효율적으로 하기위해 두개의 관심사 ('[before]{'와 '}[after]')를 분리해보자. 

 

 

 관심사 즉, 핵심기능과 부가기능을 중심으로 코드를 분리하니 훨씬 보기도 편하고 코드가 간편해졌다. 이처럼 AOP 관점지향형 프로그래밍은 한곳에 몰려있는 복잡한 코드를 부가기능, 핵심기능으로 나눠 분리한다. 이를 통해 코드를 보다 간편하게하고 보기 쉽게한다. 

 

3.자동 코드추가의 위치

 

 

 자동 코드의 추가를 하는 위치는 코드의 본문 내용이 아닌 앞(Before)와 뒤 (After)다. 앞뒤 모두(Around) 사용할 수도 있다

 

 

4.AOP와 관련 용어

 

 

AOP용어 관계 그림

 

 

용어 설명
target advice가 추가될 객체
advice target에 동적으로 추가될 부가 기능(코드)
join point  advice가 추가(join)될 대상(메서드)
pointcut join point들을 정의한 패턴 예) execution(*com.fastcampus.*.*(...))
proxy target에 advice가 동적으로 추가되어 생성된 객체
weaving target에 advice를 추가해서 proxy 를 생성하는 것

 

  • Advice의 종류
종류 애너테이션 설명
around advice @Around 메서드의 시작과 끝 부분에 추가되는 부가기능
before advice @Before 메서드의 시작 부분에 추가되는 부가 기능
after advice @After 메서드의 끝 부분에 추가되는 부가 기능
after returning @AfterReturning 예외가 발생하지 않았을 때, 실행되는 부가 기능
after throwing @AfterThrowing 예외가 발생했을 때, 실행되는 부가 기능

 

  • pointcut expression

 advice가 추가될 메서드를 지정하기 위한 패턴이다.


출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)

 

'Spring > Spring DI와 AOP' 카테고리의 다른 글

[Spring DI와 AOP]@Transactional  (0) 2022.07.30
[Spring DI와 AOP] Transaction, Commit, Rollback  (0) 2022.03.14
[Spring DI와 AOP] DAO  (0) 2022.03.12
[Spring DI] BeanFactory / ApplicationContext 와 IoC / DI  (0) 2022.02.28
  1. 1.AOP(Aspect Oriented Programming)란?
  2. 2.공통 코드의 분리
  3. 3.자동 코드추가의 위치
  4. 4.AOP와 관련 용어
'Spring/Spring DI와 AOP' 카테고리의 다른 글
  • [Spring DI와 AOP]@Transactional
  • [Spring DI와 AOP] Transaction, Commit, Rollback
  • [Spring DI와 AOP] DAO
  • [Spring DI] BeanFactory / ApplicationContext 와 IoC / DI
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 자바의정석
  • 뉴렉처
  • Java
  • 에러
  • 네트워크
  • spring
  • 쿼리
  • 프로그래머스
  • 코딩
  • 자바의정석기초편
  • 객체지향
  • 배열
  • 오라클
  • 오류
  • 웹프로그래밍
  • Oracle
  • 공부
  • 개발자
  • SQL
  • 연습문제
  • db
  • 국비수업
  • 모두의네트워크
  • 백엔드
  • 자바
  • 서브쿼리
  • It
  • 백준
  • 스프링

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[Spring AOP] AOP의 개념과 사용
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.