카테고리 없음

TIL 2024-11-14 (Spring 숙련 - 3주차)

myoma 2024. 11. 14. 21:54

- 학습한 내용

  • JPA
  • 영속성 컨텍스트
  • Entity
  • 변경 감지
  • flush
  • 단방향&양방향
  • Spring Data JPA
  • JPA Auditing

 

 


  • JPA
    • 객체 지향 프로그래밍 언어인 Java와 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결하여 데이터베이스 작업을 객체 지향적으로 수행할 수 있도록 지원한다.
    • ORM
      • 객체와 관계형 DB를 자동으로 Mapping하여 패러다임 불일치 문제 해결.
      • JDBC API
        • 데이터베이스와 상호작용 하기위해 JDBC API를 개발자 직업 사용.
        • 개발자가 아닌 JPA가 중간에서 개발자의 역할을 한다.
    • 사용 목적은 SQL 중심적인 개발에서 객체 중심으로 개발하기 위함.
      • 생산성
      • 유지보수성
      • 패러다임 불일치 문제 해결
      • 성능

 

  • 영속성 컨텍스트
    • 논리적인 개념
      • 눈에 보이지 않는 공간이 생긴다.
    • Entity Manager를 통해서 영속성 컨텍스트를 접근한다.
    • Entity(객체)를 영속성 컨텍스트에 영속(저장)한다.

 

  • Entity
    • JPA에서 Entity란 데이터베이스의 테이블을 나태나는 클래스.
    • 생명주기
      • 비영속(new/transient)
      • 영속(managed)
      • 준영속(datached)
      • 삭제(removed)

 

  • 변경 감지(Dirty Checking)
    • 영속성 컨텍스트가 엔티티의 초기상태를 저장하고 트랙잭션 커밋 시점에 현재 상태와 비교해 변경사항이 있는지 확인 가능.

 

  • flush
    • 자동 호출
      • 트랜잭션이 Commit 되는 시점에 자동으로 호출된다.
    • 수동 호출
      • em.flush() 통해 수동으로 호출할 수 있다.

 

  • 단방향
    • 객체 간의 관계가 한쪽에서만 참조될 수 있는 관계를 말한다.
    • 설정이 단순하고 유지 관리가 쉬우며 불필요한 데이터 접근을 방지할 수 있다.
  • 양방향
    • 객체 간의 관계가 양쪽에서 서로를 참조할 수 있는 관계를 의미한다.
    • 양쪽에서 데이터를 쉽게 접근할 수 있지만 관계를 관리할 때 한쪽에서 연관 관계를 설정하거나 삭제하지 않도록 주의가 필요한다.

 

  • Spring Data JPA
    • Spring Framework에서 JPA를 쉽게 사용할 수 있도록 제공하는 모듈
    • JPA 추상화 Repository 
      • CrudRepository, JpaRepository 인터페이스 제공
      • SQL이나 EntityManager를 직접 호출하지 않아도 기본적인 CRUD 기능을 손쉽게 구현 할 수 있다.
    • JPA 구현체와 통합
      • 일반적으로 Hibernate를 통해 자동으로 SQL이 생성된다,.
    • QueryMethods
      • Method 이름만으로 SQL을 자동으로 생성한다.
    • 트랜잭션 관리와 LazyLoading
      • 트랜잭션 기능을 Spring과 통합하여 제공

 

  • JPA Auditing
    • 엔티티의 생성 및 수정 시간을 자동으로 관리해주는 기능.
    • 사용하는 Annotation
      • @EnableJpaAuditing
        • JPA Auditing 기능을 활성화한다.
      • @MappedSuperClass
        • 해당 어노테이션이 선언된 클래스를 상속받는 Entity에 공통 매핑 정보 
      • @EntityListeners
        • Entity를 DB에 적용되기 전, 커스텀 콜백을 요청할 수 있는 어노테이션
      • @CreateDate
        • 생성 시점의 날짜를 자동으로 기록한다.
      • @LastModifiedDate
        • 수정 시점의 날짜를 자동으로 기록한다.
      • @Temporal
        • 날짜 타입을 세부적으로 지정한다.
      • @CreateBy
        • Entity 생성자의 정보를 자동으로 저장한다.
        • 생성하기 주체를 지정하기 위해서 AuditorAware<T>를 지정해야한다.
      • @LastModifiedBy
        • 마지막 수정자의 정보를 자동으로 저장한다.