ORM
- Object-Relational Mapping
- Object : "객체"지향 언어 (자바, 파이썬)
- Relational : "관계형" 데이터베이스 (H2, MySQL)
- ORM은 이름 그대로 객체와 DB의 관계를 매핑 해주는 도구
- 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM(객체 관계 매핑)기술들이 등장
JPA
- 자바 ORM 기술에 대한 표준 명세
- JPA는 애플리케이션과 JDBC 사이에서 동작되고 있음
- JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해줌
- 또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있음
하이버네이트(Hibernate)
- JPA 는 표준 명세이고, 이를 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트
- 스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용 중
Spring Data JPA
- JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈
- JPA를 추상화시킨 Repository 인터페이스를 제공
- Repository 인터페이스는 Hibernate와 같은 JPA구현체를 사용해서 구현한 클래스를 통해 사용
- Spring Data JPA에서는 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해줌
- Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면, 해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고, 이 클래스를 Spring ‘Bean’으로 등록함
- 따라서 인터페이스의 구현 클래스를 직접 작성하지 않아도 JpaRepository 인터페이스를 통해 JPA의 기능을 사용할 수 있음
Spring Data JPA 사용방법
JpaRepository 등록
- JpaRepository<"@Entity 클래스", "@Id 의 데이터 타입">를 상속받는 interface 로 선언
- Spring Data JPA에 의해 자동으로 Bean 등록됨
JPA Auditing 적용하기
Timestamped
- Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공함
- @MappedSuperclass
- JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우 createdAt, modifiedAt 처럼 추상 클래스에 선언한 멤버변수를 컬럼으로 인식할 수 있음
- @EntityListeners(AuditingEntityListener.class)
- 해당 클래스에 Auditing 기능을 포함시킴
- @CreatedDate
- Entity 객체가 생성되어 저장될 때 시간이 자동으로 저장됨
- 최초 생성 시간이 저장되고 그 이후에는 수정되면 안되기 때문에 updatable = false 옵션을 추가
- @LastModifiedDate
- 조회한 Entity 객체의 값을 변경할 때 변경된 시간이 자동으로 저장됨
- 처음 생성 시간이 저장된 이후 변경이 일어날 때마다 해당 변경시간으로 업데이트됨
- @Temporal
- 날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
- DB에는 Date(날짜), Time(시간), Timestamp(날짜와 시간)라는 세 가지 타입이 별도로 존재
- DATE : ex) 2023-01-01
- TIME : ex) 20:21:14
- TIMESTAMP : ex) 2023-01-01 20:22:38.771000
@SpringBootApplication이 있는 class에 @EnableJpaAuditing 추가!
JPA Auditing 기능을 사용하겠다는 정보를 전달해주기 위해 @EnableJpaAuditing 을 추가해야함
'🗂️ Study > 🌿Spring' 카테고리의 다른 글
영속성 컨텍스트 (0) | 2024.05.21 |
---|---|
Entity (0) | 2024.05.21 |
IoC Container & Bean (0) | 2024.05.21 |
IoC(제어의 역전) & DI(의존성 주입) (0) | 2024.05.21 |
3 Layer Architecture (0) | 2024.05.21 |