Engineering Note

[JPA] JPA 활용 주의점과 사용팁 본문

Server/JPA ORM

[JPA] JPA 활용 주의점과 사용팁

Software Engineer Kim 2026. 1. 6. 14:10


Entity를 화면, API에 직접 노출 하지 않는다.

화면에 노출하지 않기 위해서는 조회한 Entity를 DTO로 변환하는 로직은 필수로 존재한다.

N+1 문제는 지연로딩으로 설정된 엔티티를 개별적으로 조회할 때 발생한다. 조회한 엔티티가 List였고 필드로 지연로딩 설정된 연관관계 엔티티가 있다면 필드를 채우기 위해 추가 쿼리가 수행된다.

만약 연관관계 엔티티도 컬렉션이라면 다시 리스트 요소만큼 더많은 추가쿼리가 실행된다.

N+1 문제를 막기위해 fetch join으로 지연로딩이 아니라 한 번에 조회를 통해 데이터를 가져온다.


하지만 컬렉션 연관관계 엔티티는 fetch join 적용시 페이지네이션이 적용되지 않는다. 이를 해결하기 위해서는 일대일 연관관계 엔티티는 fetch join으로 데이터를
조회하고 컬렉션 엔티티는 지연로딩으로 데이터를 조회하되 batchsize를 적용해 지연로딩 성능문제를 해결한다.(batch size 적용시 부모 엔티티의 pk를 기준으로 where in 조건절이 적용된다.)


화면에 맞춘 데이터를 조합해야해서 복잡한 조인을 사용해야하는 경우 DTO로 직접 조회한다.

Comments