@Transactional 사용시, 아래와 같은 클래스에서 àddBook메서드를 Books 클래스 내부에서 사용할 때 발생할 수 있다. (프록시를 이용한 Spring AOP에서 공통적으로 발생하는 문제)위와 같은 상황에서 addBooks메서드의 내부에서 호출하는 add
1. 템플릿 메서드 패턴 (Template Method Pattern) 템플릿 메서드 패턴은 이름 그대로 템플릿을 사용하는 방식이다. 템플릿은 기준이 되는 거대한 틀이다. 템플릿이라는 틀에 변하지 않는 부분을 몰아둔다. 그리고 일부 변하는 부분을 별도로 호출해서 해결
프록시란 클라이언트는 서버에 필요한 것을 요청하고, 서버는 클라이언트의 요청을 처리한다. 이때 클라이언트가 서버를 호출하는 방식은 2가지가 있는데 클라이언트가 서버를 직접 호출하는 방식, 클라이언트가 프록시를 통해서 서버에 간접 호출하는 방식이다. 직접 호출 방식과는
동적 프록시가 아닌 일반 프록시 사용시 단점은 대상 클래스 수만큼 프록시 클래스를 만들어야 한다는 점이다. (상황에 따라 모양이 매우 비슷한 코드가 중복될 수도 있다.)자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활
앞서 프록시 관련 예제에서 특정 빈들에 대해 Advisor를 만들어 적용하는 것을 보았다. 하지만 앞선 예제들에서는 여러 문제들이 있었다.너무 많은 설정 프록시를 직접 스프링 빈으로 등록하는 설정 파일에서 프록시 관련 설정이 지나치게 많았다. 예를 들어 스프링 빈이 1
애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능은 해당 객체가 제공하는 고유의 기능이다. (ex 주문 로직)부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. (ex 로그 추적 로직)보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용
기본 사용법 @Aspect @Around어노테이션의 값 execution..은 포인트컷이 된다. @Around어노테이션의 메서드인 doLog는 어드바이스가 된다. 참고로 스프링 AOP는 AspectJ의 문법을 차용하고 프록시 방식의 AOP 방식을 제공한다.
프록시 내부 호출 문제 스프링은 프록시 방식의 AOP를 사용한다. 프록시 사용으로 인해 나타나는 대표적인 문제 중 하나는 대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제이다. 위 예시의 모든 메서드에 스프링AOP를
소프트웨어의 지속가능한 성장더 좋은 소프트웨어 디자인을 이끌어줌 코드 커버리지 = 테스트로 실행된 코드 라인수 / 전체 코드 라인수 커버리지는 몇퍼를 만족해야하나? \- 커버리지가 60% 아래면 보통 문제가 발생할 여지가 있음 \- 60%보다 크다고해서 많