본문 바로가기

개념정복💫24

JPA 일대일(OneToOne) 관계 매핑 JPA에서 1:1 관계를 설정할 때는 @OneToOne과 함께 @JoinColumn 또는 mappedBy 속성을 사용합니다.어떤 엔티티가 외래 키를 가질지에 따라 설정이 달라집니다.1. @JoinColumn 사용 시@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name = "diary_tags_no")private DiaryTagsEntity diaryTagsEntity;DiaryEntity 테이블에 diary_tags_no 컬럼이 생성됨 (주인, owner)2. mappedBy 사용 시@OneToOne(mappedBy = "diaryEntity", cascade = CascadeType.ALL)private DiaryTagsEntity diaryTagsEntity.. 2025. 2. 23.
즉시 로딩(EAGER)과 지연 로딩(LAZY), 언제 어떤 전략을 써야 할까? JPA에서는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 같은 연관 관계를 맺을 때,데이터를 언제 로딩할지 결정하는 FetchType 옵션이 있습니다.즉시 로딩(FetchType.EAGER): 연관된 엔티티를 즉시 함께 조회지연 로딩(FetchType.LAZY): 연관된 엔티티를 실제 사용할 때 조회1️⃣ 왜 기본적으로 LAZY가 권장될까?✅ 즉시 로딩(FetchType.EAGER)의 문제점즉시 로딩은 편리하지만 항상 모든 연관된 엔티티를 함께 불러온다는 점이 문제가 됩니다.즉, 필요 없는 데이터를 가져오거나, 쿼리가 복잡해지면서 성능 저하가 발생할 수 있어요.❌ EAGER 사용 시 발생할 문제들1️⃣ 불필요한 데이터까지 한 번에 조회됨예를 들어, User 엔티티가.. 2025. 2. 23.
JPA 페치 타입: 즉시 로딩(EAGER)과 지연 로딩(LAZY) JPA에서 엔티티 간 연관관계를 설정할 때, 연관 객체를 언제 조회할지를 결정하는 것이 FetchType입니다.즉시 로딩(EAGER)과 지연 로딩(LAZY)의 차이와 장단점을 알아봅니다.1. 즉시 로딩(EAGER)원리: 엔티티를 조회할 때, 연관된 엔티티도 바로 함께 조회장점:한 번의 쿼리로 필요한 정보를 전부 가져오기 때문에, 코드에서 편리단점:필요 없는 데이터까지 가져와서 성능을 해칠 수 있음대규모 연관관계에서는 N+1 문제 등이 발생하기 쉬움2. 지연 로딩(LAZY)원리: 엔티티를 먼저 가져오고, 실제로 사용할 때(필요할 때) DB에서 추가 조회를 수행장점:처음에는 최소한의 데이터만 조회 -> 성능 최적화에 유리단점:LazyInitializationException, N+1 문제 대비가 필요연관 객.. 2025. 2. 23.
@EntityListeners(AuditingEntityListener.class)란? Spring Data JPA에서 자동으로 날짜/시간을 기록하는 기능(@CreatedDate, @LastModifiedDate 등)을 사용하려면,Spring이 해당 엔티티의 생성/수정 이벤트를 감지할 수 있도록 Auditing 기능을 활성화해야 합니다.이때 필요한 설정이 바로 @EntityListeners(AuditingEntityListener.class)입니다.1. 왜 필요한가?Spring Data JPA의 Auditing 기능(@CreatedDate, @LastModifiedDate)은엔티티가 언제 생성되었는지, 언제 수정되었는지를 자동으로 기록하는 기능입니다. 하지만 JPA에서는 엔티티의 변경을 자동으로 감지하지 않기 때문에,JPA의 이벤트 리스너(@EntityListeners)를 등록해야 Audi.. 2025. 2. 22.