일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 점근적 표기법
- 알고리즘
- MSA
- 멀티프로세서
- JPA
- 최소힙
- SpringSecurity
- spring
- python
- JVM
- 백준 장학금
- 연결리스트
- posix
- 엔티티 그래프
- 운영체제
- 이분탐색이란
- 완전이진트리
- HTTP
- 자료구조
- 프로세스
- AVL트리
- 최대 힙
- jpa n+1 문제
- heapq
- Kruskal
- 힙트리
- 백준장학금
- 강화학습
- 스케줄링
- 연결리스트 종류
- Today
- Total
목록JPA (3)
KKanging

JPA에서 N+1 문제가 생기는 이유JPA를 사용하는 개발자라면 항상 만나는 연관관계는 1대다 혹은 다대다 일 것이다.(굳이 JPA를 사용하지 않더라도 RDB를 사용한다면)우리가 JPA를 유용하게 사용하다보면 블로그나 다른 기업 테크톡 같은 곳을 보면 JPA를 사용할때 N+1 문제를 조심해라 이런 말을 본적 있을 것이다.이번 글은 N+1은 도대체 무엇이고 어떨때 발생하며, 해결 방법은 무엇인지 정리해보겠다.가정Team 과 Member 가 1:N 관계에 있다고 가정한다.Team 에서 Fetch 전략은 LAZY이다.@Entity@Table(name = "team")@NoArgsConstructor@Getter@Setterpublic class Team { @Id @GeneratedValue(str..

엔티티 그래프를 사용하는 이유는 ? ???연관된 엔티티를 같이 조회할 때 사용하는 방법들fetch 옵션 (즉시 로딩)fetch joinfetch 옵션은 사용하면 N+1 쿼리가 날라가기도 하고 원하지 않을때 연관된 엔티티가 같이 조회될 수 있음fetch join 은 좋은 해결책 중 하나지만 페치 조인을 사용하면 다음과 같이 JPQL을 중복해서 작성하는 경우가 많다.// case 1select o from Order o where o.status = ?// case 2select o from Order o join fetch o.member where o.status = ?// case 3select o from Order o join fetch o.orderItems where o.status = ?3가..

스프링의 @Transactional 어노테이션과 트랜잭션 범위스프링의 Service 계층에 @Transactional 어노테이션을 많이 봤을 것이다.스프링의 @Transactional 어노테이션은 AOP로 구현되었으며, 메소드 시작할때 영속성 컨텍스트와 트랜잭션을 시작한다.대상 메소드가 종료하면 트랜잭션을 커밋하고 종료한다.트랜잭션을 종료하면 영속성 컨텍스트도 종료하고 같은 트랜잭션에는 같은 영속성 컨텍스트를 사용한다.트랜잭션을 커밋하면 컨텍스트를 플러시하고 변경 내용을 데배에 반영한다.그리고 데이터베이스의 트랜잭션을 커밋한다.따라서 영속성 컨텍스트의 변경 내용이 데이터베이스에 정상 반영된다.만약 트랜잭션의 예외가 발생하면 트랜잭션을 종료하는데 이때는 플러시를 하지 않는다.요약스프링의 트랜잭션 어노테이션..