보라코딩

AOP, 프록시, Transactional 본문

코딩/Spring

AOP, 프록시, Transactional

new 보라 2024. 6. 20. 21:44

AOP (Aspect-Oriented Programming)는 프로그래밍에서 코드를 재사용하기 쉽게 만드는 기법입니다. 특히, 여러 곳에서 반복되는 관심 사항(예: 로깅, 보안, 트랜잭션 관리 등)을 한 곳에서 관리할 수 있도록 도와줍니다. AOP를 사용하면 코드의 중복을 줄이고 유지보수성을 높일 수 있습니다.

 

 

1. 프록시 객체의 역할

프록시 객체는 스프링 AOP에서 중요한 역할을 합니다. 주로 다음과 같은 상황에서 사용됩니다:

  • 트랜잭션 관리: @Transactional 어노테이션이 붙은 메소드의 경우, 스프링은 해당 메소드를 호출할 때 프록시 객체를 생성하여 메소드 실행을 감싸고 트랜잭션 관리를 수행합니다.
  • 보안 제어: 특정 사용자가 접근할 수 있는 메소드를 제어하기 위해 프록시 객체를 사용하여 접근 권한을 확인할 수 있습니다.
  • 로깅: 메소드 호출이 발생할 때 로그를 남기거나, 호출 정보를 기록하기 위해 프록시 객체를 사용할 수 있습니다.
  • 캐싱: 메소드 호출 결과를 캐시하거나, 캐시된 데이터를 반환하기 위해 프록시 객체를 활용할 수 있습니다.

2. 프록시 객체의 필요성

스프링은 @Transactional 어노테이션이 적용된 메소드를 실행할 때, 실제로는 프록시 객체를 생성하여 이를 통해 메소드 호출을 감싸고 관리합니다. 이는 다음과 같은 이유에서 중요합니다:

  • 트랜잭션 관리: @Transactional 어노테이션이 붙은 메소드가 호출될 때, 스프링은 프록시 객체를 생성하여 이를 통해 트랜잭션을 시작하고 관리합니다.
  • 트랜잭션 경계 설정: 프록시 객체는 메소드의 실행 전에 트랜잭션을 시작하고, 실행 후에 트랜잭션을 커밋하거나 롤백합니다. 이를 통해 메소드가 성공적으로 완료되면 트랜잭션을 커밋하고, 예외가 발생하면 롤백할 수 있습니다.
  • 투명한 트랜잭션 처리: 클라이언트 코드에서는 @Transactional 어노테이션이 적용된 메소드를 호출할 때, 트랜잭션 처리에 대한 구현 세부사항을 몰라도 됩니다. 스프링이 프록시를 통해 트랜잭션을 관리하므로, 클라이언트는 투명하게 트랜잭션을 사용할 수 있습니다.

 

@Transactional 어노테이션이 적용된 메소드는 스프링이 생성한 프록시 객체를 통해 트랜잭션을 관리하며, 이를 통해 투명하고 효율적으로 데이터베이스 연산을 처리할 수 있습니다. 프록시 객체는 스프링 AOP의 일부로서 메소드 호출을 감싸고 추가적인 트랜잭션 관리 로직을 제공하여, 클라이언트 코드에서는 트랜잭션 처리에 대한 구현 세부사항을 몰라도 되게 합니다.

 

'코딩 > Spring' 카테고리의 다른 글

try-with-resources, CompletableFuture, Optional  (0) 2024.07.02
JPA N+1 문제  (0) 2024.06.24
MapStruct  (0) 2024.04.04
Spring Security Config 버전별 정보  (0) 2024.03.03
스프링부트 (JPA) 정리하기 좋은 강의  (0) 2024.03.03