728x90
반응형
SMALL

Spring Advanced 11

AOP (Part. 3) - 포인트컷

포인트컷 지시자에 대해서 자세히 알아보자. 에스팩트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다. 예를 들면 이렇다. @Pointcut("execution(* hello.aop.order..*(..))") 포인트컷 표현식은 'execution'과 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라고도 한다. 포인트컷 지시자 종류 포인트컷 지시자의 종류는 다음과 같다. execution: 메서드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용한다. within: 특정 타입(클래스, 인터페이스) 내의 조인 포인트를 매칭한다. args: 인자가 주어진 타입의 인스턴스인 조인 포인트 this: 스프링 빈 객체(스프링 AOP 프록시)를 대상으로..

Spring Advanced 2024.01.02

AOP (Part.2)

이번 포스팅에서는 저번 포스팅인 https://cwchoiit.tistory.com/85 이 Part.1 에 이어 스프링 AOP를 직접 만들어보자. AOP(Aspect Oriented Programming) 이제 드디어 AOP에 대해 진지하게 알아보는 시간을 가져보자. 우선 AOP란 번역 하면 관점 지향 프로그래밍이다. 여기서 관점이란 무엇일까? 관점은 애플리케이션의 핵심적인 관점과 부가적인 관 cwchoiit.tistory.com 라이브러리 추가 우선 스프링 AOP를 사용하려면 다음과 같은 라이브러리가 필요하다. build.gradle implementation 'org.springframework.boot:spring-boot-starter-aop' 이 라이브러리를 추가한 후에 다운된 외부 라이브러리..

Spring Advanced 2024.01.02

AOP(Aspect Oriented Programming)

이제 드디어 AOP에 대해 진지하게 알아보는 시간을 가져보자. 우선 AOP란 번역 하면 관점 지향 프로그래밍이다. 여기서 관점이란 무엇일까? 관점은 애플리케이션의 핵심적인 관점과 부가적인 관점으로 분류할 수 있다. 애플리케이션의 핵심적인 관점이라고 하면 비즈니스 로직이다. 그리고 부가적인 관점은 애플리케이션의 비즈니스 로직을 수행하면서 있으면 도움이 되는 로직이다. 예를 들면 비즈니스 로직을 처리하는 시간에 대한 로그 출력이나, 데이터베이스와의 트랜잭션 기능. 이러한 부가 기능은 단독으로 사용되지 않고 핵심 기능과 함께 사용된다. 즉, 이름 그대로 핵심 기능을 보조하기 위해 존재한다고 볼 수 있다. 핵심 로직을 수행하기 직전 부가 로직이 수행되어야 하면 핵심 기능 로직과 부가 기능 로직이 하나의 객체 안..

Spring Advanced 2023.12.29

AOP와 @Aspect, @Around

AOP(Aspect Oriented Programming)는 번역하면 관점 지향 프로그래밍으로 해석할 수 있고, 이 관점 지향 프로그래밍이란 애플리케이션에서 핵심적인 관점과 부가적인 관점을 분리하여 각각을 모듈화하여 개발하는 방법이다. 그리고 이런 관점 지향 프로그래밍을 위해 지금까지 프록시를 만들고 프록시를 어떻게 쓰는지 어떤 의도를 가지고 프록시 패턴과 데코레이터 패턴으로 나뉘어지는지 등 공부를 했다. 그에 대한 내용은 이전 포스팅을 참고하자. 스프링에서는 어드바이저를 스프링 빈으로 등록만 하면 자동으로 스프링이 해당 어드바이저의 포인트컷을 가져다가 프록시가 적용되어야 할 스프링 빈에 알아서 적용을 해주는데 이 어드바이저를 스프링 빈으로 등록하는 과정보다 더 간단하고 더 깔끔하게 프록시를 적용할 수 ..

Spring Advanced 2023.12.29

빈 후처리기(BeanPostProcessor)

