관리 메뉴

공부한것들을 정리하는 블로그 입니다.

4. 스프링 AOP : log4j 설정 본문

(2019) 사이드 프로젝트/BoardWeb(게시판-MVC1,MVC2,스프링MVC)

4. 스프링 AOP : log4j 설정

호 두 2019. 6. 14. 17:57
반응형

비즈니스 컴포넌트 개발에서 가장 중요한 두 가지 원칙은 낮은 결합도와 높은 응집도를 유지하는 것입니다. 스프링의 의존성 주입(Dependency Injection)을 이용하면 비즈니스 컴포넌트를 구성하는 객체들의 결합도를 떨어뜨릴 수 있어서 의존관계를 쉽게 변경할 수 있습니다. 스프링의 IoC가 결합도와 관련된 기능이라면, AOP(Aspect Oriented Programming)는 응집도와 관련된 기능이라 할 수 있습니다.

 

AOP는 관심분리를 통해 메소드마다 공통으로 등장하는 로깅이나 예외, 트랜잭션 처리 같은 횡단 관심에 해당하는 공통 코드를 독립적인 모듈로 분리해냄으로써 코드 분석과 유지보수를 쉽게 만들어줍니다.

 

관심분리 = 횡단관심 + 핵심관심

핵심관심 : 사용자의 요청에 따라 실제로 수행되는 핵심 비즈니스 로직

 

OOP(객체지향프로그래밍)는 구조상 위와같은 공통코드의 분리가 완벽하게 이루어지기 힘듭니다.

 

 

 

이번 글에서는 스프링의 AOP를 이용해서 핵심관심과 횡단관심을 분리해보겠습니다. 이 실습을 통해 기존의 BoardServiceImpl 소스들과는 무관하게 작동하는 LogAdvice나 Log4jAdvice 클래스의 메소드를 구현 가능합니다.

 

1. pom.xml 에서 AOP 라이브러리 추가

2. LogAdvice.java 작성

3. applicationContext.xml 에서 네임스페이스 추가 및 AOP 설정

4. BoardServiceClient를 이용해 테스트 실행

 

 

 

 

 

1. pom.xml 에 AOP 라이브러리 추가

 

 

 

2. LogAdvice.java 작성

 

package com.springbook.biz.common;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Service;


@Service
@Aspect
public class LogAdvice {

	@Pointcut("execution(* com.springbook.biz..*Impl.*(..))")
	public void allPointcut() {}

	@Pointcut("execution(* com.springbook.biz..*Impl.get*(..))")
	public void getPointcut() {}

	@Before("allPointcut()")
	public void printLog(JoinPoint jp) {
		System.out.println("[공통 로그] 비즈니스 로직 수행 전 동작");
	}
}

 

 

3. applicationContext.xml 에서 네임스페이스 추가 및 AOP 설정

 

 

 

4. BoardServiceClient를 이용해 테스트 실행

 

BoardServiceClient를 이용해 테스트 해본 결과, 기존의 BoardServiceImpl 소스들에 전혀 수정을 가하지 않고도

LogAdvice가 동작하는 모습을 확인 할 수 있습니다.

 

 

반응형
Comments