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

yurinnn·2024년 4월 7일
0

Java/Spring

목록 보기
12/13

SQL 중심적인 개발의 문제점

  • CRUD 쿼리를 무한 반복으로 작성해야 한다.
  • 기획에 의해 필드를 추가하게 되면 쿼리문을 다 고쳐야 한다.
  • 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치를 제공한다.
  • 객체를 영구 보관하는 다양한 저장소가 있다. 그 중 90% 이상의 현실적인 대안은 관계형 데이터베이스이다.

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

패러다임의 불일치 - 서로 연관관계가 다르다

상속

관계형 데이터베이스

  • 관계형 데이터베이스는 기본적으로 우리가 객체에서 생각하는 상속 관계가 없다.
  • 비슷하게 할 수 있다. 부모-자식 테이블을 만들고 JOIN 으로 필요한 데이터를 가져올 수 있다. 이를 슈퍼 타입, 서브 타입 관계라고 한다.
  • 대신 insert 할 때 2번 해야 하고, select 할 때는 JOIN SQL 을 작성해야 하기 때문에 복잡해진다. 그래서 DB에 저장할 객체에는 상속 관계를 쓰지 않는다.

객체

  • 자바 컬렉션에서는 list.add(album) 처럼 데이터를 넣으면 끝나고, Album album = list.get(albumId); 처럼 조회하면 끝이다.
  • 또한 부모 타입으로 조회 후 다형성을 활용할 수도 있다. Item item = list.get(albumId);

연관관계

관계형 데이터베이스

  • 테이블은 외래키를 사용한다.
    JOIN ON m.team_id = t.team_id
  • 아래와 같이 객체 다운 모델링을 하게되면 데이터베이스에 insert, select 하기가 까다롭다.

객체

  • 객체는 참조를 사용한다. 참조로 연관관계를 맺는다.
  • member.getTeam()
  • 객체 모델링해서 컬렉션에 저장하면 편하다.

객체 그래프 탐색

  • 계층의 아키텍처 - 다음 계층을 믿고 쓸 수 있어야 한다.
  • DAO 나 레파지토리의 데이터를 믿고 쓸 수 있어야 한다. 그렇기 때문에 뭐가 들어있는지 코드를 열어봐야 어떤 쿼리를 써서 세팅을 했는지 봐야 조회할 수 있는 데이터를 알 수 있다.
  • 즉, 진정한 의미의 계층 분할이 어렵고, 객체 지향적으로 모델링 할수록 매핑 작업이 늘어난다.

객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수는 없을까? 해서 나온 것이 JPA(Java Persistence API) 이다.

JPA(Java Persistence API)

순수 JDBC는 JDBC API와 SQL을 직접 작성해야 했다. 그러다 JDBC 템플릿이나 마이바티스 같은 SQL 매퍼가 등장하면서 코드가 많이 줄었지만, 여전히 단순 SQL 까지 작성해야 한다.
JPA 는 SQL 을 작성하지 않아도 되고, 관계형 데이터베이스를 쓴다면 거의 JPA 를 쓴다.
조단위의 거래 금액이 발생하는 다양한 서비스에서 이미 사용되고 있고 검증됐다.

  • JPA 에서 중요한 부분
    객체와 테이블을 잘 설계하고 매핑을 정확하게 해야 한다.

  • JPA 장점
    단순한 SQL 작성으로 시간을 낭비하지 않는다.
    남는 시간으로 더 많은 설계를 고민하고 더 많은 테스트 코드를 작성할 수 있다.
    코 드 리뷰 할 시간이 많아진다.

이 글은 김영한 강사님의 '자바 ORM 표준 JPA 프로그래밍' 강의를 들으며 작성하였습니다.

profile
슬기로운 개발 생활

0개의 댓글