Spring (53) 썸네일형 리스트형 [Spring] 스프링 AOP - 포인트컷 목차포인트컷 지시자예제 만들기execution1execution2withinargs@target, @within@annotation, @argsbean매개변수 전달this, target 포인트컷 지시자포인트컷 표현식을 포함한 포인트컷에 대해서 자세히 알아보자. 애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다.포인트컷 표현식은 AspectJ pointcut expression 즉, 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다. @Pointcut("execution(* hello.aop.order..*(..))") 포인트컷 지시자포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다.줄여서 PCD라 한다. 포인트컷 지.. [Spring] 스프링 AOP 구현 목차프로젝트 생성예제 프로젝트 만들기스프링 AOP 구현1 - 시작스프링 AOP 구현2 - 포인트컷 분리스프링 AOP 구현3 - 어드바이스 추가스프링 AOP 구현4 - 포인트컷 참조스프링 AOP 구현5 - 어드바이스 순서스프링 AOP 구현6 - 어드바이스 종류 프로젝트 생성 AOP 기능을 사용하기 위해서 다음을 build.gradle 에 직접 추가implementation 'org.springframework.boot:spring-boot-starter-aop'build.gradle 에 테스트 코드에서도 lombok을 사용할 수 있도록 다음 코드를 추가//테스트에서 lombok 사용testCompileOnly 'org.projectlombok:lombok'testAnnotationProcessor 'or.. [Spring] 스프링 AOP 개념 목차AOP 소개 - 핵심 기능과 부가 기능 AOP 소개 - AspectAOP 적용 방식 AOP 용어 정리 AOP 소개 - 핵심 기능과 부가 기능애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다.핵심 기능은 해당 객체가 제공하는 고유의 기능이다.예를 들어서 OrderService 의 핵심 기능은 주문 로직이다.부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 예를 들어서 로그 추적 기능은 어떤 핵심 기능이 호출되었는지 로그를 남기기 위해 사용한다. 그러니까 부가 기능은 이름 그대로 핵심 기능을 보조하기 위해 존재한다. 주문 로직을 실행하기 직전에 로그 추.. [Spring] @Aspect 프록시 목차@Aspect 프록시 - 적용 @Aspect 프록시 - 설명 @Aspect 프록시 - 적용스프링 애플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성되어 있는 어드바이저( Advisor )를 만들어서 스프링 빈으로 등록하면 된다. 그러면 나머지는 자동 프록시 생성기가 모두 자동으로 처리해준다. 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고, 스프링 빈들에 자동으로 프록시를 적용해준다. (포인트컷이 매칭되는 경우에 프록시를 생성한다.)스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.지금까지 어드바이저를 직접 만들었던 부분을 @Aspect 애노테이션을 사용해서 만들어보자.참고@Aspect 는 관점 지향 프로.. [Spring] 빈 후처리기 목차빈 후처리기 - 소개빈 후처리기 - 예제 코드1빈 후처리기 - 예제 코드2빈 후처리기 - 적용스프링이 제공하는 빈 후처리기1스프링이 제공하는 빈 후처리기2하나의 프록시, 여러 Advisor 적용 빈 후처리기 - 소개 @Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그리고 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 된다.빈 후처리기 - BeanPostProcessor 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용하면 된다. 빈 포스트 프로세서( BeanPostProcessor )는 번역하면 빈 후처리기인데, 이름 그대로 빈.. [Spring] 스프링이 지원하는 프록시(ProxyFactory) 목차프록시 팩토리 - 소개프록시 팩토리 - 예제 코드1프록시 팩토리 - 예제 코드2포인트컷, 어드바이스, 어드바이저 - 소개예제 코드1 - 어드바이저예제 코드2 - 직접 만든 포인트컷예제 코드3 - 스프링이 제공하는 포인트컷예제 코드4 - 여러 어드바이저 함께 적용프록시 팩토리 - 적용 프록시 팩토리 - 소개앞서 마지막에 설명했던 동적 프록시를 사용할 때 문제점을 다시 확인해보자.문제점인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?두 기술을 함께 사용할 때 부가 기능을 제공하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler 와 CGLIB가 제공하는 MethodInterceptor 를 각각 중복으로 만들어서 관리.. [Spring] 동적 프록시 기술(JDK 동적 프록시, CGLIB) 목차리플렉션JDK 동적 프록시 - 소개JDK 동적 프록시 - 예제 코드JDK 동적 프록시 - 적용1JDK 동적 프록시 - 적용2CGLIB - 소개CGLIB - 예제 코드 리플렉션지금까지 프록시를 사용해서 기존 코드를 변경하지 않고, 로그 추적기라는 부가 기능을 적용할 수 있었다. 그런데 문제는 대상 클래스 수 만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 점이다. 로그 추적을 위한 프록시 클래스들의 소스코드는 거의 같은 모양을 하고 있다.자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있다. 쉽게 이야기해서 프록시 클래스를 지금처럼 계속 만들지 않아도 된다는 것이다. 프록시를 적용할 코드를 하나만 만들.. [Spring] Thread Local - 쓰레드 로컬 목차필드 동기화 - 개발필드 동기화 - 적용필드 동기화 - 동시성 문제동시성 문제 - 예제 코드ThreadLocal - 소개ThreadLocal - 예제 코드쓰레드 로컬 동기화 - 개발쓰레드 로컬 동기화 - 적용쓰레드 로컬 - 주의사항 필드 동기화 - 개발앞서 로그 추적기를 만들면서 다음 로그를 출력할 때 트랜잭션ID 와 level 을 동기화 하는 문제가 있었다. 이 문제를 해결하기 위해 TraceId 를 파라미터로 넘기도록 구현했다. 이렇게 해서 동기화는 성공했지만, 로그를 출력하는 모든 메서드에 TraceId 파라미터를 추가해야 하는 문제가 발생했다.TraceId 를 파라미터로 넘기지 않고 이 문제를 해결할 수 있는 방법은 없을까?이런 문제를 해결할 목적으로 새로운 로그 추적기를 만들어보자.이제 프로.. [Spring DB] 스프링 트랜잭션 전파 - 활용 목차트랜잭션 전파 활용1 - 예제 프로젝트트랜잭션 전파 활용2 - 커밋, 롤백 트랜잭션 전파 활용3 - 단일 트랜잭션 트랜잭션 전파 활용4 - 전파 커밋 트랜잭션 전파 활용5 - 전파 롤백 트랜잭션 전파 활용6 - 복구 REQUIRED 트랜잭션 전파 활용7 - 복구 REQUIRES_NEW 트랜잭션 전파 활용1 - 예제 프로젝트 시작비즈니스 요구사항회원을 등록하고 조회한다. 회원에 대한 변경 이력을 추적할 수 있도록 회원 데이터가 변경될 때 변경 이력을 DB LOG 테이블에 남겨야 한다. 여기서는 예제를 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다. Member@Entity@Setter@Getterpublic class Member { @Id @GeneratedValue pri.. [Spring DB] 스프링 트랜잭션 전파 목차스프링 트랜잭션 전파1 - 커밋, 롤백 스프링 트랜잭션 전파2 - 트랜잭션 두 번 사용 스프링 트랜잭션 전파3 - 전파 기본 스프링 트랜잭션 전파4 - 전파 예제 스프링 트랜잭션 전파5 - 외부 롤백 스프링 트랜잭션 전파6 - 내부 롤백 스프링 트랜잭션 전파7 - REQUIRES_NEW 스프링 트랜잭션 전파8 - 다양한 전파 옵션 스프링 트랜잭션 전파1 - 커밋, 롤백트랜잭션이 둘 이상 있을 때 어떻게 동작하는지 자세히 알아보고, 스프링이 제공하는 트랜잭션 전파(propagation)라는 개념도 알아보자. BasicTxTest@Slf4j@SpringBootTestpublic class BasicTxTest { @Autowired PlatformTransactionManager txMana.. 이전 1 2 3 4 5 6 다음