본문 바로가기

CS/자바 ORM 표준 JPA 프로그래밍

[JPA] JPA 소개

해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다.

 

1. SQL을 직접 다룰 때 발생하는 문제점

자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 데이터 저장소를 사용한다. 

데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 특히 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL를 데이터베이스에 전달해야 하므로 서버 개발자들은 능숙하게 SQL을 다룰 줄 알아야 한다.

 

1) 반복적인 작업

① 반복, 반복 그리고 반복

데이터베이스는 기본적으로 객체 구조와는 다른 구조이므로 객체를 데이터베이스에 직접 저장하거나 조회할 수 없다. 그렇기에 개발자가 이를 위해서는 직접 SQL JDBC API 사용해서 객체지향 애플리케이션과 데이터베이스 중간에서 변환 작업을 해줘야 한다. 과정에서 많고 반복적인 SQL JDBC API 코드로 작성해야 한다.

 

 SQL에 의존적인 개발

SQL 직접 다루므로 SQL 모든 것을 의존하게 되고 개발자들은 결국 DAO 열어 어떤 SQL 실행되고 어떤 객체들이 함께 조회되는지 일일이 확인해야 한다. 결국 엔티티와의 강한 의존관계때문에 다음과 같은 문제점을 가진다.

  • 진정한 의미의 계층 분할이 어렵다
  • 엔티티를 신뢰할 수 없다
  • SQL에 의존적인 개발을 피하기 어렵다

 

 JPA에서의 문제 해결

JPA 사용하면 JPA 제공하는 API 이용해 객체를 데이터베이스에 저장하고 관리할 있다.

 

  • 저장 기능
jpa.persist(member); // 저장

persist() 메소드를 호출하면 JPA 객체와 매핑정보를 보고 적절한 INSERT SQL 생성한다. 그리고 SQL 데이터베이스에 전달하여 객체를 저장한다.

 

  • 조회 기능

 

Member member = jpa.find(Member.class, memberId); // 조회

find() 메소드를 호출하면 JPA 적절한 SELECT SQL 생성해서 데이터베이스에 전달한다. 결과로 Member 객체를 생성해서 반환한다.

 

  • 수정 기능

 

Member.setName(“이름변경”); // 수정

JPA 별도의 수정 메소드를 제공하지 않는다. 대신에 객체를 조회해서 값을 변경하면 트랜잭션을 커밋할 데이터베이스에 적절한 UPDATE SQL 전달된다. (자세한 내용은 3장에서)

 

 

  • 연관된 객체 조회
Team team = member.getTeam(); // 연관된 객체 조회

JPA 연관된 객체를 사용하는 시점에 적절한 SELECT SQL 실행하여 조회할 있다.

 

 

 

2) 패러다임의 불일치

객체와 관계형 데이터베이스는 지향하는 목적이 서로 달라 둘의 기능과 표현 방법도 다르다. 이를 패러다임 불일치 문제라 한다. 결국 애플리케이션은 자바라는 객체지향 언어로 개발하고 데이터는 관계형 데이터베이스에 저장해야 한다면, 패러다임의 불일치 문제는 개발자가 중간에서 해결해야 한다.

 

 

① 상속

객체 상속 모델 및 테이블 모델

 

객체는 상속 기능을 가지지만 테이블은 상속 기능이 없다.

 

② 연관관계

연관관계

객체는 참조를 사용해서 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회한다. 반면, 테이블은 외래 키를 사용해 다른 테이블 연관관계를 가지고 조인을 사용해서 연관된 테이블을 조회한다.

 

객체 그래프 탐색

객체에서 회원이 소속된 팀을 조회하면 참조를 사용해서 연관된 팀을 찾으면 되는데, 이를 객체 그래프 탐색이라 한다. SQL을 직접 다루면 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해지는데 이는 객체지향 개발자에게는 너무 큰 제약이다.

 

④ 비교

 

데이터베이스는 기본 키의 값으로 구분하지만 객체는 동일성 비교와 동등성 비교 두 가지 방법으로 비교한다.

 

 


2. JPA란?

1) JPA 정의

JPA는 자바 진영의 ORM 기술 표준이다. JPA는 애플리케이션과 JDBC 사이에서 동작한다.

JPA

ORM이란?
객체와 관계형 데이터베이스를 매핑하는 프레임워크
단순히 SQL을 개발자 대신 생성해서 데이터베이스에 전달하는 것뿐만 아니라 다양한 패러다임의 불일치 문제들을 해결

 

 

2) JPA를 사용해야 하는 이유

생산성

지루하고 반복적인 코드와 CRUD SQL 개발자가 직접 작성하지 않아도 된다.

 

유지보수

개발자가 작성해야 했던 SQL, JDBC API 코드를 JPA가 대신 처리해준다.

 

③ 패러다임의 불일치 해결

 

상속, 연관관계, 객체 그래프 탐색, 비교 문제의 패러다임 불일치 문제 해결

 

④ 성능

 

JPA 애플리케이션과 데이터베이스 사이에서 동작하여 다양한 성능 최적화 기회를 제공한다.

  • 동일한 객체를 대상으로 한 쿼리는 한 번만 실행하고 객체를 재사용한다.

 

 

 

⑤ 데이터 접근 추상화와 벤더 독립성

벤더 독립성

 

관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다. JPA 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다.

 

 

 

 

 

'CS > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

[JPA] 프록시와 연관관계 관리  (0) 2024.01.08
[JPA] 연관관계 매핑  (1) 2024.01.07
[JPA] 엔티티 매핑  (1) 2023.11.02
[JPA] 영속성 관리  (1) 2023.10.31