스프링에서 '@Bean'이나 컴포넌트 스캔으로 스프링 빈을 등록하면 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그리고 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용한다. 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용한다. BeanPostProcessor는 번역하면 빈 후처리기로, 이름 그대로 빈을 생성한 후에 무언가를 처리하는 용도로 사용한다. 빈 후처리기는 강력하다. 객체를 조작하는게 가능하고 완전히 다른 객체로 바꿔치기 하는 것도 가능하다. 빈 후처리기 과정을 자세히 살펴보자. 빈 후처리기 과정 스프링 빈 등록 과정 -> 빈 후처리기 1. 생성: 스프링 빈 대상이 되는 객체를 생성한다 (..

Spring Advanced 2023.12.27

Advisor, Advice, Pointcut

스프링에서 프록시를 만들고 AOP 관련 개념을 접하면 한번은 듣는 단어인 Advisor, Advice, Pointcut에 대해 정리하고자 한다. 우선 그 전에 다음 포스팅을 참고하면 좋을 것 같다. https://cwchoiit.tistory.com/80 스프링이 지원하는 프록시 https://cwchoiit.tistory.com/79 Proxy/Decorator Pattern 2 (동적 프록시) https://cwchoiit.tistory.com/78 Proxy/Decorator Pattern 이제 스프링에서 굉장히 자주 사용되는 프록시와 데코레이터 패턴을 정리해 보자. 이 프록시 cwchoiit.tistory.com 위 포스팅에서 스프링이 ProxyFactory를 제공해주고 이 프록시 팩토리로 동적..

Spring Advanced 2023.12.15

스프링이 지원하는 ProxyFactory

https://cwchoiit.tistory.com/79 Proxy/Decorator Pattern 2 (동적 프록시) https://cwchoiit.tistory.com/78 Proxy/Decorator Pattern 이제 스프링에서 굉장히 자주 사용되는 프록시와 데코레이터 패턴을 정리해 보자. 이 프록시 패턴을 이해하니 스프링이 어떻게 내가 만들어서 컴포넌 cwchoiit.tistory.com https://cwchoiit.tistory.com/78 Proxy/Decorator Pattern 이제 스프링에서 굉장히 자주 사용되는 프록시와 데코레이터 패턴을 정리해 보자. 이 프록시 패턴을 이해하니 스프링이 어떻게 내가 만들어서 컴포넌트 스캔 대상에 넣은 클래스를 프록시로 주 cwchoiit.tistor..

Spring Advanced 2023.12.14

Proxy/Decorator Pattern 2 (동적 프록시)

https://cwchoiit.tistory.com/78 Proxy/Decorator Pattern 이제 스프링에서 굉장히 자주 사용되는 프록시와 데코레이터 패턴을 정리해 보자. 이 프록시 패턴을 이해하니 스프링이 어떻게 내가 만들어서 컴포넌트 스캔 대상에 넣은 클래스를 프록시로 주 cwchoiit.tistory.com 이 전 포스팅에서 프록시 패턴을 공부했는데, 문제가 여전히 있었다. 문제는 프록시 클래스를 일일이 다 하나씩 만들어 줘야 하는것. 다시 말해 프록시로 만들어 줄 클래스가 100개면 프록시 클래스도 100개가 있어야 한다는 것. 이 문제를 해결하기 위해 동적 프록시를 만들어서 단 하나의 프록시 클래스로 여러개의 클래스를 프록시화 할 수 있다. JDK 동적 프록시 (Reflection) JA..

Spring Advanced 2023.12.14

Proxy/Decorator Pattern

이제 스프링에서 굉장히 자주 사용되는 프록시와 데코레이터 패턴을 정리해 보자. 이 프록시 패턴을 이해하니 스프링이 어떻게 내가 만들어서 컴포넌트 스캔 대상에 넣은 클래스를 프록시로 주입하는지 알게 됐다. 우선, 프록시(Proxy)가 무엇인가? 프록시(Proxy)란? 프록시는 정말 자주 사용되는 용어이다. 다음 그림을 보자. 클라이언트와 서버가 있다. 클라이언트는 꼭 고객이나 사용자를 의미하는 게 아니고 서버는 꼭 어떤 웹 서버를 의미하는 것이 아니라 넓게 보아 클라이언트는 요청을 하는 쪽, 서버는 요청을 처리하는 쪽이다. 이 개념을 컴퓨터 네트워크에 도입하면 클라이언트는 웹 브라우저가 되는 것이고 서버는 웹 서버가 되는 것이다. 일반적으로 클라이언트와 서버 간 호출에 있어 클라이언트가 서버에 직접 호출을..

Spring Advanced 2023.12.13

Strategy Pattern

템플릿 메서드 패턴에 이어 '전략 패턴(Strategy Pattern)'에 대해 공부한 것을 정리하고자 한다. 이 또한 공통 부분을 한 곳에 묶어 중복 코드를 제거하고 변경되는 부분만을 유틸리티성을 부여하여 그때그때 필요한 내용을 채워넣을 수 있게 해주는 패턴이라고 보면 된다. 전략 패턴이란 말이 좀 한번에 와닿지 않을 수 있는데 내가 이해한 전략이란건 이 공통 로직을 제외한 변경되는 로직을 처리하는 그 방법을 말한다. 즉, 이 변경되는 로직을 전략이라 말하고 그 전략을 전달받아 실행하는 코드가 있는 것이라고 생각하면 된다. 말보다 코드 한 줄이 더 와닿기 때문에 바로 코드로 넘어가보자. package com.example.advanced.trace.strategy.code.strategy; public..

Spring Advanced 2023.12.12
728x90
반응형
LIST