KoreanFoodie's Study

자바 Spring FrameWork #2 : IoC, AOP(Pointcut, Aspect), 어드바이스 본문

Tutorials/Spring Framework

자바 Spring FrameWork #2 : IoC, AOP(Pointcut, Aspect), 어드바이스

GoldGiver 2021. 11. 23. 16:56

Spring Framework 명강사이신 채규태님의 강좌를 듣고 핵심 용어들을 정리한 글입니다.


IoC를 이용한 비즈니스 컴포넌트 개발 : 4개의 자바 파일

1. VO(Value Object) 클래스 작성

VO(Value Object) 클래스는 레이어와 레이어 사이에서 관련된 데이터를 한꺼번에 주고받을 목적으로 사용하는 클래스.

VO 클래스는 데이터베이스에 생성되어 있는 테이블의 데이터를 매핑하기 위해서 사용한다.

 

2. DAO(Data Access Object) 클래스

SQL 명령어들

 

3. Service 인터페이스

 

4. Service 구현 클래스

  • @Service, @Repository, @Controller 어노테이션

@Component를 목적에 따라 나눔 (클래스별로 @Repository, @Service, @Data)



 

AOP(Aspect Oriented Programming)

IoC가 결합도와 관련된 것이라면, AOP는 응집도를 높이기 위해 사용.

관심분리 : 횡단관심(Crossing Concerns), 핵심 관심(Core Concerns)

제일 중요한 것은 Aspect이다! 그리고 Aspect는 Pointcut과 Advice로 나뉜다.

 

1. 조인 포인트(Joinpoint)

  • 클라이언트가 시스템을 사용하면서 호출하는 모든 비즈니스 메소드

 

2. 포인트컷(Pointcut)

필터링된 조인포인트(비즈니스 메서드).

중요한 것은 반드시 포인트컷으로 지정된 메소드가 호출되어야지, 조인포인트에 해당하는 메소드가 호출될 때는 아무런 동작이 이루어지지 않는다는 것이다.

포인트컷은 <aop:pointcut> 엘리멘트로 유일한 문자열로 선언한다. 중요한 것은 expression 속성인데, 이 속성 값을 어떻게 설정하느냐에 따라 필터링 되는 메소드가 달라진다.

 

3. 어드바이스(Advice)

횡단 관심에 해당하는 공통 기능의 코드 자체를 의미하며, 독립된 클래스의 메소드로 작성된다.

 

4. 위빙(Weaving)

포인트컷으로 지정한 핵심 관심 메소드가 호출될 때, 어드바이스에 해당하는 횡단관심 메소드가 삽입되는 과정을 의미.

 

5. 애스팩트(Aspect) or 어드바이저(Advisor)

애스팩트는 포인트컷과 어드바이스의 결합으로서, 어떤 포인트컷 메소드에 대해서 어떤 어드바이스 메소드를 실행할지 결정한다.

앞에서 확인했던 위빙이 동작하기 위해서는 반드시 애스팩트 설정이 반드시 필요하다.

 

 

 어드바이스 동작 시점

1. After Returning 어드바이스

After와는 다르게, 메소드에 argument를 전달해 줄 수 있다. 또한, 메소드가 리턴한 데이터를 받아서 동작하므로, 예를 들어 사후 처리 기능에서 로그인 성공한 사용자의 권한을 체크할 수 있다.

 

2. After Throwing 어드바이스

포인트컷으로 지정한 비즈니스 메소드가 실행되는 도중에 예외(Exception)이 발행한 경우에 동작하는 어드바이스이다.

 

3. Around 어드바이스

하나의 어드바이스가 비즈니스 메소드 실행 전과 후에 모두 동작하여 로직을 처리하는 경우

 

 

Advice 매개변수

스프링에서는 JoinPoint 인터페이스를 이용해 비즈니스 메소드에 관한 정보를 알 수 있게 도와준다.

Around 어드바이스 메소드를 구현할 때 사용한 ProceedingJoinPoint 인터페이스는 JoinPoint를 상속했다. 따라서 JoinPoint가 가진 모든 메소드를 지원하며, proceed 메소드를 추가했다고 보면 된다.

 

Before, After Returning, After Throwing, After 어드바이스에서는 JoinPoint를 사용해야 하고, 유일하게 Around 어드바이스에서만 ProceedingJoinPoint를 매개변수로 사용해야 한다. 이는 Around 어드바이스가 proceed 메소드를 필요로 하기 때문이다. 그리고 JoinPoint와 ProceedingJoinPoint 모두 반드시 첫 번째 매개변수로 선언되어야 한다.

 

 

어노테이션 기반의 AOP 설정

스프링 AOP도 IoC와 마찬가지로 어노테이션 설정을 지원한다.

 

1. <aop:aspectj-autoproxy>

AOP를 어노테이션으로 설정하려면 가장 먼저 스프링 설정 파일에 <aop:aspectj-autoproxy> 엘리먼트를 선언해야 한다. 이는 IoC에서 <context:component-scan ... > 과 비슷한 역할을 한다.

 

2. 포인트컷 설정

어노테이션 설정으로 포인트컷을 설정할 때는 @Pointcut을 사용한다.

 

3. 어드바이스 설정

어드바이스도 마찬가지로, XML에서 있는 내용을 Annotation으로 변환해주기만 하면 된다.

다음은 동작 시점과 관련된 어노테이션이다.

 

 

스프링 JDBC

JDBC를 이용하여 DB 연동 프로그램을 개발하면 DB에 비종속적인 DB 연동 로직을 구현할 수 있다.

 

JdbcTemplate 클래스

JdbcTemplate은 JDBC의 반복적인 코드를 제거하기 위해 제공하는 클래스다. 따라서 DAO 클래스에서는 JdbcTemplate 클래스가 제공하는 템플릿 메소드를 호출하여 DB 연동을 간단하게 처리할 수 있다.

 

 

Spring JDBC 설정

JdbcTemplate 객체가 사용할 DataSource를 <bean> 등록하여 스프링 컨테이너가 사용하도록 해야 한다.

 

 

DAO 클래스 구현하기

이제 JdbcTemplate 객체를 이용하여 DAO 클래스만 구현하면 된다.

 

1. DAO 클래스를 구현하는 첫 번째 방법 (안씀)

JdbcDaoSupport 클래스를 상속하는 방법이다. BoardDAOSpring 클래스가 늘어나면 답이 없음.

 

2. DAO 클래스를 구현하는 두 번째 방법

DAO 클래스에서 JdbcTemplate 객체를 얻는 두 번째 방법은 JdbcTemplate 클래스를 <bean> 등록하고, 의존성 주입으로 처리하는 것이다. 일반적으로 이 방법을 사용한다. 먼저 스프링 설정 파일에 JdbcTemplate 클래스를 <bean> 등록한다. 


 

 

 

 

Comments