[3] JPA 프로그래밍 (1) - SQL 중심적인 개발의 문제점 / JPA란 ?

김정욱·2021년 3월 2일
0

[3] JPA 프로그래밍

목록 보기
1/15
post-thumbnail

SQL 중심적인 개발의 문제점

  • SQL에 의존적인 개발을 하게됨
  • 패러다임의 불일치
    • 객체 지향 --> 필드와 메서드로 객체를 구성해서 사용하는 것에 초점
    • 관계형 DB --> 데이터를 잘 정규화해서 저장하는 것에 초점

객체와 관계형 DB의 차이

1. 상속

  • 객체
    • 저장 : 공통된 특징을 부모로 정의한 후 자식이 상속받아 특징을 가지는 필드 및 메서드 정의
    • 조회 : .을 통해서 접근해서 바로바로 사용
  • 관계형 DB
    • 저장 : 부모와 자식을 다른 테이블로 저장해야만 한다
    • 조회 : 모든 필드가 필요할 때 반드시 JOIN을 써야한다 (객체와 다르게 비용이 든다)

, 객체를 효율적으로 설계해도 관계형 DB에 넣게 되면 구조적 차이 때문에
추가적인 반복된 과정이 많이 필요


2. 연관관계

  • 객체
    : 일방적인 방향으로 접근이 가능하다 (단방향)
  • 관계형 DB
    : key를 통해서 양방향으로 접근이 가능하다 (양방향)

[ 정리 ]

  • 객체다운 모델링을 할 수록 SQL 매핑 작업만 늘어난다
    ex) 매우 빈번한 JOIN의 발생
  • 결과적으로 SQL매핑 작업에 의한 시간이 많이 소요되는 큰 단점이 존재
  • 이러한 구조적 차이를 극복하기 위해 Java의 Collection에 저장하듯 하기 위한 결과물이 바로 JPA

JPA란 ?

[ 정의 ]

  • Java Persistence API
  • 자바 진영의 ORM 기술의 표준
  • ORM ?
    • Object-Relational Mapping
    • 객체는 객체대로 설계 / RDB는 RDB대로 설계하게 도와주는 역할
    • ORM 프레임워크가 중간에서 역할을 수행함

[ 배경 ]

  • 과거에도 EJB라는 ORM방식의 Java 표준이 있었다.
    하지만, 기술의 완성도가 낮고 비효율적
  • 그래서, 개빈 킹이라는 개발자가 직접 ORM을 만든 것이 바로 Hibernate
  • Hibernate를 오픈소스로 많이 개발되고, 사용되다 보니 Java에서 개빈 킹을 데리고 가서 Hibernate와 매우 흡사하게 만든 java 표준이 바로 JPA
  • JPA는 사실 표준으로써 내용은 수많은 인터페이스로 구성되어 있음
    즉, 구현하는 구현체가 필요하고 현재 대중적으로 Hibernate를 사용한다

[ JPA 동작 원리 ]

  • 우리가 개발하는 JAVA 애플리케이션JDBC API사이에서 우리대신 SQL Mapping 과정을 수행
  • 개발자가 더이상 SQL Mapping에 시간을 낭비하지 않아도 된다

JPA를 사용해야 하는 이유 !

1) 생상성 향상

  • CRUD과정이 매우 간단하게 해결된다

2) 유지보수

  • 갑자기 DB에 column이 추가되어도 쿼리를 직접 수정할 일이 없음
  • SQL을 작성하지 않기 때문에 유지보수가 편해진다

3) 패러다임의 불일치 해결

  • 우리는 find()를 통해 자식객체의 타입을 명시해주기만 하면 된다
    --> JPA는 내부적으로 JOIN을 거쳐서 알아서 처리해줌!
  • persist()를 통해 저장하는 하나의 쿼리를 사용
    --> JPA가 내부적으로 연관된 하위 객체까지 모두 생성해준다

JPA의 성능 최적화 기능

1) 1차 캐시와 동일 성 보장

  • 같은 Transaction 에서는 같은 객체를 조회할 때 캐시처럼 동작
    --> 반드시 같은 Entity 반환을 보장 & 조회 성능 향상

2) 트랜잭션을 지원하는 쓰기 지연

  • 특징이 비슷한 쿼리들을 모아서 한번에 처리 (Batch 방식)
    --> 네트워크를 여러번 통신할 일을 한 번으로 줄일 수 있음

3) 지연로딩 & 즉시로딩

  • 지연로딩
    : 참조된 객체를 실제 사용되는 시점에서 조회하는 방법
       (참조된 객체의 사용이 적을 때 효율적)
  • 즉시로딩
    : 참조된 객체를 최초 조회시 함께 조회하는 방법
        (참조된 객체의 사용이 많을 때 효율적)
profile
Developer & PhotoGrapher

0개의 댓글