// 최상단에 jquery를 추가해주자

Back-End/JPA

· Back-End/JPA
"조회는 무조건 DTO로 해야 할까?""fetchJoin을 언제 써야 하지?"실무에서 JPA를 쓰다 보면 조회 API를 어떻게 설계할지 고민이 많아집니다.이 글에서는 **JPA 엔티티 연관관계 설정(LAZY vs EAGER)**과 함께DTO select vs fetchJoin을 어떤 기준으로 선택해야 할지 정리해보겠습니다.⚙️ 1. 엔티티 연관관계 매핑 기본 설정JPA에서 엔티티 간 관계를 설정할 때 기본 전략은 다음과 같습니다.✅ OneToMany / ManyToOne@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "category_id")private Category category;@ManyToOne(fetch = FetchType.LAZY)@JoinC..
· Back-End/JPA
✅ EAGER vs LAZY 간단 정리로딩 전략설명EAGER엔티티 조회 시 연관 객체도 무조건 즉시 함께 로딩LAZY엔티티 조회 시 연관 객체는 프록시만 생성 → 필요할 때 쿼리 실행🚫 그럼 왜 EAGER는 실무에서 지양할까?⚠️ 1. 원치 않는 쿼리가 나감EAGER는 엔티티를 조회할 때 무조건 연관 객체를 함께 select함→ 상황에 따라 필요 없는 쿼리도 같이 실행됨예:Record record = recordRepository.findById(1L).get(); → 그런데 category, emotion이 EAGER면→ 내부적으로 다음과 같은 쿼리가 자동으로 나감:select * from record where id = 1; select * from category where id = ...; se..
· Back-End/JPA
🔥 CascadeType 완벽 정리📚 CascadeType 종류와 의미1. CascadeType.PERSIST java@OneToMany(cascade = CascadeType.PERSIST)private List orderItems;// 동작 예시Order order = new Order();order.addItem(new OrderItem("상품1")); // 새로운 OrderItementityManager.persist(order); // ✅ OrderItem도 자동 저장의미: 부모 저장 시 자식도 자동 저장2. CascadeType.MERGE java@OneToMany(cascade = CascadeType.MERGE)private List orderItems;// 동작 ..
· Back-End/JPA
📌 OSIV란 무엇인가?**OSIV(Open Session In View)**는 Spring Boot에서 기본적으로 활성화되어 있는 기능으로, HTTP 요청이 시작될 때부터 응답이 완료될 때까지 JPA 영속성 컨텍스트(EntityManager)를 열어두는 전략입니다.OSIV의 동작 방식# Spring Boot 기본 설정 (OSIV 활성화)spring: jpa: open-in-view: true # 기본값// OSIV가 켜져있을 때의 동작@GetMapping("/api/orders")public List getOrders() { List orders = orderService.findAll(); // 🎯 여기서도 지연 로딩 가능! (OSIV 덕분) return order..
dev1song
'Back-End/JPA' 카테고리의 글 목록