2024.11.09 - [개발/스프링] - JPA에 관한 단상(1) - N+1 문제의 본질 JPA에 관한 단상(1) - N+1 문제의 본질spring 에서 JPA으로 개발하다보면 누구나 N+1 을 만나게 되어 있다. 사실 Spring에만 있는 것은 아니고 대부분의 ORM에 다 있는 문제이다. 관련해서 키워드로 나오는게 1. JOIN FETCH2. Batch Size3. Eager Loadjongqui.tistory.com 이전 포스팅에선 N+1 문제의 본질에 대해 다루었다.RDBMS와 OOP의 사물을 표현하는 철학이 다르다는 점에 대해서 설명하면서,실제로 문제가 되는 사례를 하나 들어서 설명헀다. 이번 포스팅에서는 백오피스에서 OneToMany 이슈를 어떻게 다뤄야 할지에 대한 내용을 담았다. JPA에서..
spring 에서 JPA으로 개발하다보면 누구나 N+1 을 만나게 되어 있다. 사실 Spring에만 있는 것은 아니고 대부분의 ORM에 다 있는 문제이다. 관련해서 키워드로 나오는게 1. JOIN FETCH2. Batch Size3. Eager Loading , Lazy Loading 등이 있다. 물론 해결책을 아는 것도 좋지만 본질을 이해하지못하면 택도 없는 요구사항을 받았다가,나중에 눈물을 흘리며 기획 수정을 요청해야 하는 경우가 생길 수 있다. N+1의 시작은 데이터를 표현하는 방법에 있어서의 RDBMS와 OOP의 차이에서 기인한다. RDBMS 세계관에서는 각 사물을 테이블로 정의하고,각 사물에 대한 고유성은 PK로 확보하며,개별 사물은 레코드로 표현한다.그리고 사물간의 관계는 FK를 사용해..
멀티스레드로 요청을 보낸 횟수를 db에 기록해 집계를 할일이 있어서 비관적 락에 대해 좀 살펴보았다. 내가 궁금했던것은 @Lock(LockModeType.PESSIMISTIC_WRITE) 을 어디에 달아주냐였다. 답은 "SELECT 쿼리를 호출하는 메서드" 였다. public interface StatRepository extends JpaRepository { @Lock(LockModeType.PESSIMISTIC_WRITE) StatEntity findStatEntityById(Long id); Optional findyById(Long id); } 인터넷 예시들을 보면 jpql 같은걸 쓰기도 하는데, 그럴 필요 없이 기본 method에선 해당 메서드는 transaction 안에서만 사용해야 한다. ..
- Total
- Today
- Yesterday
- 부가가치세
- k베뉴
- 홈택스
- 현금영수증
- tomcat
- springboot
- Java17
- 티스토리챌린지
- JPA
- 오블완
- ORM
- 토스페이
- 알리
- springboot3
- 알리익스프레스
- 공익제보단
- n+1
- java
- 전세사기
- Azure
- 안전신문고
- 이륜차
- Spring
- 탈세
- 포상금
- Request
- Thymeleaf
- 한국교통안전공단
- ouath2
- 광군제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |