spring69 [Spring] 스프링 AOP - 실전 예제 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 예제 만들기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 예제 준비코드를 작성해보자. ▶ ExamRepository @Repository public class ExamRepository { private static int seq = 0; /** * 5번에 한번 실패하는 요청 */ public String save(String itemId) { seq++; if (seq % 5 == 0) { throw new IllegalStateException("예외 발생"); } return "ok"; } } ▶ ExamService @Ser.. BackEnd/Spring 2022. 8. 20. [Spring] 스프링 AOP - 포인트컷 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다. @Pointcut("execution(* hello.aop.order..*(..))") 포인트컷 표현식은 AspectJ pointcut expression 즉 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다. ▶ 포인트컷 지시자 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라 한다. 1. execution - 1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 execution의 문법은 다음과 같다.. BackEnd/Spring 2022. 8. 19. [Spring] 스프링 AOP 구현 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 스프링 AOP 구현1 - 시작 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 @Aspect 를 사용해서 가장 단순한 AOP를 구현해보자. ▶ AspectV1 @Slf4j @Aspect public class AspectV1 { @Around("execution(* hello.aop.order..*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[log] {}", joinPoint.getSignature()); //join poi.. BackEnd/Spring 2022. 8. 18. [Spring] 스프링 AOP 개념 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. AOP 소개 - 핵심 기능과 부가 기능 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 1) 핵심 기능 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 OrderService 의 핵심 기능은 주문 로직이다. 2) 부가 기능 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 주문 로직을 실행하기 직전에 로그 추적 기능을 사용해야 하면, 핵심 기능인 주문 로직과 .. BackEnd/Spring 2022. 8. 17. [Spring] @Aspect AOP 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. @Aspect 프록시 - 적용 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다. ▶ 참고 @Aspect 는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이다. 스프링은 이것을 차용해서 프록시를 통한 AOP를 가능하게 한다. AOP와 AspectJ 관련된 자세한 내용은 다음에 설명한다. 지금은 프록시에 초점을 맞추자. 우선 이 애노테이션을 사용해서 스프링이 편리하게 프록시를 만들어준다고 .. BackEnd/Spring 2022. 8. 16. [Spring] 빈 후처리기 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. 스프링이 제공하는 빈 후처리기1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링이 제공하는 자동 후처리기를 사용하기 위해서는, 다음 의존성을 꼭 추가해야줘야 한다. implementation 'org.springframework.boot:spring-boot-starter-aop' 라이브러리를 추가하면 aspectjweaver 라는 aspectJ 관련 라이브러리를 등록하고, 스프링 부트가 AOP 관련 클래스를 자동으로 스프링 빈에 등록한다. ▶ (AnnotationAwareAspectJ)AutoProxyCreator 스프링 부트 자동 설정으로 .. BackEnd/Spring 2022. 8. 16. [Spring] 빈 후처리기 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 빈 후처리기 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 @Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그리고 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 된다. ▶ 빈 후처리기 - BeanPostProcessor 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용하면 된다. 1) 생성: 스프링 빈 대상이 되는 객체를 생성한다. (@Bean , 컴포넌트 스캔 모두 .. BackEnd/Spring 2022. 8. 15. [Spring] 스프링이 지원하는 프록시 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 이번 글 에서는 지난번 ProxyFactory에 이어서 포인트컷, 어드바이스, 어드바이저 에 대하여 학습해보자! 4. 포인트컷, 어드바이스, 어드바이저 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링 AOP를 공부했다면 다음과 같은 단어를 들어보았을 것이다. 포인트컷( Pointcut ) 어디에 부가 기능을 적용할지, 말지를 판단하는 필터링 로직이다. 주로 클래스와 메서드 이름으로 필터링 한다. 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것이다. 어드바이스( Advice ) 이전에 본 것 처.. BackEnd/Spring 2022. 8. 14. [Spring] 스프링이 지원하는 프록시 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 이번 시간에는 프록시 팩토리 에 대하여 학습해보자! 1. 프록시 팩토리 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 몇가지 질문을 통해 프록시 팩토리의 특징에 대하여 알아보자! 1-1) 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB을 적용하려면 어떻게 해야할까? 스프링은 동적 프록시를 통합해서 편리하게 만들어주는 프록시 팩토리( ProxyFactory )라는 기능을 제공한다. 이전에는 상황에 따라서 JDK 동적 프록시를 사용하거나, 또는 CGLIB를 사용해야 했다. 하지만 Spring의 프록시 팩토리.. BackEnd/Spring 2022. 8. 14. [Spring] 프록시 패턴과 데코레이터 패턴 예제 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 이번 시간에는 우선 예제 프로젝트부터 만들어보자! 디자인 패턴에 대한 글을 다음 게시물 부터 시작할 예정이다. 1. 예제 프로젝트 만들기 v1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 글 에서는 다음 글에서 설명할 데코레이터, 프록시 패턴을 위한 준비 예제 작업 시간이다. 설명보다는 단순 코드만 많은 점 양해 부탁 드립니다. 예제는 크게 3가지 상황으로 만든다. v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록 v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록 v3 - 컴포넌트 스캔으로 스프링 빈 자동 등록 V1 -.. BackEnd/Spring 2022. 8. 9. [Spring] 템플릿 콜백 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 템플릿 콜백 패턴 - 시작 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 지난 번 전략패턴 글에서 ContextV2 는 변하지 않는 템플릿 역할을 한다. 그리고 변하는 부분은 파라미터로 넘어온 Strategy에 해당된다. 이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback)이라 한다. 콜백 정의 프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니.. BackEnd/Spring 2022. 8. 7. [Spring] 템플릿 메서드 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 템플릿 메서드 패턴 - 예제1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간은 TemplateMethod Pattern을 적용할 예제를 만들어보자. @Slf4j public class TemplateMethodTest { @Test void templateMethodV0() { logic1(); logic2(); } private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 log.info("비즈니스 로직1 실행"); //비즈니스 로직 종료 long en.. BackEnd/Spring 2022. 8. 6. 이전 1 2 3 4 5 6 다음