transactional, proxy, (N + 1) issue

안규원·2021년 7월 10일
0

IT단어장

목록 보기
10/13

🍁 transactional

  • With transactions configured, we can now annotate a bean with @Transactional either at the class or method level.
  • Spring creates proxies for all the classes annotated with @Transactional.
  • 클래스, 메서드 위 선언적 트랜잭션(@Transactional)을 통해 프록시 오브젝트가 생성되어 요청이 들어왔을 때 이를 가로채 트랜잭션 처리한다.
  • 가령, 사용자가 회원 정보 수정시,
    스프링의 Controller.Service 호출 - 프록시가 요청 가로채 트랜잭션 시작 - updateMember 로직 처리(updateMember 메서드는 트랜잭션 선언되어있음) - 트랜잭션 종료(commit or rollback)
  • JPA가 제공하는 Repository의 모든 메소드는 @Transactional이 적용되어 있음.

🍁 proxy

  • proxy server는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템 / 응용 프로그램을 가리킨다.
  • 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다.

🍁 (N + 1) issue

  • 하위 Entity들을 첫 쿼리 실행시 한 번에 가져오지 않고, Lazy Loading으로 필요한 곳에서 사용되어 쿼리가 실행됨.
  • 조회시 바로 가져오고 싶은 Entity field를 지정하는 것이 한 가지 방법.(join fetch a.자식들)
  • @EntityGraph의 attributePaths에 쿼리 수행시 바로 가져올 필드명을 지정하면 Lazy가 아닌 Eager조회로 가져오는 것이 두 번째 방법.
profile
생각을 구현하고자 개발을 공부합니다.

0개의 댓글