JPA란 무엇일까

2022. 3. 23. 14:49개발 공부/JPA

[개인 공부]

객체 지향언어
관계형 DB - [Oracle, MySQL,...]

지금 시대는 객체를 관계형 데이터 베이스에 저장하는 시대
코드를 까보면 다 SQL 중심적으로 되어있음
무한 반복, 지루한 코드 

관계형 데이터 베이스를 쓰는 동안은 SQL을 피할 수 없다.

객체를 영구 보관하는 다양한 저장소는 현실적으로 관계형 데이터 베이스를 사용 해야한다. 

객체와 관계형 데이터 베이스의 차이 
1. 상속
2. 연관관계
3. 데이터 타입
4. 데이터 식별 방법

객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수는 없을까?
1980년대 부터 고민하면서 만들어 진것이 JPA

JPA (Java Persistence API)
자바 진영의 ORM 기술 표준 = Object-relational mapping(객체 관계 매핑)

ORM 
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터 베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 대중적인 언어에는 대부분 ORM 기술이 존재 

 

ORM은 객체와 RDB 두 기둥위에 있는 기술

JPA를 공부하더라도 관계형 데이터 베이스도 꾸준히 공부하자!


JPA : 자바 애플리케이션에서 JPA에 명령하면 동작하여 DB로 전달
쿼리를 개발자가 만드는것이 아니고 JPA가 만듬
★중요★ ->패러다임의 불일치 해결


EJB(자바표준) 겁나 썩음 개 빈킹 : 아 내가 만들어도 더 잘 만들겠다. 그래서

하이버네이트(오픈 소스) 만듬

자바에서 반성하고 하이버네이트 만든 개 빈킹 스카웃해서 JPA 만듬

 

JPA는 왜 사용해야 할까?

- SQL 중심적인 개발에서 객체 중심으로 개발

- 생산성

- 유지보수

- 패러다임의 불일치 해결

- 성능

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

- 표준

 

생산성

저장 : jpa.persist(member)

조회 : Member member = jpa.find(memberId)

수정 : member.setName("변경할 이름")

삭제 : jpa.remove(member)

 

유지보수

기존에는 필드 변경시 모든 SQL을 수정해야됨

ㄴ고객 : 아!! 생각해보니까 고객 정보에 핸드폰 정보도 추가해 주세요!!

  개발자 : 자바 및 SQL에 필드 오지게 추가 ㄱㄱ 고객님 개고생 ㄳㄳ

JPA는 알아서 실행해줌 (insert, join 등등)

 

ㅇJPA는 지연로딩을 사용하여 자유롭게 객체 그래프를 탐색가능 즉, 의심없이 믿고 사용가능.

ㅇ동일한 트랜잭션엔서 조회한 앤티티는 같음을 보장 

 

JPA의 성능 최적화 기능

1. 1차 캐시와 동일성(identity) 보장

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

3. 지연 로딩(Lazy Loding)