티스토리 뷰
메타코딩 - 스프링부트 개념 정리 with JPA를 기반으로 작성된 글입니다.
1.JPA란?
Java Persistence API
Persistence(영속성)이란 : 프로그램이 종료되더라도 생성한 데이터가 사라지지 않는 특성. Java는 DBMS(Database Management System)로 데이터를 관리 한다.
API(Application Programming Interface)란 :
어플리케이션(A) : 프로그램
프로그래밍(P) : 프로그램을 만들기 위한 방법↖
인터페이스(I) : 프로그래밍을 하기 위한 약속 및 규칙↖
!주의
프로토콜 | 인터페이스
:약속 :약속
동등한 약속 |상하 관계가 존재하는 약속
JPA란 : 자바 프로그래밍을 할 때 영구적으로 데이터를 저장하기 위해서 필요한 인터페이스
2.JPA는 ORM 기술이다.
ORM(Object Relational Mapping) : 객체 관계 맵핑 -> object를 데이터베이스에 연결하는 방법론이다.
DB와 Java의 Type이 다르기 때문에 DB를 설계한 후 Java로 모델링한다.
하지만, ORM을 이용해 객체를 먼저 생성하고 테이블을 맵핑해서 생성할 수 있다. 이때 JPA가 가지고 있는 인터페이스가 필요하다.
3.JPA는 반복적인 CRUD작업을 생략하게 해 준다.
DB를 조작하기 위해 자바에서 DB에 connection 요청 → DB가 세션 오픈 → 자바가 connection 소유
→ 자바가 DB에서 쿼리 전송 → DB는 해당 쿼리를 통해서 데이터를 자바에 응답
→ 자바와 DB가 서로 데이터 타입이 다르므로 자바는 해당 데이터를 자바 Object로 변경
단순한 CRUD 작업을 위한 위의 반복적인 작업들을 JPA에서 함수 하나로 제공한다.
JPA는 CRUD를 아주 간단하게 처리 가능하도록 도와준다.
4. JPA는 영속성 컨텍스트를 가지고 있다.
영속성 : 데이터를 영구적으로 저장.
컨텍스트(Context) : 대상의 모든 정보를 가지고 있는 것.
Java와 DB는 서로를 바로 거치는 것이 아닌 영속성 컨텍스트를 통해서 데이터를 주고받는다.
(1차 캐시 추가로 학습하기)
5.DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체 저장 불가능)
DB에 넣을 수 있는 데이터 타입은 기본자료형이다. Java처럼 Object를 가질 수 없다. 따라서 외래 키를 이용해 테이블을 맵핑한다. 하지만 Java에서는 외래키를 저장하는 것보다 Object 자체를 가지는 것이 더 바람직하다.(OOP:Object Oriented Programing, 객체 지향)
public class Player {
@Id
private Long id;
private String name;
private int teamId; <-
}
public class Player {
@Id
private Long id;
private String name;
Team team; <-
}
ORM을 이용하게 되면 Java가 주도권을 쥐고 있는 모델을 설계할 수 있고, 이렇게 들어간 데이터를 Insert 하거나 select 할 때 JPA가 자동으로 (Team을 FK로) 맵핑해서 넣어준다.
6.JPA는 OOP의 관점에서 모델링을 할 수 있게 해 준다.(상속, 컴퍼지션, 연관관계)
DB는 상속이나 컴퍼지션설정을 할 수 없다. 하지만 OOP관점으로 개발을 진행해도 JPA는 패러다임 불일치를 해결해 준다.
7.방언 처리가 용이하여 Migration하기 좋다.(유지 보수에도 좋음)
스프링 → JPA → DB
JPA는 추상화 객체를 사용해 DB에 연결 한다. JPA는 추상화 객체를 바라보고 있기 때문에 추상화 객체안에 여러가지 dialect(오라클, 마리아DB, MySQL, MsSQL 등)를 넣어 사용 가능하다.
8.JPA는 쉽지만 어렵다.
참고자료 영상:
'개발일지 > Spring' 카테고리의 다른 글
스프링부트 with JPA 블로그 13강 - 시큐리티 동작 원리 (0) | 2022.12.06 |
---|---|
스프링부트 with JPA 블로그 11강 - DB격리수준 (0) | 2022.11.24 |
스프링부트 개념정리 with JPA 3강 - 스프링부트 동작원리 (0) | 2022.11.01 |
스프링부트 개념정리 with JPA 1강 - 스프링 개념잡기 (0) | 2022.10.26 |