Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

우리는 Calisthenics 입니다!

프로젝트를 위한 JPA 공부 정리 본문

Backend/JPA

프로젝트를 위한 JPA 공부 정리

yesforlog 2021. 7. 29. 18:28

객체와 관계형 데이터베이스의 차이

  1. 상속

객체는 상속관계가 있지만, 관계형

  1. 연관관계

객체는 reference를 가지고 있다. 관계형 데이터

  1. 데이터 타입
  2. 데이터 식별 방법

JPA

  • Java Persistence API
  • Java ORM 표준

ORM

  • Object-Relational Mapping(객체 관계 매핑)
  • 객체와 RDB를 ORM 프레임워크가 중간에서 매핑
    • 객체는 객체대로 설계, RDB는 RDB대로 설계

JPA를 사용해야 하는 이유

  • 객체 중심으로의 개발
  • 생산성
  • 유지보수
  • 패러다임 불일치 해결
  • 성능

지연 로딩과 즉시 로딩

  • 지연 로딩: 객체가 실제 사용될 때 로딩
  • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회

hibernate.hbm2ddl.auto 속성

  • 운영 장비에는 절대 create, create-drop, update를 사용하면 안된다. 운영 중인 데이터베이스의 테이블이나 컬럼을 삭제할 수 있기 때문
  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

@OneToMany의 mappedBy

  • 객체에는 양방향 연관관계가 없다. 서로 다른 단방향 연관관계 2개를 애플리케이션 로직으로 양방향인 것처럼 보이게하는 것일 뿐

    ⇒ 데이터베이스 테이블은 외래 키 하나로 양방향 연관관계(조인) 가능

  • Entity를 양방향 연관관계로 설정하면 객체의 참조는 둘인데 외래 키는 하나가 되어서 둘 사이에 차이가 발생

이 때문에, JPA에서는 두 객체 연관관계 중 하나를 정해서 테이블의 외래키를 관리 = 연관관계의 주인이라고 함

양방향 매핑 - 연관관계의 주인

  • 양방향 연관관계 매핑 시, 두 연관관계 중 하나를 연관관계의 주인으로 정해야 한다.

    → 연관관계의 주인만이 데이터베이스 연관관계와 매핑되고 외래키를 관리(등록, 수정, 삭제)할 수 있다. 주인이 아닌 쪽은 읽기만 할 수 있고, 외래 키를 변경하지 못한다.

  • 연관관계를 주인으로 정하기 위해서 mappedBy 속성 사용

    • 주인은 mappedBy 속성을 사용하지 않는다.
    • 주인이 아니면 mappedBy 속성을 사용해서 속성의 값으로 연관관계의 주인을 지정해야 한다.
  • 연관관계의 주인을 정한다 = 외래 키 관리자를 선택한다.

⭐연관관계의 주인은 테이블에 왜래 키가 있는 곳으로 정해야 한다. 항상 @MaynToOne은 연관관계의 주인이 되므로 mappedBy를 설정할 수 없다.

양방향 연관관계 주의점

  • 주인이 아닌 곳에 입력된 값은 외래 키에 영향을 주지 않는다.

⭐연관관계의 주인이 아닌 객체에 값을 저장하면 외래 키에 아무 영향을 주지 않는다. 연관관계의 주인만이 외래 키의 값을 변경할 수 있다!

⇒ 하지만 객체 지향의 관점에서, 데이터베이스 뿐만이 아니라 객체도 함께 고려해야 하기 때문에, 양쪽 방향에 모두 값을 입력해주는 것이 안전하다!

  • 양방향 연관관계는 항상 서로를 참조해야 한다. 한 쪽만 참조하면 양방향 연관관계가 성립하지 않는다. 항상 서로 참조하게 하려면 연관관계 편의 메서드를 만드는 것이 좋다.

일대다 단방향

  • 일이 연관관계의 주인

  • 일대다 단방향 관계를 매핑할 때는 @JoinColumn을 꼭 사용해야 한다.

    → 이렇게 하지 않으면, JPA는 연결 테이블을 중간에 두고 연관관계를 관리하는 조인 테이블 전략을 기분으로 사용해서 매핑한다.(중간에 테이블 추가된다)

일대다 양방향은 존재하지 않으므로 다대일 양방향을 사용해야 한다.

일대일 관계

  • 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있다.
  • 외래 키에 데이터베이스 UNIQUE 제약조건이 추가되어야 한다.

참고 자료

'Backend > JPA' 카테고리의 다른 글

JPA Fetch 전략  (0) 2021.08.03