2. JPA

hyuun01·2023년 1월 29일
0

스프링부트

목록 보기
2/3
post-custom-banner

1) Java Persistence API(JPA)

: 자바 프로그램을 할 때 영구적으로 데이터를 저장하기 위해 필요한 인터페이스

  • 데이터가 영구히 기록될 수 있게 해 줌
  • 데이터를 DBMS로 관리(하드디스크 일부 잘라 DBMS로 할당)
    -> 영구히 기록될 수 있는 환경을 jpa가 만듦

api(application programming interface)

: 인터페이스를 통해 프로그래밍함으로써 만들어지는 프로그램

프로토콜 v.s. 인터페이스

  • 프로토콜 : 강제X 약속 (동등한 관계의 약속)
  • 인터페이스 : 강제되는 약속 (상하관계 존재하는 약속)

2) ORM(Object Relational Mapping)

: Object를 DB에 연결하는 방법

  • 자바 클래스 먼저 만들어 -> DB 자동 생성
    - jpa의 인터페이스 이용함

  • 자바 --input--> DB 테이블 // DML(Delete Update Insert)

  • 자바 <--output-- DB 테이블 // select

  • 자바와 DB 테이블의 데이터 타입 다름
    -> 모델링!!

ID int
Name varchar
year varchar
class Team{
	int id;
    String name;
    String year;
}

3) 반복적인 CRUD 작업 생략시킴

  • CRUD
    select // 1개 데이터 // R
    selct all // 전체 데이터 // R
    delete // 1개 데이터 // D
    update // 1개 데이터 // U
    insert // 1개 데이터 // C

  • CRUD 작업 과정 : 반복적 과정 -> jpa 인터페이스로
    1> 자바가 DB에 connection 요청
    2> DB가 확인 후 세션 오픈
    3> 연결 (자바가 connection 가짐)
    4> 자바가 쿼리 전송
    5> DB가 쿼리 결과 Data 를 응답
    6> DB가 보내준 data를 자바 object로 변경
    ...

4) 영속성 컨텍스트 가짐

  • 영속성 : 데이터를 영구적으로 저장 (DB에)

  • 컨텍스트(context) : 대상의 모든 정보

  • 자바는 DB 속 데이터 찾을 때 영속성 컨텍스트 통해 접근

    ex) DB에만 있고 영속성컨텍스트에는 없는 정보
    자바가 그 정보 요청
    -> 영속성컨텍스트는 DB로 부터 그 데이터(DB 형식) 받아 영속성 컨텍스트에 저장(java object 형식)
    -> 자바로 보냄

  • 영속성컨텍스트 속 데이터와 DB 속 데이터는 동기화됨

5) DB와 OOP의 불일치성을 해결하기 위한 방법론 제공 (DB는 객체저장 불가)

  • DB는 객체 저장 불가능, 자바는 객체 저장 가능
  • 자바에서 프로그래밍 할 때는 객체로 저장
  • 자바에서 DB로 ORM 할 때는 jpa가 자동으로 객체 대신 querykey를 저장시킴
ID Name year
1 롯데 1990
2 NC 2005
ID Name teamId
1 이대호 1
2 공필성 1
3 기득염 1
4 홍길동 2
class Team{
	int id;
    String name;
    String year;
}
class Player{
	int id;
    String name;	
    Team team; // 객체지향 BUT) DB와 불일치
    // DB로 ORM 시, int teamid의 querykey로 DB에 저장됨
}

6) OOP의 관점에서 모델링 할 수 있게 해 줌 (상속, composition, 연관관계)

Engine -콤포지션(결합)- Car 예시, EntityDate 상속 예시

class Car extends EntityDate{
	int id;
    String name;
    String color;
    Engine engine;
}

class Engine extends EntityDate{
	int id;
    int power;
}

class EntityDate{
	TimeStamp createDate;
    TimeStamp updateDate;
}

jpa가 DB 테이블 자동생성

Car
id name color engineId createDate updateDate
1 BHW white 2
2 sonata black 1 createDate updateDate
Engine
id power
1 2000
2 4000

연관관계 -> annotation

7) 방언 처리, Migration, 유지 보수 용이

  • 스프링은 jpa 이용해 DB 접근
  • jpa는 여러 방안 제공 (추상적 객체)
    - dialect(오라클, 마리아, mssql, mysql, ...)
    • 추상적 객체 -> 오라클, mysql 상관 없이 코드 동일 / mysql 바껴도 코드 동일

출처 : 인프런 "스프링부트 개념정리(이론)" 4~7강
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard

post-custom-banner

0개의 댓글