꾸양!
일단 시작.
꾸양!
💁‍♀️ 깃허브 링크
전체 방문자
오늘
어제
  • 분류 전체보기 (112)
    • STUDY (85)
      • JAVA (36)
      • Algorithm (1)
      • SpringBoot (9)
      • SQL (4)
      • GIT (16)
      • Front (1)
      • JPA (9)
      • Trouble Shooting (9)
    • SPARTA Project (26)
      • WIL (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Repository
  • 랠릿
  • 코드효율성
  • 트러블슈팅
  • 인프콘2024
  • intellij
  • 클린코드
  • 숫자짝꿍
  • 잔디돌려줘
  • 인프런
  • 프로그래머스

최근 댓글

최근 글

hELLO · Designed By 정상우.
꾸양!

일단 시작.

STUDY/JPA

[1-2] JPA 소개

2023. 6. 29. 20:32

인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트

JPA란?

Java Persistence API
자바 진영의 ORM 기술 표준


ORM : Object-relational mapping(객체 관계 매핑)

객체는 객체대로, 관계형 DB는 관계형 DB대로 설계
ORM 프레임워크가 중간에서 객체와 관계형 DB를 매핑
대중적인 언어에는 대부분 ORM 기술이 존재


JPA를 왜 사용해야 하는가?

SQL 중심적 개발에서 객체 중심 개발로!

1. 생산성

기존 Entity를 쿼리 문이 아니라 간단한 메서드로 필요한 작업을 수행할 수 있다.
persist(), find(), set(), remove()

2. 유지보수

예전에는 필드 변경시 모든 쿼리를 수정하여야 했는데, JPA에서는 필드 변경만 해주면 쿼리는 JPA가 처리해준다.

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

1. 상속
원래는 객체 상속 관계를 테이블 슈퍼 타입, 서브 타입 관계로 나타내어 insert를 해 줄 때, 부모에게도, 자식에게도 insert문이 두 번이 들어갔는데 JPA를 쓰면 persist(자식); 메서드만 써주면 나머지는 JPA가 처리해준다. 조회를 할 때도 find() 메서드를 하면 알아서 부모 테이블과 Join하여 가져온다.

2. 연관관계
Setter로 연관관계를 저장할 수 있다.

3. 객체 그래프 탐색
예전에는 어디까지 가져오는 건지 몰랐으므로 내부 쿼리를 직접 확인해 보고 하거나 직접 join을 다 해줘서 조회를 해왔어야 했는데 JPA를 사용하면 객체 그래프 탐색이 자유롭다.
>> 그러면 처음부터 다 JOIN시켜버리는 건가? 아니다. '지연 로딩'을 사용하여 성능 최적화
>> 신뢰할 수 있는 엔티티!

4. 비교하기
동일한 트랜잭션 안에서 조회하는 Entity는 같은 객체이다.!
예전에 구현한 메서드에서 같은 객체인데 다르다고 나와서 왜 다르지? 했었는데 transaciton 안에서 조회를 하지 않아서 그랬나보다!

4. 성능 최적화 기능

1. 1차 캐시와 동일성 보장
* 같은 트랜잭션 안에서 같은 엔티티를 반환 - 약간의 조회 성능 향상(캐싱 관련)
조회했던 엔티티는 JPA가 캐시에 저장해 놓기 때문에 가능하다
첫 번째 조회할 때는 SQL을 써서 조회해 오고, 다음 같은 엔티티를 조회할 때는 캐시에 있던 엔티티를 꺼내온다.

2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
INSERT
트랜잭션을 commit하는 순간 Insert SQL을 모아서 보낸다.
> 네트워크 통신 비용이 줄어든다.

3. 지연 로딩과 즉시 로딩
지연 로딩 : 객체가 실제 사용될 때 로딩
즉시 로딩 : JOIN SQL로 한 번에 연관된 객체까지 미리 조회
>> 얘를 조회할 때 항상 얘를 같이 조회하네 싶으면 즉시 로딩으로 한번에 가져와서 네트워크 통신 비용 줄이기!
>> 현업에서는 일단 지연 로딩으로 세팅하고 성능 최적화를 위해 즉시 로딩으로 바꿔주는 식으로 작업!

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

저작자표시

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

[3-3] 플러시  (0) 2023.07.05
[3-2] 영속성 컨텍스트의 이점 (+Batch)  (0) 2023.07.04
[3-1] 영속성 컨텍스트란?  (0) 2023.07.03
[2-1] JPA 시작하기  (0) 2023.06.30
[1-1] JPA가 나오게 된 배경 - SQL 중심적인 개발의 문제점  (0) 2023.06.28
    'STUDY/JPA' 카테고리의 다른 글
    • [3-2] 영속성 컨텍스트의 이점 (+Batch)
    • [3-1] 영속성 컨텍스트란?
    • [2-1] JPA 시작하기
    • [1-1] JPA가 나오게 된 배경 - SQL 중심적인 개발의 문제점
    꾸양!
    꾸양!
    차근차근 한 발자국씩.

    티스토리툴바