목록jpa (9)
enginner_s2eojeong

목표객체와 테이블 연관관계 차이 이해하기객체의 참조 ↔ 테이블의 외래 키(FK) 매핑 방법방향 (단방향, 양방향), 다중성 (1:N, N:1, 1:1 등) 이해연관관계의 주인 개념 정리1. 1 단방향 연관관계테이블은 외래키(FK)로 조인을 해서 연관된 테이블을 찾지만, 객체는 참조를 통해서 연관된 객체를 찾는다.객체 연관관계와 테이블 연관관계를 매핑 -> ORM 매핑을 해주어야 한다. 회원 & 팀 Class@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @M..

1. 엔티티 매핑 소개엔티티와 테이블 매핑@Entity: JPA가 관리하는 엔티티 클래스@Table: 엔티티와 매핑할 테이블 지정필수 어노테이션@Entity 필수기본 생성자 필요 (파라미터가 없는 public 또는 protected 생성자)2. 객체와 테이블 매핑@Entity@Entity가 붙은 클래스는 JPA가 관리하는 엔티티로 간주된다.주의사항final 클래스, enum, interface, inner 클래스 사용 X저장할 필드에 final 사용 금지@Entity 어노테이션속성기능기본값nameJPA에서 사용할 엔티티 이름을 지정한다.같은 클래스 이름이 없으면 가급적 기본값을 사용한다.클래스 이름을 테이블 이름으로 사용@Table엔티티와 매핑할 테이블 이름을 지정@Table 어노테이션속성기능기본값nam..

1. 영속성 컨텍스트 (Persistence Context)정의: JPA에서 영속성 컨텍스트는 엔티티 객체가 영구적으로 저장되는 환경을 말한다.EntityManger.persist(entity)로 엔티티를 영속성 컨텍스트에 저장할 수 있다.EntityManager를 통해 영속성 컨텍스트에 접근하고 이를 관리한다.엔티티의 생명주기를 관리하고 트랜잭션 내에서 엔티티의 상태를 자동으로 추적해준다.2. 엔티티 생명주기비영속 (Transient): 엔티티 객체가 새로 생성되었지만 영속성 컨텍스트에 의해 관리되지 않는 상태영속 (Managed): 엔티티 객체가 영속성 컨텍스트에 의해 관리되는 상태준영속 (Detached): 영속성 컨텍스트에서 분리된 엔티티로 더 이상 관리되지 않는 상태삭제 (Removed): 엔티..

1. 프로젝트 생성H2 데이터베이스 설치 및 실행최고의 실습용 DB별도의 툴 없이 웹 브라우저에서 간편하게 SQL 실행 가능시퀀스(Sequence), 자동 증가(AUTO INCREMENT) 기능 지원프로젝트 생성Java 8 이상 (Java 8 권장)Maven 설정- groupId: jpa-basic- artifactId: ex1-hello-jpa- version: 1.0.0라이브러리 추가pom.xml 4.0.0 jpa-basic ex1-hello-jpa 1.0-SNAPSHOT org.hibernate hibernate-entitymanager 5.3.10.Final ..

1. JPA 개요JPA(Java Persistence API)는 자바 진영의 ORM(Object-Relational Mapping) 기술 표준이다.SQL 중심적인 개발 방식의 문제를 해결하기 위해 등장했다.객체 지향 언어와 관계형 데이터베이스(RDB)를 연결하는 기술이다.2. SQL 중심 개발의 문제점반복적인 CRUD 코드:SQL을 직접 작성해야 하므로, 같은 패턴의 코드가 반복된다.필드가 추가될 때마다 모든 SQL을 수정해야 한다.객체와 RDB의 패러다임 불일치:상속 문제: RDB는 테이블 구조 기반이라 객체의 상속을 표현하기 어렵다.연관관계 문제: 객체는 참조를 사용하고 테이블은 외래 키를 사용하므로 매핑이 어렵다.데이터 타입 차이: 객체와 DB의 데이터 타입이 일치하지 않을 수 있다.데이터 식별 방..

2025.02.13 - [Backend/Database] - JPA에서 Index 설정하는 방법 (feat. 쿼리 속도 향상 시키기) - 1편 JPA에서 Index 설정하는 방법 (feat. 쿼리 속도 향상 시키기) - 1편ReciGuard 프로젝트 회고ReciGuard는 알레르기를 가진 사용자에게 안전한 레시피를 추천하는 서비스다. 때문에 사용자별 알레르기 정보를 반영하기 위해 정규화된 데이터베이스 구조를 설계하였s2eojeong.tistory.com 지난 시간에는 JPA로 Index를 설정하는 방법을 배웠다.이제 Index를 활용해서 기존 JPQL 쿼리를 리팩토링 해보자 ! RecipeRepository에는 DB에서 특정 레시피를 조회하는 함수들이 존재하는데,1. 모든 레시피 조회, 2. cuisin..

ReciGuard는 알레르기를 가진 사용자에게 안전한 레시피를 추천하는 서비스다. 때문에 사용자별 알레르기 정보를 반영하기 위해 정규화된 데이터베이스 구조를 설계하였으나, 레시피와 사용자의 알레르기 정보를 매칭하고 필터링하는 과정에서 Recipe, RecipeIngredient, Ingredient, UserIngredient, User 테이블 간에 빈번한 JOIN 연산이 발생하는 문제가 발생했다. 이러한 성능 저하로 인해 데이터 로딩 시간도 길어졌고 이는 곧 사용자 경험 저하로 이어질 우려가 있다. 이를 위해 해결 방법을 강구하던 중, 작년 데이터베이스 수업 시간에 배웠던 Index가 떠올랐다.Index란?: 특정 테이블에서 데이터를 더 빠르게 검색할 수 있도록 도와주는 보조 구조인덱스는 데이터를 복사..