시뻘건 개발 도전기

JPA란? 본문

API/JPA

JPA란?

시뻘건볼때기 2020. 9. 24. 09:44
반응형

[그림 1] JPA 동작 원리

  JPA(Java Persistence API)를 알기 위해서는 ORM(Object-Relational Mapping)을 알아야 한다. ORM은 객체와 관계형 데이터베이스를 맵핑해주는 녀석이다. 이전에 언급했듯이 자바의 객체와 관계형 데이터베이스간의 차이가 문제를 일으킬수 있다. 이 문제를 최소화 시키기 위해서 ORM이라고 하는 기술이 등장했다. JPA가 바로 자바 플랫폼의 ORM 표준 기술이다.

  JPA는 [그림 1]과 같이 동작하게 되는데, JPA가 자바 애플리케이션과 JDBC 사이에서 하는 일은 다음과 같다.

  • 패러다임 불일치 해결 (DB 연동 시 유의할점 #2 참고)
  • SQL query 생성
  • Entity 분석 (추 후에 이야기 하겠지만 여기서의 엔티티란 테이블을 객체화 시킨 것을 이야기 한다.)

우리는 SQL query를 직접 생성하지 않아도 될 뿐더러 앞에서 이야기 되었던 문제점들을 신경쓰지 않으면서 객체지향적 개발에 집중 할 수 있다. 벌써 JPA를 써야하는, 쓸 수밖에 없는 이유가 나왔다. 그치만 또 다른 장점을 살펴보자.

  • 생산성
    • 코드의 반복 최소화를 도와준다.
    • 다음 코드를 보자. 조회와 저장하는 SQL query가 아닌 메소드를 사용함으로서 반복적인 코드 생성을 하지 않을 수 있다. 즉, 우리는 데이터베이스 관점이 아닌 객체 관점으로 개발 할 수 있다는 점이다.
jpa.persist(member); // 저장
jpa.find(id); // 조회

 

  • 유지보수 용이성
    • 테이블 스키마가 변경이 되면 우린 코드에서도 CRUD에 대한 대부분의 query를 수정하고 테스트해야하는 노동력을 요구했다. 그러나 JPA는 이런 과정을 알아서 처리해주기 때문에 우리가 수정해야할 코드의 양이 확연하게 줄어들 수 있다.
  • 성능 이슈 해결
    • 데이터베이스를 연동할 때 고려해야할 점 중 하나인 성능은 최적화 정도에 따라서 차이가 날 수 있다. 데이터베이스와 java application 사이에 JDBC라는 계층 뿐 아니라 JPA 계층을 함께 가지고 있으면 많은 관점에서 최적화를 시도할 수 있다.
    • 다음 코드를 보자. 만약 JDBC 계층만을 두었을 때는 조회의 SQL query를 데이터베이스에 두 번 날려서 객체를 받아왔을 것이다. 그러나 위와 같이 jpa를 사용했다면 jpa는 첫 find()에서 받아온 객체를 재사용한다.
String id = "dotori";
Member member1 = jpa.find(id);
Member member2 = jpa.find(id);

 

  • 패러다임의 불일치 해결
    • 앞서 이야기 했던 것 처럼 상속과 연관관계, 객체 그래프 탐색, 비교 등과 같은 문제를 해결할 수 있다.
  • 데이터 접근 추상화와 벤더 독립성
    • 많은 RDB 중에 모두가 사용 법(페이징 처리 등)이 같지는 않다. 그러므로 데이터베이스를 사용하기 위해서는 해당 데이터베이스 사용 법을 알아야 하고, 해당 기술이 종속되어 버린다. 그러므로 데이터베이스의 변경은 매우 어렵다고 볼 수 있다.
    • JPA는 java application과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 데이터베이스 기술에 종속되지 않는다. 데이터베이스를 변경하게되면 JPA에게 "우리 이 데이터베이스로 바꿨어!"라고 알려주기만 하면 된다. 다음 그림을 참고하자.

[그림 2] JPA 지원 RDB 방언

반응형

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

Entity와 영속성 #2  (0) 2020.11.29
Entity와 영속성 #1  (0) 2020.11.29
JPA를 사용하기 위한 설정과 동작 원리  (0) 2020.09.29
DB 연동 시 유의할 점 #2  (0) 2020.09.18
DB 연동 시 유의할 점 #1  (0) 2020.09.18
Comments