본문 바로가기
728x90

ORM8

EntityListener 다루기 EntityListener를 만들어 사용하는 이유 EntityListener는 저번 글에서 봤듯이 기본적으로 Spring Data JPA 가 제공해주는 AuditingEntityListener 클래스를 사용할 수 도 있지만 직접 EntityListenr 클래스를 생성한 후 지정해 줄 수 도 있다. Spring Data JPA에서 제공하는 리스너도 충분히 편리한데 굳이 직접 만들어 사용해야 할까? 이 의문에 대한 답을 개인적으로 생각해보았을 때, 직접 만든 EntityListener를 사용하게 된다면 여러 중복된 코드도 줄일 수 있고 특정 엔티티에 따라 서로 다른 동작을 할 수 있게 하는 등 기본적으로 제공해주는 JPA 보다는 조금 더 사용자 맞춤 리스너를 작성할 수 있기 때문이 아닐까... 예제 코드를 .. 2024. 1. 18.
JPA Auditing JPA Auditing JPA Auditing이란, Spring Data JPA가 CRUD 등 JPA를 이용한 작업을 할 때, Audit(감시) 기능을 위해 제공해주고 있다. 엔티티 객체가 영속성 컨텍스트에 저장, 수정, 삭제 등의 이벤트의 발생을 JPA Auditing에서 감시하고 있다가, 해당 이벤트가 발생하면 특정 로직을 처리할 수 있도록 해준다. 한마디로, javascript의 이벤트리스너의 기능을 JPA에서 사용할 수 있는 것이다. Entity에 대한 리스너는 따로 클래스 파일을 생성하여도 되지만 Spring Data JPA가 기본적으로 제공해주는 리스너를 사용하여도 된다. 이번 글에서는 Spring Data JPA가 제공해주는 JPA Auditing 을 사용하는 방법을 알아보겠다. @Enabl.. 2024. 1. 17.
기본 CRUD - Create & Update Create Create는 CRUD에서 데이터를 생성하는 것을 담당한다. 그렇다면 JPA에서 Create는 무엇을 의미할까? JPA에서 Create는 일반 자바 객체가 Entity Manage에 의해 관리되는 Entity 객체로 변환되어 관리되는, 즉 영속화되었음을 의미한다. Entity Manager에 의해 관리된다는 것은 일반 자바 객체가 영속성 컨텍스트에 포함, 저장되는 것이기 때문에 Create 관련된 메소드는 모두 save라는 이름으로 시작된다. save(Entity) 메소드를 테스트하기 전에, 이전에 작업해두었던 Test 클래스에서 @BeforeEach는 없애도록 하자. ( 메소드 테스트를 위한 기본 설정은 다음 글 참고 : 바로가기 ) save 메소드는 Entity 타입의 자바 객체를 매개변.. 2024. 1. 16.
기본 CRUD - DELETE 이전 글에서는 JpaRepository의 기본 CRUD 메소드에서 READ에 해당하는 메소드들을 알아보았다. 이번 글에서는 DELETE에 해당하는 JpaRepository의 기본 메소드에 대해서 알아보자. ( 사전 작업은 다음 링크를 참고 : 기본 CRUD - READ ) DELETE CRUD의 DELETE는 데이터베이스에서 데이터를 삭제하는 부분을 담당한다. JpaRepository의 delete를 담당하는 기본 메소드를 살펴보고 각각의 메소드가 어떤 쿼리문을 통해 작업을 진행하는지 살펴보자. delete(Entity) delete() 메소드는 넘겨받은 Entity 객체를 데이터베이스에서 삭제한다. 이 때, 주의할 점은 JPA가 어떤 객체를 Entity 객체, 즉 영속화된 객체라고 인식하는지를 알아야 .. 2024. 1. 16.
기본 CRUD - READ JPA를 사용할 때 주의할 점 JPA는 편리하게 Java 코드만으로 영속성 데이터를 다루게 해준다. 또한 Spring Data JPA는 JPA를 구현한 Hibernate 를 다시 한번 감싸서 사용자가 더 편리하게 여러 메소드를 통해 영속성 데이터를 다루게 해준다. 또한, 현재 사용하고 데이터베이스의 종류가 다르더라도 사용자가 사용하여야 할 메소드는 변하지 않는다!! ( 데이터베이스 종류에 독립적임!! ) 이러한 점은 JPA의 큰 장점이지만 반대로 JPA을 사용할 때 주의하여야 하는 이유이다. 데이터베이스에 독립적으로 동작하여야 하기 때문에 JPA는 모든 데이터베이스에서 사용할 수 있는 쿼리문을 생성하기 때문에 몇몇 메소드들은 성능을 크게 저하시킬 수 있는 쿼리문을 생성한다. 그렇기 때문에 JPA를 사용할.. 2024. 1. 16.
JPA Repository - 개념 JPA Repository JPA Repository는 기본적인 CRUD 부터 Spring Data JPA의 여러 메소드들을 사용할 수 있도록 정의된 인터페이스이다. 다음은 JPA Repository의 상속 계층도이다. 상속 계층도를 살펴보면 CRUD를 위한 Repositoy부터 Paingnation, Sorting 등 다양한 메소드를 제공하는 여러 Repository를 JPA Repository가 상속받고 있는 것을 볼 수 있다. 아래는 JpaRepository interface이다. @NoRepositoryBean public interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepository, QueryByExample.. 2024. 1. 15.
Entity 개념 & 기본 사용법 @Entity ORM(Object-Relational Mapping)은 자바의 객체와 데이터베이스의 데이터를 Mapping 해주는 개념이다. 비영속성인 자바의 객체를 ORM을 통해 DB에 자동으로 매핑을 해주어 영속화시켜줌으로써, 자바의 객체만으로도 데이터 베이스의 데이터를 다룰 수 있게 되는 것이다. 이 때에, DB와 Mapping이 되는 자바 객체를 Entity라고 한다. JPA는 이러한 Entity를 이용하여 Table을 생성하기 때문에 자바 객체가 Entity임을 알려주어야 하는데, 그를 위한 annotation이 @Entity이다. @Data @NoArgsConstructor @Entity public class Student { } 위와 같이 자바의 클래스 위에 @Entity를 붙여주면 해당 .. 2024. 1. 11.
JPA 란 JPA란 Java Persistence API의 약자로써, 자바 진영에서 ORM 기술의 표준으로 채택하고 있는 인터페이스의 모음이다. 본격적으로 JPA 가 무엇인지에 대해서 알아보기 전에 먼저 JPA의 이름안에 들어가 있는 Persistence 가 무엇인지에 대해 먼저 알아야 한다. Persistence Persistence는 영속성으로서, 데이터를 생성한 프로그램이 종료되더라도 '사라지지 않는' 데이터의 특성을 의미한다. 어떻게 프로그램의 메모리 상에 존재하는 데이터가 종료되도 사라지지 않을 수 있을까?? 그 이유로는 메모리 상에 존재하는 데이터를 데이터베이스 등을 활용하여 데이터를 보관하고 관리할 수 있는 서버에 따로 저장하기 때문이다. 대표적으로 MySQL, MariaDB 등 여러 데이터 베이스 시.. 2024. 1. 5.
728x90
반응형