본문 바로가기

study/JPA4

[Spring Data JPA] JPA Auditing을 이용한 생성/수정 이력 추적 0. 들어가며서비스 운영 시 데이터가 생성되고 수정한 이력을 기록하고 트래킹하는 것은 중요하다. Spring Data JPA에서는 Auditing이라는 기능을 제공한다. 이를 통해 엔티티가 생성되고, 변경되는 시점을 감지해 생성시각, 수정시각, 생성자, 수정자를 기록할 수 있다.1. Spring Data JPA Auditing 적용Spring Data JPA Auditing을 사용하기 위해서는 @EnableJpaAuditing 어노테이션을 사용해 Auditing을 활성화해야 한다.Application 클래스에 직접 붙이거나, @Configuration 어노테이션이 사용된 클래스에 붙이면 된다.필자는 후자의 방법으로 Auditing을 활성화했다. | JpaAuditingConfig.java@EnableJp.. 2024. 7. 3.
[Hibernate] Soft Delete in Hibernate 0. 들어가며데이터베이스에서 데이터를 삭제하는 방법으로는 물리 삭제(Hard Delete)와 논리 삭제(Soft Delete)가 있다. Hard Delete는 DELETE 쿼리를 수행해 데이터베이스에서 데이터를 영구적으로 삭제하는 방법이다. Soft Delete는 UPDATE 쿼리를 수행해 레코드의 활성 여부를 나타내는 필드를 비활성으로 수정하는 방법이다.Soft Delete는 데이터가 유지되기 때문에 데이터 복원에 유리하다. 하지만, 데이터가 지속적으로 쌓이기 때문에 데이터베이스의 용량이 커질 수 있으며, SELECT 쿼리를 이용한 데이터 조회 시 활성 여부를 체크하는 검색 조건이 추가되어야 한다.1. How to Implement Soft Delete with HibernateHibernate 6.4.. 2024. 2. 6.
[JPA] Join vs Fetch Join 0. 들어가며 JPA를 사용하다보면 N+1 문제를 마주치게 되는데, 이를 해결할 수 있는 방법 중 하나가 Fetch Join이다. 그렇다면 일반적으로 사용하는 Join과 Fetch Join은 어떤 점이 다른지 알아보기 위해 해당 글을 작성하게 되었다. 1. Join vs Fetch Join 일반 Join은 조회의 주체가 되는 엔티티만 SELECT해서 영속화하고, 연관된 엔티티는 영속화하지 않는다. 반면 Fetch Join은 조회의 주체뿐만 아니라 연관된 엔티티까지 모두 SELECT하여 영속화한다. Fetch Join을 사용하면 연관된 엔티티가 모두 영속화되기 때문에 FetchType이 Lazy인 엔티티를 참조해도 이미 영속성 컨텍스트에서 관리하고 있어 SELECT문이 실행되지 않아 N+1문제를 해결할 수.. 2024. 1. 21.
[Hibernate] 하이버네이트 명명 전략(Hibernate Naming Strategy) 0. 들어가며 프로젝트를 시작하기에 앞서 다른 팀원들이 이전에 진행한 프로젝트 코드를 리뷰했는데, Java에서 사용하는 카멜 케이스를 DB에 스네이크 케이스로 저장하기 위해 @Column 어노테이션을 써서 일일이 네이밍을 지정해준 것을 봤다. 네이밍을 바꾸는 게 아닌 스네이크 케이스로만 바꾸는 용도라면 어노테이션을 써서 이름을 지정해주지 않아도 스네이크 케이스로 바꿔준다고 해당 팀원에게 알려주었는데 알려주면서도 JPA가 바꿔주는건지, 하이버네이트가 바꿔주는 건지 헷갈려서 찾아보았다. 1. 하이버네이트(Hibernate)란? 하이버네이트(Hibernate)는 자바 언어를 위한 ORM(Oriented Relational Mapping) 프레임워크다. JPA의 구현체로, JPA 인터페이스를 구현하며 내부적으로.. 2022. 9. 22.