우테캠 미션 회고: JPA

이진호·2023년 1월 8일
0

미션 회고

목록 보기
2/2

JPA

객체 지향 패러다임

  • 시스템을 구성하는 객체들에게 적절한 책임을 할당하는 것

  • 상속

  • 객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다.

    class Line {
        Long id;
        String name;
        Set<LineStation> stations;
    }
    
    class LineStation {
        Station preStation;
        Station station;
    }
    
    class Station {
        Long id;
        String name;
    }

ORM

데이터베이스 스키마 자동 생성

Spring Data JPA

  • 메서드 이름으로 쿼리 생성

영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경.
  • 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리.
    • 1차 캐시
    • 동일성 보장
    • 트랜잭션을 지원하는 쓰기 지연
    • 변경 감지
    • 지연 로딩

엔티티의 생명주기

  • 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태
  • 영속(managed): 영속성 컨텍스트에 저장된 상태
  • 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제(removed): 삭제된 상태

@Transactional

  • 트랜잭션을 커밋하는 순간 영속성 컨텍스트를 데이터베이스에 반영

다대일, 일대다 연관 관계

양방향 연관 관계

연관 관계의 주인

  • 엄밀히 이야기하면 객체에는 양방향 연관 관계라는 것이 없다.
  • 서로 다른 단방향 연관 관계 2개를 양방향인 것처럼 보이게 할 뿐이다.
  • 연관 관계의 주인만이 데이터베이스 연관 관계와 매핑되고 외래 키를 등록, 수정, 삭제할 수 있다.
  • 주인이 아닌 쪽은 읽기만 할 수 있다.

연관 관계 편의 메서드

  • 양방향 관계에서 두 코드는 하나인 것처럼 사용하는 것이 안전하다.
  • 한 번에 양방향 관계를 설정하는 메서드를 연관 관계 편의 메서드라 한다.

일대다 단방향 매핑의 단점

  • 매핑한 객체가 관리하는 외래 키가 다른 테이블에 있다.
  • 연관 관계 처리를 위한 UPDATE SQL을 추가로 실행해야 한다.
  • 일대다 단방향 매핑보다는 다대일 양방향 매핑을 권장한다.

일대일 연관 관계

  • 일대일 관계는 주 테이블이나 대상 테이블 둘 중 어느 곳이나 외래 키를 가질 수 있기 때문에 외래 키를 어느 곳에 두어야 하는지 고민을 해야 한다.

주 테이블에 외래 키

  • 주 테이블이 외래 키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관 관계가 있는지 알 수 있다.

대상 테이블에 외래 키

  • 테이블 관계를 일대일에서 일대다로 변경할 때 테이블 구조를 그대로 유지할 수 있다

다대다 연관 관계

  • 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없- 다.
  • 보통 다대다 관계를 일대다, 다대일 관계로 풀어내는 연결 테이블을 사용한다.
  • 연결 테이블에 필드가 추가되면 더는 사용할 수 없다.

미션 PR

0개의 댓글