AOP
@Transactional 사용시 주의점(+ @Async, 같은 Class 내에서 사용하는 경우)
@Transactional을 사용하면서 마주쳤던 특이사항에 대해 정리한다.1. @Async와 함께 사용하는 경우(ThreadLocal)2. 같은 Class 내에서 사용하는 경우(AOP)로 나뉜다. @Async와 함께 사용하는 경우@Transactional이 붙은 메서드에서 다른 메서드를 호출하는데 그 메서드를 비동기로 호출해야 하는 일이 생겼다. 호출하는 메서드에 @Async를 붙여서 비동기로 호출해주려는데 Exception이 나면 Rollback 되어야 하는 @Transactional annotation이 잘 동작하지 않는다. 왤까? 간단한 코드로 확인해보자.// 예시를 위해 만든 간략한 코드라 실제로 돌아가지는 않음class TestService { private final TestReposi..
[Spring] 입문6 (끝!)
AOP(Aspect Oriented Programming 관점 지향 프로그래밍) 이번에는 Spring 입문 강좌의 마지막 주제인 AOP이다. 만약 모든 기능에 대해 걸리는 시간을 출력해야 한다고 생각해보자. 그럼 모든 함수에 시작 시간 측정,,, 종료 시간 측정,, 빼서 계산,, 하는 로직을 일일히 넣어줘야한다. 만약 수정이 필요하면 다 일일히 수정해줘야한다. 이럴때 AOP를 사용하면 된다. 시간 측정과 같은 경우를 공통 관심 사항(cross cutting concern)이라고 하고 각 메서드 별로 주요 기능(ex 회원검색)을 핵심 관심 사항(core concern)이라고 할 수 있다. AOP를 적용하면 공통 관심 사항과 핵심 관심 사항을 분리해줄 수 있다. 이제 코드를 작성해보자. hello.hello..