728x90
과제 수행 내용 (필수) : 강의를 들으며 모르는 개념 정리
5주차 과제
를 수행하였습니다. (기능 구현)- 내일
join fetch
를 수행하는 것과repository에서 조회
하는 것의 쿼리를 비교해볼 생각입니다. AOP
개념에 대해 확실히 공부하고 어느정도 감을 잡은 것 같아 좋았습니다.- 영속성 컨텍스트를 고려하여 DTO로 응답을 생성하였습니다.
- 더티체킹이 수행되는 시점이
@Transactional
메서드 종료 후이므로 그 전에 DB 조회시 영속성 컨텍스트의 내용과 달라져 위험이 발생할 수 있습니다.
이때에는 명시적으로 DB에 반영하는flush()
를 사용함을 알 수 있었습니다.
또한부모 트랜잭션
과자식 트랜잭션
의 관계에 대해 생각해보았습니다.
금일 과제 수행 (코드 작성) 하면서 어려웠던 점 (선택)
- 지금까지 해온 코드를 정리하며 구현하는 과제였고, 조금 버벅거렸지만 기존 서비스 코드를 참고하여 과제를 수행하였습니다.
- DTO 응답 생성시 지연 로딩을 고려해 어떤 entity까지
join fetch
로 가져와야하는지 고민했습니다.
데일리 스크럼 내용 (필수)
❓ Q1. AOP의 Pointcut AOP의 `Pointcut` 를 공부하면서 아래 두 설명이 이해되지 않아 질문 드립니다.
- 선택된(필터링된) 하나 또는 여러 JoinPoint - 실제 Weaving이 일어나 Advice가 적용되는 Join Point ⬅️ 이 부분과
- 부가기능을 적용할 핵심 로직 결정 ex)Advice가 실행될 Target의 특정 메서드 지정 ⬅️이 부분
위 두 부분 모두 Pointcut
에 대해 설명하고 있는데, 두 부분이 다른 의미 같아 이해가 되지 않는데 설명해주실 수 있나요?
멘토님 👨💻 :
- 부가기능을 적용할 핵심 로직을 결정한다는 것은 적용될 join point를 결정한다는 의미입니다.
pointcut
은 공통기능(부가기능)을 적용할 시점인 join point를 여러개 지정할 수 있습니다.
❓ Q2. AOP - Join point vs Pointcut 두 개념의 차이가 궁금합니다. 같은 `실행시점`인데 Join point가 더 자세한 것인지 확실하게 알고싶습니다.
멘토님 👨💻 :
Join point
는결합점
이라는 뜻으로 Advice를 적용할 수 있는 시점을 말합니다.pointcut
은교차점
이라는 뜻으로 여러개의 join point를 설정할 수 있습니다. 공통 기능이 적용될 join point를 지정합니다.
코드로 정리해본 AOP 개념
@Aspect
@Component
public class MultipleJoinPointsAspect {
//2개의 pointcut(join point 지정)
@Pointcut("execution(* com.example.myapp.service.*Service.*(..))") //서비스의 모든 클래스 메서드
public void serviceMethods() { //point cut 별칭
}
@Pointcut("execution(* com.example.myapp.repository.*Repository.*(..))")
public void repositoryMethods() {
}
//3개의 advice
@Before("serviceMethods() || repositoryMethods()")
public void beforeExecution(JoinPoint jp) { //호출된 객체의 메서드(join point)
System.out.println("Before method execution: " + jp.getSignature().toShortString());
}
@AfterReturning("serviceMethods() || repositoryMethods()")
public void afterReturningExecution(JoinPoint jp) {
System.out.println("After method execution: " + jp.getSignature().toShortString());
}
@AfterThrowing(pointcut = "serviceMethods() || repositoryMethods()", throwing = "ex")
public void afterThrowingException(JoinPoint jp, Exception ex) {
System.out.println("Exception thrown from method: " + jp.getSignature().toShortString());
System.out.println("Exception message: " + ex.getMessage());
}
}
2개의 pointcut과 3개의 Advice를 정의한 코드입니다.
📌 여러개의 join point들 중 Advice를 적용할 join point들을 선택하여 pointcut에 지정한다.
📌 Advice 동작시점에는 @Before
, @After,
@AfterReturning
(메서드 정상 실행 후), @AfterThrowing
(예외 발생 후), @Around
(메서드 호출 이전, 이후, 예외발생 등 모든 시점에서 동작)이 있다.
📌 Advice에서 실제 호출된 메서드를 JoinPoint 파라미터가 가지고있고, 이를 이용해 공통 기능(Advice)을 수행한다.
728x90
'Spring > 카테캠 - TIL' 카테고리의 다른 글
TIL [0728] 카카오테크캠퍼스 5주차 과제 (기능 구현 + 예외 처리) (0) | 2023.07.28 |
---|---|
카카오테크캠퍼스 4주차 코드리뷰 (0) | 2023.07.28 |
TIL [0726] : 5주차 강의 - 상품 목록, 상세보기, 장바구니 담기, 조회, 업데이트 (0) | 2023.07.26 |
TIL [0725] : 5주차 강의 - 코드 리팩토링(GlobalExceptionHandler, AOP) (0) | 2023.07.25 |
카카오테크캠퍼스 : 3주차 코드리뷰 (0) | 2023.07.21 |