ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. JPA 소개 - 패러다임의 불일치
    Back-End/JPA 2022. 3. 30. 15:29

    객체 vs  관계형 데이터베이스

    • 지향하는 목적이 서로 달라서, 둘의 기능과 표현 방법이 다르다.
    • 객체 구조를 테이블 구조에 저장하는 데는 한계가 존재한다.
    • 둘 사이의 패러다임 불일치 문제를 해결하기 위해 개발자는 많은 시간과 코드를 소비하게 된다.

     

    이제, 객체와 관계형 데이터베이스 간의 패러다임의 불일치로 발생하는 문제점 4가지를 살펴보자.

     

    1. 상속

    문제점(차이점)

    • 객체에는 상속 개념 존재하지만, 관계형 데이터베이스에는 존재하지 않는다.
    • 객체 저장 시, 부모 객체를 위한 INSERT SQL과 자식 객체를 위한 INSERT SQL을 모두 작성해야 한다.
      INSERT INTO ITEM ... INSERT INTO ALBUM ...
    • 객체 조회 시, 부모 테이블과 자식 테이블을 조인해서 조회하여야 한다.
      SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID;

     

    JPA 해결

    • 객체 저장
      jpa.persist(album)
    • 객체 조회
      Album album = jpa.find(Album.class, albumId);

     

    2. 연관관계

    문제점(차이점)

    • 객체는 참조 vs. 테이블은 외래 키
    • 객체: 참조가 있는 방향으로만 조회 가능
    • 테이블: 어느 방향이든 조인 가능
    • 테이블에 맞추어 객체를 모델링 → 객체지향의 특징을 잃어버린다.
    • 객체 지향 모델링 → 객체와 테이블 사이의 변환 작업이 필요하다
      • 저장 시, 외래 키 값을 찾아서 넣어줘야 한다.
      • 조회 시, 외래 키 값을 참조 변수로 변환해주어야 한다. (데이터베이스에서 조회하여 모든 정보를 입력해야 한다.)

     

    JPA 해결

    • 저장: 연관관계 설정 후 객체를 저장하면 된다.
      member.setTeam(team); 
      Team team = member.getTeam();
    • 조회: 외래 키를 참조로 변환하는 작업을 JPA가 대신 해준다.
      Member member = jpa.find(Member.class, memberId); 
      Team team = member.getTeam();

     

    3. 객체 그래프 탐색

    문제점(차이점)

    • 객체는 마음껏 객체 그래프를 탐색할 수 있어야 한다. 그러나 SQL을 직접 다루면 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해지는 큰 제약이 발생한다.
    • 그렇다고 객체와 관련된 모든 객체 그래프를 데이터베이스에서 조회해서 애플리케이션 메모리에 올려두는 것은 현실성이 없다.

    JPA 해결

    객체 그래프를 마음껏 탐색할 수 있다.

    → 연관된 객체를 사용하는 시점에 적절한 쿼리를 실행하여 연관된 객체를 마음껏 조회할 수 있다.

     지연 로딩 덕분!

    → 즉시 조회 / 지연 로딩 은 간단한 설정으로 정의 가능

     

     

    4. 비교

    문제점(차이점)

    • 데이터베이스는 기본 키의 값으로 row를 구분한다. 객체는 동일성 비교 (==, 객체 주소 값 비교)와 동등성 비교 (equals, 객체 내부 값 비교)가 존재한다.
    • 같은 row를 조회했더라도, 객체 인스턴스가 다르면 다르다고 인식된다.

    JPA 해결

    • JPA는 같은 트랜잭션일 때, 같은 객체가 조회되는 것을 보장한다.

     

     

     

     

    728x90

    'Back-End > JPA' 카테고리의 다른 글

    6. 다양한 연관관계 매핑  (0) 2022.04.30
    5. 연관관계 매핑 기초  (0) 2022.04.23
    4. 엔티티 매핑  (0) 2022.04.17
    3. 영속성 관리  (0) 2022.04.11
    2. JPA 시작  (0) 2022.04.03

    댓글

Designed by Tistory.