본문 바로가기
반응형

Java31

[스프링] AOP 적용을 위해 @Aspect를 사용해보자 스프링을 사용하는 백엔드 개발자로서 AOP는 놓칠 수 없는 중요한 기능이다. @Aspect를 통해서 AOP를 편리하게 적용하는 방법 및 어드바이스 종류별 특징과 사용법을 알아보자. @Aspect 기본 사용법 @Aspect public class AspectV1 { @Around("execution(* hello.aop.order..*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable{ log.info("[log] {}", joinPoint.getSignature()); // joinpoint 시그니처 return joinPoint.proceed(); } } 클래스에 @Aspect 애노테이션을 붙이고, 이 클래스를 스프링 .. 2024. 3. 14.
[스프링] 관점 지향 프로그래밍 AOP란 무엇일까 관점 지향 프로그래밍 AOP는 부가 기능인 횡단 관심사를 핵심 로직으로부터 분리하여 공통적으로 처리하기 위한 방법론이다. AOP의 기본적인 개념과 관련 용어에 대해 알아보자. AOP의 기본 개념 애플리케이션 로직은 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능 - 해당 객체가 제공하는 고유의 기능이다. 부가 기능 - 핵심 기능을 보조하기 위해 핵심 기능과 함께 사용되는 기능이다. 부가 기능은 보통 여러 클래스에 걸쳐서 동일하게 사용된다. 예를 들어 모든 애플리케이션 호출을 로깅하는 요구사항이 있다면 각 클래스마다 로그 추적 로직을 넣게 될 것이다. 이렇게 하나의 부가 기능이 여러 곳에 동일하게 사용되는 경우 cross-cuttion concerns(횡단 관심사)라고 한다. 부가 기능을 적용하기 위.. 2024. 3. 14.
@Transactional을 통한 스프링 트랜잭션의 전파 트랜잭션이 진행 중인 상황에서 추가로 트랜잭션을 수행하는 경우에 어떻게 동작해야 하는지 결정하는 것을 트랜잭션 전파라고 한다. 스프링에서의 트랜잭션 전파 과정에 대해 알아보자. 물리 트랜잭션과 논리 트랜잭션 트랜잭션을 각각 사용하는 것이 아니라, 트랜잭션이 이미 진행 중인데 여기에 추가로 트랜잭션을 수행한다면 어떻게 될까? 이 경우에 어떻게 동작해야 하는지 결정하는 것을 트랜잭션 전파(propagation)라고 한다. 스프링은 이해를 위해 물리 트랜잭션과 논리 트랜잭션이라는 개념을 나누었다. 물리 트랜잭션: 실제 DB에 적용되는 트랜잭션. 실제 커넥션을 통해 트랜잭션을 시작하고 커밋/롤백하는 단위이다. 논리 트랜잭션: 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위이다. 원칙 - 모든 논리 트랜잭션이 커.. 2024. 2. 20.
@Transactional과 스프링 트랜잭션 AOP 스프링에서는 @Transactional 애노테이션을 클래스나 메서드 단위에 붙여 DB 트랜잭션을 적용할 수 있다. 이 애노테이션의 원리와 작동 방식 및 사용 시 주의사항을 알아보자. 트랜잭션 적용 트랜잭션 적용 확인하기 선언적 트랜잭션 관리 방식으로 클래스나 메서드에 @Transactional 애노테이션을 붙이면 매우 편리하게 트랜잭션을 적용할 수 있다. 그러나 이 기능을 사용하면 트랜잭션 관련 코드가 눈에 보이지 않고, 심지어 AOP 기반으로 동작하기 때문에 실제로 적용되고 있는지 확인하기 어렵다. 클래스나 메서드에 @Transactional을 사용하면 해당 객체는 트랜잭션 AOP의 적용 대상이 되어 실제 객체 대신 프록시 객체가 스프링 빈에 등록된다. 클라이언트는 실제 객체가 아닌 프록시 객체를 주입.. 2024. 2. 20.
반응형