스프링 3장 | 스프링 부트에서 JPA로 데이터베이스 다뤄보자

미루미·2022년 7월 31일
0

springbootStudy

목록 보기
2/5

책을 읽으면서 공부한 내용입니다.
책 제목: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

3장에서 배운 내용 (책 124쪽)

3-1. JPA / Hibernate / Spring Data Jpa의 관계
3-2. Spring Data Jpa를 이용하여 관계형 데이터베이스를 객체지향적으로 관리하는 방법
3-3. Jpa의 더티 체킹을 이용하면 Update 쿼리 없이 테이블 수정이 가능하다는 것
3-4. Jpa Auditing을 이용하여 등록/수정 시간을 자동화하는 방법

3-1. JPA / Hibernate / Spring Data Jpa의 관계

JPA는 인터페이스이다. 이 인터페이스를 구현하는 구현체로는 Hibernate, Eclipse Link 등이 있다. 스프링에서는 구현체를 직접 다루지 않고, 이를 추상화시킨 Spring Data JPA 모듈을 이용한다. 셋의 관계는 다음과 같이 표현할 수 있다.

JPA <- Hibernate <- Spring Data JPA

이러한 방식으로 Spring Data JPA를 이용하면 Hibernate 외의 다른 구현체로 교체하기가 쉽고, 또 관계형 데이터베이스 외의 다른 저장소로 교체하기도 쉽다.

  • JPA의 장점: CRUD(create, read, update, delete) 쿼리를 직접 작성할 필요가 없다. 그리고 객체지향 프로그래밍이 쉽다.
  • JPA의 단점: 높은 러닝 커브

러닝 커브(learning curve)란 사람들이 가진 경험의 양과 업무에서의 능숙도 사이의 관계를 그래프로 나타낸 것이다.
기울기가 큰, 가파른 경사의 곡선은 학습하기에 어려움 또는 많은 노력을 들인다고 하여도 그만큼 능숙도가 오르지 않음을 의미한다.

3-2. Spring Data Jpa를 이용하여 관계형 데이터베이스를 객체지향적으로 관리하는 방법

build.gradle에 의존성 추가

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('com.h2database:h2')
  • h2
    인메모리 관계형 데이터베이스이다. 메모리에서 실행되기 때문에 앱을 시작할 때마다 초기화된다는 점을 이용하여 테스트 용도로 많이 사용된다

3-4. Jpa Auditing을 이용하여 등록/수정 시간을 자동화하는 방법

JPA Auditing: 데이터의 생성시간과 수정시간을 코드를 간단히 한다.

  1. BaseTimeEntity 클래스 생성
  • BaseTimeEntity 클래스: 모든 엔티티의 상위 클래스가 되어 엔티티들의 createdDate, modifiedDate를 자동으로 관리한다.
@Getter
@MappedSuperClass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseTimeEntity {
	
    @CreatedDate
    private LocalDateTime createdDate;
    
    @LastModifiedDate
    private LocalDateTime modifiedDate;
}
  • @CreatedDate: 엔티티가 생성되어 저장될 때 시간이 자동 저장된다.
  • @LastModifiedDate: 조회한 엔티티의 값을 변경할 때 시간이 자동 저장된다.
  1. BaseTimeEntity를 상속
public class Posts extends BaseTimeEntity {}
  1. Application(실행) 클래스에 활성화 어노테이션 추가
@EnableJpaAuditing
@SpringBootApplication
public class Application {}
  • @EnableJpaAuditing: JPA Auditing을 활성화한다.
profile
미루미루지마

0개의 댓글