1 minute read

[JPA] 스프링 부트 JPA : 기본 개념

1. JPA

1-1. 개념

  • JPA는 Java Persistence API의 약자, Java 관련 기술 스펙 중 하나다.
  • [사전 지식] ORM (Object Relational Mapping) 이란 프로그램 언어의 객체 지향 개념과 DB의 테이블의 개체가 유사하다는 입장, 객체지향과 관계형 데이터베이스를 매핑시킨 추상화된 개념임 (vision)
  • JPA는 ORM의 개념을 Java언어로 구현하기 위한 스펙임

1-2. 특징

  • JPA 스팩의 구조

      [java code] 
          <->   
          [JPA | {jpql} <-> {MySql API, Oracle API, DB2 API, ...} ]   
          <->   
      [Database]
    
  • JPA 스펙을 구현한 프레임워크

    1. Hibernate : Spring Boot와 대응되는 프레임워크
    2. EclipseLink
    3. DataNucleus

1-3 JPA 장단점

  1. JPA 장점 :
    • 데이터베이스 관련 코드에 대해 유연함을 얻을 수 있다.
    • 데이터베이스와 독립적 관계다.
    • DB 설계와 Java 설계를 한번에 처리 할 수 있어서 생산성이 빠르다.
    • DB에 독립적이기 때문에 DB의 변경에서 자유롭다.
  2. JPA 단점 :
    • 러닝 커브가 길다.
    • SQL 에서 JPA 기능 추가로 배워야 함 - 근본적인 객체지향 설계 사상이 반영되어야 한다.
    • 어떻게 적합한 객체들의 관계를 작성할 것인가? - DB에서 제공하는 강력한 기능들을 활용하기 힘들다.
    • 예를 들면 튜닝 등의 작업에 제약이 발생한다.

1-4 JPA 개발 구조

Application <-> JPA <-> JDBC <-> DataBase

2. 엔티티(Entity), 앤티티 매니저(EntityManager), 영속컨택스트(Persistence Context)

2-1. 엔티티(Entity)

  • 데이터 베이스 상에서 데이터를 관리하는 대상을 지칭
  • 일반적인 DB에서는 엔티티를 위해 테이블을 생성하고 해당 테이블에 데이터를 추가함, 이렇게 추가된 데이터들을 인스턴스 또는 레코드라고 부름
  • JPA에서는 엔티티 타입의 클래스가 테이블에 대응함
  • 엔티티라은 용어가 클래스를 의미할 수도 인스턴스를 의마할수도 있음 예를 들면 회원 엔티티 클래스, 회원 엔티티 인스턴스, 회원 엔티티 객체 이런식으로 혼용 되나 죄다 같은 말임

2-2. 엔티티 매니저(Entity Manager)

  • 여러 엔티티 객체들을 관리하는 대상을 지칭
  • 여기서 관리란 라이프 사이클을 지칭
  • 엔티티매니저는 엔티티 객체들을 영속 컨택스트 라는 곳에 넣어두고 각각의 객체들의 생사를 관리하게 됨

2-3. 영속 컨택스트(Persistence Context)

  • JPA의 엔티티 객체를 모아두는 공간 도커 이미지 01
  • 그림에서 처럼 화살표에 있는 메소드는 엔티티 매니저를 통해서 실행하는 매소드.

  • New(비영속) : Java 영역에 객체만 존재하고, 데이터베이스와 연동된 적이 없는 상태, 엔티티 메니저의 관리하에 있는 것이 아니기 때문에 순수한 Java 객체

  • Managed(영속) : 데이터베이스에 저장되고, 메모리상에서도 같은 상태로 전재하는 상태. 객체는 영속 컨택스트에 내에 들어가게 되고 id(PK) 값을 통해서 필요한 엔티티 객체를 꺼내 사용가능

  • Removed(삭제) : 데이터베이스상에서 삭제된 상태, 객체는 더 이상 영속 컨텍스트에 존제하지 않음

  • Detached(준영속) : 영속컨택스트에서 엔티티 객체를 꺼내서 사용하는 상태. 준영속 상태의 객체는 고유한 id(PK)를 가지고 있지만, 아직 데이터베이스와 동기화가 이루어지지 않은 상태임

Categories:

Updated:

Comments