SpringBoot : Spring Data JPA ②

양현지·2023년 8월 30일
1

Web

목록 보기
10/10

1. JPA란?

① ORM

: 객체 지향 언어인 자바와 관계 지향의 데이터베이스의 패러다임의 불일치로 인해 발생하는 개발자들의 수고스러움을 덜고자 사용하는 개념
  • 자바의 객체(Class의 Instance)와 RDBMS사이의 연결 역할
  • 자바의 객체를 데이터베이스의 데이터로 매핑
  • 즉 자바는 자바대로, 데이터베이스는 데이터베이스 대로 설계 한 후 ORM은 중간에서 이 둘을 매핑하는 역할을 수행
  • 개발자로 하여금 자바 개발의 생산성을 높여준다.

② JPA

: ORM 기술의 표준 명세로 자바에서 제공하는 API 이다. 즉 JPA는 인터페이스 역할을 수행

③ JPA 구현체

2) JPA의 장/단점

① 장점

  • 특정 데이터베이스에 종속되지 않음
    : oracle, mysql, mariadb 등 어떤 데이터베이스를 사용하더라도 JPA 인터페이스 자체는 영향 받지 않는다.

  • 객체 지향적 프로그래밍
    : JPA를 사용하면 개발자는 객체 지향적으로 설계할 수 있도록 함

  • 생산성 향상
    : 데이터베이스 테이블에 새로운 컬럼이 추가되었을 경우, JPA에서는 테이블과 매핑된 클래스에 필드만 추가하면 된다. 따라서 sql문을 직접 작성하지 않고 객체를 사용해 동작하므로 유지보수와 재사용성 측면에서 유리

② 단점

  • 복잡한 쿼리 처리
    : 집계 함수(avg, sum 등) 혹은 정렬(order by)이 복잡하게 사용된 쿼리의 경우 SQL문을 직접사용하는 것이 나을 수도 있다. 이를 보완하고자 JPQL 기술(SQL과 유사한)을 사용할 수 있다.

  • 학습 시간
    : 아무래도 JPA의 내용을 제대로 이해하는 데 시간이 소요될 것이다.

2. JPA 동작 방식

1) 엔티티 매니저

영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 수행. 내부적으로 데이터베이스 커넥션을 사용해 데이터베이스에 접근한다.

① 주요 메서드

  • find()
    : 영속성 컨텍스트에서 엔티티를 검색하고, 없을 경우 데이터베이스에서 데이터를 찾아 영속성 컨텍스트에 저장
  • persist()
    : 엔티티를 영속성 컨텍스트에 저장
  • remove()
    : 엔티티를 영속성 컨텍스트에서 삭제
  • flush()
    : 영속성 컨텍스트에 저장된 내용을 데이터베이스에 반영

※ 마치 M/M와 HDD(DB)의 상호작용과 유사

  • CPU연산이 완료된 값은 일단 Buffer에 저장되고 어느 시점에 database에 write된다.

② 영속성 컨텍스트
엔티티를 영구 저장하는 환경으로 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다.

③ 엔티티 생명주기

  • new(비영속)
    : new 키워드를 통해 이제 막 생성된 엔티티
  • managed(영속)
    : 엔티티가 영속성 컨텍스트에 저장된 상태로 영속성 컨텍스트에 의해 관리되는 상태 & 트랜잭션의 커밋 시점에 데이터베이스에 반영(WRITE)
  • 준영속 상태(detached)
    : 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태
  • 삭제 상태(removed)
    : 영속성 컨텍스트와 데이터베이스에서 삭제된 상태

0개의 댓글

관련 채용 정보