JPA 4

[JPA] QueryDSL 이란?

✅ QueryDSL이란 무엇인가? DSL는 Domain Specific Language의 약자이다. 말 그대로 특정 영역의 언어이다. 앞에 Query라는 단어가 붙었으니 쿼리 영역에 집중하는 언어라고 생각할 수 있다.QueryDSL은 Java 기반의 타입 안전한 SQL/JPQL 쿼리 생성 라이브러리다. 보통 JPA를 쓸 때 JPQL을 문자열로 작성한다. 예를 들어,String jpql = "select a from Article a where a.title like :title"; 하지만 이렇게 문자열로 쿼리를 쓰면오타가 있어도 컴파일러가 못 잡아준다.복잡한 동적 쿼리를 만들기 어렵다.리팩토링이 힘들다.여기서 QueryDSL은 이 문제를 해결해 준다.컴파일 시점에 쿼리 오류를 잡을 수 있다.동적 쿼리를 ..

JPA 2025.06.28

[JPA] 다중성이란?

✅ 다중성(Multiplicity) 정의두 엔티티(객체, 테이블) 사이의 개수 관계를 나타내는 것. 📌 다중성의 종류관계 유형설명예시일대일 (1:1)한 객체는 상대 객체 하나만 가질 수 있음사람(1) ↔ 주민등록증(1)일대다 (1:N)한 객체가 상대 객체 여러 개 가질 수 있음회원(1) ↔ 게시글(N)다대일 (N:1)여러 객체가 같은(하나의) 상대 객체를 가질 수 있음게시글(N) ↔ 하나의 회원(1)다대다 (N:M)여러 객체가 여러 상대 객체를 가질 수 있음학생(N) ↔ 수강 과목(M) 다대일과 일대다는 서로 반대되는 개념이고 다대다는 서로가 서로를 여러 개씩 가지는 경우이다. 📐 다중성은 어디에 쓰이나?객체 모델 설계 시 → 어떤 관계로 매핑할지 결정JPA, ERD 등에서 → 연관관계를 시각화하..

JPA 2025.06.26

[JPA] Fetch Join이란?

✅ Fetch Join이란?fetch join은 JPQL에서 연관된 엔티티를 한 번의 쿼리로 함께 조회하는 기능이다.JOIN과 달리, 연관 엔티티를 즉시 로딩해서 실제 객체로 채워준다. 일반적인 JOIN은 연관 관계를 단순히 결합하는 데 그치지만FETCH JOIN은 연관된 엔티티를 즉시 로딩(EAGER) 하도록 만들어 실제 객체로 채워준다.📌 예시// 일반 JOIN (연관된 team은 프록시 객체)@Query("SELECT m FROM Member m JOIN m.team t")// Fetch JOIN (연관된 team을 함께 조회하여 채워 넣음)@Query("SELECT m FROM Member m JOIN FETCH m.team") ✅ 왜 써야 할까? → N+1 문제 해결@ManyToOne(fetc..

JPA 2025.06.25

[JPA] N+1 문제 원인 & 해결

✅ N+1 문제란?ORM(Object-Relational Mapping) 프레임워크에서 1번의 쿼리로 N개의 데이터를 조회했을 때데이터와 연관된 엔티티를 조회하기 위해 N번의 추가 쿼리가 발생하는 성능 문제를 말한다. 즉,1번의 쿼리를 날리려고 했지만 의도치 않게 N번의 쿼리가 더 나가게 되는 문제다. 🔍 예시상황Spring으로 간단한 게시판 구현10개의 게시글 화면 출력 [ID Title Author Date Hits]6명의 작성자(Author)가 존재 [kwon, 11, 12, 33, 44, 55]테이블게시글의 ID, Title, Date, Hits를 저장하는 Article 테이블로그인ID, PW, 작성자(Author)를 저장하는 Member 테이블호출 과정게시글(Article)을 가져옴. (sel..

JPA 2025.06.24