🌱 Spring/JPA

데이터베이스 연동 📁 application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/test username: sa password: driver-class-name: org.h2.Driver spring.datasource : DB 연결정보 JPA ddl-auto 옵션 📁 application.yml spring: jpa: open-in-view: false hibernate: ddl-auto: create open-in-view : osiv 웹 요청이 완료될 때까지 영속성을 가지는 옵션 (켜두면 성능상 안 좋기 때문에 false 사용) hibernate.ddl-auto : create : 기존 테이블 삭제 후 다시 테이블 생성 (DROP + C..
Auditing 기능이란? JPA를 사용해 도메인을 관계형 데이터베이스 테이블에 매핑할 때 도메인들이 공통적으로 가지고 있는 컬럼이 존재한다. 대표적으로 생성일, 등록일 같은 것들이 있다. 데이터베이스에 누가, 언제했는지 기록을 남기는 생성일, 수정일 컬럼은 굉장히 중요한 데이터라고 할 수 있다. 그래서 Spring Data JPA는 Auditing이라는 기능을 제공해준다. 이 기능은 시간에 대해 자동으로 값을 넣어주는 기능으로, 도메인을 영속성 컨텍스트에 저장하거나 조회 후 수정하는 경우 자동으로 시간을 매핑해 데이터베이스의 테이블에 넣어준다. 사용방법 👉🏻 의존성 추가 📁 build.gradle dependencies { implementation 'org.springframework.boot:spr..
JPA에서 엔티티를 변경하기 위해서 변경감지와 병합이라는 기능을 사용하는데, 이번 포스팅에서는 이 변경감지와 병합을 어떻게 사용하는지 알아보도록 하겠다. 변경감지와 병합을 알기 앞서 우선 준영속 엔티티가 무엇인지 이해할 필요가 있다. 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 임의로 만들어낸 엔티티도 기존에 DB에 한번 저장되어 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다. 이러한 준영속 엔티티를 수정할 때 변경 감지와 병합이 사용된다. 그럼 이제 변경감지와 병합에 대해 알아보도록하자. 준영속 엔티티 수정 방법 변경 감지(dirty checking) 사용 병합(merge) 사용 변경 감지 (Dirty Checking) @Transactional void update(It..
엔티티에는 가급적 Setter를 사용하지 말자. Setter가 모두 열려 있다면, 변경 포인트가 많아 유지보수가 어렵다. ⭐ 모든 연관관계는 반드시 지연로딩으로 설정해라. 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기가 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 따라서 실무에서는 모든 연관관계를 지연로딩(LAZY)으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 한다면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해줘야 한다. (@XToMany 관계는 기본이 지연로딩이므로 설정해줄 필요 없음) @ManyToOne(fetch = Fe..
an2z
'🌱 Spring/JPA' 카테고리의 글 목록