본문 바로가기
프로그래밍/Spring

[JPA] 왜 JPA를 사용해야 하는가?

by YuminK 2023. 8. 10.

SQL 중심적인 개발의 문제점

1. CRUD 코드를 매번 작성해야 한다.

2. 자바 객체를 SQL로, SQL을 자바 객체로

3. 객체와 관계형 데이타베이스의 패러다임 불일치

 

만약 중간에 필드라도 추가되면? 관련된 모든 쿼리를 수정해야 한다...

public class Member { private String memberId; private String name; ... }

 

INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES SELECT MEMBER_ID, NAME FROM MEMBER M UPDATE MEMBER SET …

 

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

1. 상속

2. 연관관계

3. 데이터 타입

4. 데이터 식별 방법

객체를 테이블에 저장하려면... 각각 객체에 맞는 쿼리를 작성해서... 

 

연관관계

객체를 사용할 때는 ID값이 아니라 실제 객체를 참조하고 DB에 저장할 때 ID로 변환이 된다면?

 

객체가 참조하는 객체가 있는지 없는지 확신할 수 있을까? 

 

객체의 참조에는 Query가 필요하다. 

동일한 쿼리로 참조한 객체는 동일한 객체로 인식이 되어야 한다. (Table내 데이터 처럼) 

하지만 자바에서 주소값이 다른 두 객체(데이터는 같음)가 동일할 수 있을까? (==)

 

결론

객체 답게 모델링을 할수록 매핑 작업이 늘어난다.

객체를 자바 컬랙션에 저장하듯이 DB에 저장할 수 없을까?

 

JPA(Java Persistance API)

자바 진영의 ORM 기술 표준

 

ORM이란?

1. 객체 관계 매핑(object-releational mapping)

2. 객체는 객체대로 설계

3. 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다.

4. ORM 프레임워크가 중간에 매핑을 해준다. 

5. 대중적인 언어에는 대부분 ORM 기술이 존재

 

왜 JPA를 사용해야 하는가?

1. SQL 중심적인 개발에서 객체 중심으로 개발할 수 있다.

2. 생산성이 보장된다.

3. 유지보수가 쉽다.

4. 객체와 테이블간의 패러다임 불일치를 해결한다. 

 

JPA가 패러다임 불일치를 해결한다.

객체 지향 프로그래밍에 맞게 개발을 하면, 테이블을 관리해준다. (JOINED, SINGLE_TABLE, CLASS_PER_TABLE 방식)

 

쿼리를 직접 작성하지 않아도 JPA가 관리한다. 

JPA는 즉시 로딩 혹은 지연 로딩을 지원하여 객체를 참조하고 있음을 신뢰할 수 있다.

 

JPA는 동일한 트랜잭션에서 조회한 엔티티가 같음을 보장한다.  

 

JPA의 성능 최적화 기능

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

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

3. 지연 로딩

 

동일한 객체를 찾아올 때, 캐시를 활용하여 추가적인 쿼리를 날리지 않는다. 

commit 순간에 모아서 쿼리를 보낸다. 

출처: 자바 ORM 표준 JPA 프로그래밍 강의

'프로그래밍 > Spring' 카테고리의 다른 글

[JPA] 상속관계 매핑  (0) 2023.08.10
[JPA] 영속성 관리  (0) 2023.08.10
[Spring] 스프링 MVC 구조  (0) 2023.08.10
[JPA] 테이블 연관관계 정리  (0) 2023.08.06
[JPA] 어노테이션 정리  (0) 2023.08.05

댓글