#4 #5 #6 스프링부트 개념 - JPA란? ORM이란? 영속성 컨텍스트란?

myeonji·2022년 2월 12일
0

스프링부트개념

목록 보기
2/4

> JPA란?

  • JPA는 Java Persistence API 이다.

    • Persistence(영속성) : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미
    • 영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현 (자바에서는 파일 시스템이 아닌 데이터베이스)
    • 즉, JPA는 자바의 데이터를 DBMS(DataBase Management System)에 영구적으로 기록 할 수 있는 환경을 제공하는 API
    • 📍 API
      • 애플리케이션(A) : 프로그램
      • 프로그래밍(P) : 프로그램을 만들기 위한 방법
      • 인터페이스(I) : 프로그래밍을 하기 위한 인터페이스
  • JPA는 ORM 기술이다.

    • Object Relational Mapping
    • 자동으로 테이블 생성
    • JPA는 1. 클래스를 만들고 이를 토대로 자동생성하여 2. 데이터베이스에 테이블을 만드는 기법
  • JPA는 반복적인 CRUD 작업을 생략하게 해준다.

  • JPA는 영속성 컨텍스트를 가지고 있다.

    • 컨텍스트(context) : "모든 것" 이라는 의미
    • 자바가 데이터베이스에 데이터를 저장하고, 가져오는 일련의 모든 과정과 정보들을 영속성 컨텍스트가 가지고 있음
      • 자바 -> 영속성 컨텍스트 -> 데이터베이스
      • 데이터베이스 -> 영속성 컨텍스트 -> 자바
  • JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)

    • ORM(JPA)로 자바가 주도권을 쥐게 된다.
    • DB는 객체저장이 불가능하지만, 자바는 객체저장이 가능하기 때문
    • 즉, 자바에서 객체저장을 하고 JPA가 그 객체의 FK를 넣어 DB에 저장해준다.
  • JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)

    • 만약 Engine(엔진)과 Car(자동차)가 있다고 하면, 자동차는 엔진이 필요하다.
    • 하지만! 상속은 ❌, 상속은 부모-자식 관계인데 Engine과 Car은 그 관계가 성립하지 않는다.
    • 따라서 콤포지션(결합)을 한다.
    Class Car {
    	int id;
      	String name;
      	String color;
      	Engine engine; // 콤포지션
    }
    • JPA는 1. 클래스를 만들고 2. 자동생성하여 데이터베이스 테이블을 만든다.
    • 따라서, 위의 코드가 실행되면 Car테이블과 Engine테이블까지 자동생성되어 만들어진다. -> OOP관점 (Object-Oriented Programming)
  • 방언 처리가 용이하여 Migration 하기 좋다. 유지보수에도 좋다.
    • 방언 종류 : MySQL, MariaDB, 오라클 등등
    • JPA는 추상화 객체를 두고 DB로 연결
    • JPA는 추상화 객체만 바라보고 있기 때문에 방언 바뀌어도 상관 없이 DB 연결하여 사용 가능

0개의 댓글