JPA 4

[Interview Question] N+1 문제란 무엇이며, 어떻게 해결할 수 있나요?

N+1 문제는 JPA같은 ORM에서 자주 발생하는 문제입니다. 한 번의 쿼리를 실행해서 엔티티 리스트를 가져온 다음 그 엔티티와 연관된 데이터를 조회하려고 접근할 때 엔티티 개수만큼 추가로 쿼리가 실행되는 문제입니다. 원래는 쿼리 한 번이면 충분한 작업이 N+1번의 쿼리로 나누어 실행되어 불필요한 DB 부하가 발생하는 것이 N+1 문제입니다. ORM은 성능 이슈로 인해 기본원칙이 지연 로딩(lazy loading)입니다. 즉시 연관 엔티티를 가지고 오지 않고, 실제로 접근하는 시점에 쿼리를 날려 데이터를 조회합니다. 데이터 수가 많아질수록 조회 횟수가 늘어나므로 네트워크 왕복 비용, DB 부하, 메모리 사용량 등이 커져서 성능 병목이 발생합니다. N+1 문제 해결방법은JPQL에서 JOIN FETCH를 사..

Interview Question 2025.09.02

[Project] N:M 매핑에서 복합 키(Composite Key)를 사용할 때 주의할 점

복합키(Composite Key) vs 고유 Id JPA에서 N:M 관계를 매핑할 때, 중간 테이블(연결 테이블)에 고유 ID(@Id)를 넣을 것인지, 복합 키(@EmbeddedId)를 사용할 것인지 고민하는 경우가 많다. 처음에는 "그냥 @Id를 넣고 auto_increment 하면 되지 않나?"라고 생각할 수 있지만, 이 방식은 데이터 무결성과 성능 문제를 초래할 수 있다.본 글에서는 복합 키(Composite Key)를 사용할 때의 장점과 @Id 방식이 가지는 문제점을 분석해보겠다. N:M 관계에서 중간 테이블의 역할ProblemSet(문제지)와 Problem(문제)은 N:M 관계이다.따라서 ProblemSetToProblem이라는 중간 테이블이 필요하다.이때, 이 테이블의 고유 식별자(PK)를 어..

EduClass Project 2025.03.05

[JPA] 영속성 관리(Entity Manager, Entity Factory, Persistence Context)

Entity Manager와 Entity FactoryJPA는 크게 Entity와 테이블을 매필하는 설계 부분과 매핑한 Entity를 실제 사용하는 부분으로 나눌 수 있다.// Entity Factory 생성EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa"); Entity Manager는 Entity를 저장하고, 수정하고, 삭제하고, 조회하는 등 Entity와 관련된 모든 일을 처리하는 관리자이다.// Entity Manager 생성EntityManager em = emf.createEntityManager();Entity Factory는 이름 그대로 Entity Manager을 만드는 공장이다. 공장을 만드는 비용은 상당히 ..

DATABASE 2025.02.16

[SQL] JPA란 무엇인가?

JPA란 무엇인가?JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. JPA는 애플리케이션과 JDBC사이에서 동작한다.   ORM이란 무엇인가?ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 예를 들어 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라 객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT SQL을 생성해서 데이터베이스에 객체를 저장해준다. 따라서 ORM 프레임워크는 객체 ..

DATABASE 2025.02.12