JPA란?

  • JPA는 Java Persistence API이다.
    • Persistence(영속성): 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성
      하드디스크에 기록하면 하드디스크는 비휘발성이기 때문에 데이터가 영구적으로 저장된다.
      → 자바에 있는 데이터를 영구적으로 기록할 수 있는 환경을 제공하는 API
    • API(Application Programming Interface): 응용 프로그램 프로그래밍 인터페이스
      * 인터페이스: 상하관계가 존재하는 약속
    • 정리하자면 JPA란 자바 프로그래밍을 할 때 영구적으로 데이터를 저장하기 위해서 필요한 인터페이스이다.
  • JPA는 ORM 기술이다.
    Object Relational Mapping, 객체-관계 매핑
    • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
      • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
      • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
      • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
    • 자바에서 클래스를 만들어 실행하면 데이터베이스에 테이블이 자동으로 생성되게 하는 기법


  • JPA는 반복적인 CRUD 작업을 생략하게 해준다.
    • C: INSERT
    • R: SELECT, SELECT ALL
    • U: UPDATE
    • D: DELETE
  • JPA는 영속성 컨텍스트를 가지고 있다.
    • 영속성: 데이터를 영속적으로 DB에 저장
    • 컨텍스트(Context): 대상의 모든 정보를 가지고 있는 것
      A의 컨텍스트를 가지고 있다 → A의 모든 정보를 다 알고 있다는 의미
    • 영속성 컨텍스트는 자바와 DB 사이에 존재하는 개념이다.
      자바는 영속성 컨텍스트를 통해서 DB에 데이터를 저장하고, DB에 저장된 데이터는 영속성 컨텍스트를 통해서 자바로 전달된다. 이 모든 일들은 영속성 컨텍스트에서 자동으로 처리된다.
      자바 ↔ 영속성 컨텍스트 ↔ DB

  • JPA는 DB와 OOP(객체 지향 프로그래밍)의 불일치성을 해결하기 위한 방법론을 제공한다.
    DB는 객체 저장이 불가능하지만, 자바는 객체 저장이 가능하다. 자바에서 객체를 저장한 뒤 DB에 밀어넣을 때 JPA가 자동으로 외래키 등의 방법으로 넣어준다.
  • JPA는 OOP(객체 지향 프로그래밍)의 관점에서 모델링을 할 수 있게 해준다. (상속, 컴포지션, 연관관계)
    * 모델링: 추상적인 개념을 현실 세계로 뽑아내는 것

    자동차 클래스와 엔진 클래스가 있다고 가정해보자. 자동차 클래스에서 엔진 클래스를 사용하기 위해서는 상속을 사용해선 안된다. Engine이 부모 클래스, Car가 자식 클래스가 되는 것은 말이 안되기 때문이다. 따라서 상속 대신 컴포지션(결합)이라는 방식을 사용해야 한다.

    컴포지션은 JPA가 클래스를 테이블로 모델링할 때, 필드 중에서 객체(클래스)가 존재하면 그 객체에 대한 테이블을 따로 만들고 그 객체에 대한 id(PK) 컬럼을 만들어서 매핑(관리)하는 것을 의미한다.

    아래 코드와 같이 Car 클래스 안에 Engine 클래스를 선언해주면 된다.
    JPA는 클래스에서 테이블을 자동생성 해주기 때문에 아래처럼 테이블이 생긴다.

    Car Table


    Engine Table

    ORM이 아닌 기존의 SQL 중심의 시스템에서는 불가능한 일이다. 이런 식으로 JPA는 OOP 관점에서 클래스(객체)를 설계하고, 그것을 기반으로 모델링할 수 있도록 도와준다.

  • JPA는 방언 처리가 용이하여 Migration하기 좋다. 유지보수에도 좋다.
    DB의 언어는 서로 다를 수 있다. (MySQL, Oracle이 서로 다르듯이)
    만약 DB의 언어를 변경해야 한다면 많은 코드를 고쳐야 하지만, JPA를 이용하면 JPA가 알아서 DB에 넣어준다.

  • JPA는 쉽지만 어렵다.

 


출처: Youtube 메타코딩

https://www.youtube.com/channel/UCVrhnbfe78ODeQglXtT1Elw

+ Recent posts