2025년 9월 25일 목요일 (86일차)

Jeonghoon·2025년 9월 25일

jeonghoon's Study

목록 보기
89/128

🌿 Spring AOP & 트랜잭션 처리 정리


⚙️ AOP (관점 지향 프로그래밍)

🧭 개념

  • AOP(Aspect Oriented Programming)는 핵심 로직과 공통 로직을 분리하여 관리하는 프로그래밍 방식입니다.
  • 핵심 로직은 그대로 유지하면서, 공통 기능(횡단 관심사) 을 별도의 모듈에서 관리합니다.
구분설명예시
핵심 로직비즈니스 기능 담당회원가입, 결제 처리 등
공통 로직여러 로직에서 공통으로 사용되는 보조 기능로그, 트랜잭션, 성능 측정

🧰 AOP 사용법

단계별 설정

단계내용
1의존성 추가build.gradle에 AOP 관련 라이브러리 추가
2AOP 클래스에 @Aspect, @Component 어노테이션 추가
3공통 로직을 메서드로 정의 (Advice 실행 시점 설정)

Advice 종류 (공통 함수 실행 시점)

어노테이션실행 시점활용 예시
@Before메소드 실행 전권한 검사
@After메소드 실행 후로그 기록, 리소스 해제
@AfterReturning메소드 성공 후 반환값 반환 시점반환값 처리
@Around메소드 실행 전/후 모두성능 측정, 트랜잭션 처리

🧾 execution 규칙

Aspect를 적용할 대상 메서드 지정 규칙입니다.

구분문법설명
반환 타입 지정execution(*)모든 반환 타입의 메서드 적용
execution(타입)지정한 반환 타입에만 적용
클래스 지정execution(* example.AopService)지정한 클래스 경로 대상
메소드 지정execution(* AopService.*)해당 클래스의 모든 메소드
execution(* AopService.enter(..))지정한 메소드만 적용
매개변수 지정execution(* AopService.enter(..))모든 매개변수 허용
execution(* AopService.enter(타입) && args(변수명))특정 매개변수 지정
반환 지정@AfterReturning(value="...", returning="타입명")반환값을 받아 사용

🧩 @Around 세부 예시

@Around("execution(* com.example.service.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
    // 실행 메서드 정보 확인
    String method = joinPoint.getSignature().toShortString();
    Object[] args = joinPoint.getArgs();

    // 핵심 로직 실행
    Object result = joinPoint.proceed();

    return result;
}
메서드설명
.getSignature()수행 중인 메소드의 시그니처(이름) 확인
.getArgs()메소드의 매개변수 배열을 반환
.proceed()핵심 비즈니스 로직 실행 및 결과 반환

🧾 주요 어노테이션 정리

어노테이션역할
@Transactional트랜잭션 처리 (JDBC 동작 포함)
@Log4j2로그 출력 담당 (@Log4j2 클래스 선언 시 사용)
Spring Security 관련보안 처리 담당

💾 트랜잭션 처리

개념

  • @Transactional은 지정한 메소드 또는 클래스 내의 모든 SQL 작업을 하나의 트랜잭션으로 묶어 처리합니다.
  • 트랜잭션 내에서 예외가 발생하면 자동으로 rollback이 수행됩니다.

Spring 트랜잭션 기본 동작

항목설명
제어 대상SQL이 포함된 메소드 또는 클래스 전체
기본 롤백 조건RuntimeException (실행 예외) 발생 시 자동 롤백
상위 예외 클래스RuntimeException

0개의 댓글