<TIL> 26. JPA 기초

YUJIN LEE·2023년 2월 25일
0

개발log

목록 보기
22/149

객체지향 모델과 관계형 데이터베이스의 패러다임 불일치


1. 밀도문제는 데이터베이스의 데이터가 더 정형화되어있고 까다롭다
2. 관계형 데이터 베이스에는 상속의 개념이 x.
하지만 우리가 이미 배웠던 것처럼 상속은 객체의 역할과 구현을 분리해주기 위해 객체 지향 프로그래밍에서 가장 핵심적인 기능 중 하나.

이러한 패러다임 불일치에서 기인한 문제들과, 반복적이고 번거로운 어플리케이션 단에서의 쿼리 작업을 줄여주기 위해 ORM(객체 관계 매핑)기술들이 등장.

특히 JPA(Java Persistence API: 자바 ORM 기술에 대한 표준 명세)는
1. 쿼리를 자동으로 만들어준다.
2. 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 매우 단축된다.
3. 패러다임의 불일치를 해결.
4. 특정한 상황을 제외하고는 성능도 챙김. 최적화를위한 노력
5. 방언도 지원. 관계형 db이자 표준을 준수한 sql을 지원한다면, jpa가 방언들도 알아서 처리.

DB의 연관관계 이해

자바는 객체와 레퍼런스로, 데이터베이스는 테이블사이의 관계(FK)로 정보 사이의 연관관계를 표현하고 처리.
두 방식의 차이를 해결하기 위해서는 JPA에는 "Java 어플리케이션 상에서", "데이터베이스의 연관관계"를 표현해주기 위한 장치를 가짐

  • DB의 연관관계 체크사항
  • JPA가 제공하는 연관관계는 결국 DB의 연관관계를 표현하기 위함
  • 따라서 먼저 DB의 연관관계를 이해해야함
  • DB의 연관관계는 비즈니스 요구사항에 맞춰 이루어짐

JPA 연관관계

JPA 연관관계 설정방법

  • JPA의 경우 Entity 클래스의 필드 위에 연관관계 어노테이션(@)을 설정해 주는 것만으로 연관관계가 형성.

상속을 이용해서 생성 수정시간 관리

데이터의 생성(created_at), 수정(last_modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용.
각각의 엔티티의 생성 수정 시간을 매번 작정하는건 매우 귀찮음.
그래서,
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
이 어노테이션을 사용해 객체를 생성.
extends Timestamped로 객체를 상속받으면, 자동으로 생성, 수정시간을 데이터베이스에 입력하고, 필요하면 해당값을 편하게 GET할 수 있다.

Spring Data JPA 이해

  • JPA를 편리하게 사용하기 위해, 스프링에서 JPA를 Wrapping
  • 스프링 개발자들이 JPA를 사용할 때 필수적으로 생성해야 하나, 예상 가능하고 반복적인 코드를 -> Spring Data JPA 가 대신 작성.
  • Repository 인터페이스만 작성하면, 필요한 구현은 스프링이 대신 알아서 해줌.

Spring Data JPA) 기본 제공해 주는 기능

  • .save() - 생성
  • .findAll() - 조회
  • .count() - 개수 조회
  • .delete() - 삭제

ID 외의 필드에 대한 추가기능 -> interface만 선언해주면, 구현은 Spring Dat JPA가 대신.

Spring Data JPA 추가기능 구현방법은 공식문서에 명시
Spring Data JPA 공식문서

@Getter - 값을 가져올 때 씀
@NoArgsConstructor - 기본생성자 만들어줌
@OneToMany - ex) 음식 1개에 주문이 여러개

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글