이전 시간에 배운 것

1. JPA란?

  • JPA는 Java Persistence API이다.
  • JPA는 ORM 기술이다.
  • JPA는 반복적인 CRUD 작업을 생략하게 해준다.

  • JPA는 영속성 컨텍스트를 가지고 있다.
    영속성 : 데이터 -> 영구적으로 저장하는 속성 (자바에서는 DB에 저장)
    컨텍스트란? Context: 모호한 개념 중 하나. 모든 컨텍스트를 가지고 있다 == 모든 정보를 가지고 있다. "대상의 모든 정보"
    영속성 컨텍스트에 있는 데이터와 DB 데이터는 동기화가 됨. 따라서 동물 데이터를 영속성 컨텍스트를 통해 DB에 입력했을때, 영속성 컨텍스트 내의 동물 데이터를 지우면 DB의 동물 데이터도 같이 지워짐. Select를 통해서 DB의 과일 데이터에 접근시 영속성 컨텍스트를 거쳐서 DB로 이동함. 영속성 컨텍스트에는 과일 데이터가 없기 때문에 자바 오브젝트로 바꾼 과일 데이터를 가진다. 영속성 컨텍스트는 자바 오브젝트 타입의 과일데이터를 자바에게 넘겨준다. 

    이때 자바, 영속성 컨텍스트, DB의 데이터는 서로 일치하는데, 자바에서 과일 데이터 중 사과를 딸기로 변환하면 영속성 콘텍스트에 있는 과일 데이터가 딸기로 변하고 커밋해서 밀어넣는 경우 과일 데이터의 형상이 달라져서 insert가 아니라 update가 일어난다. 

    자바는 항상 영속성 컨텍스트를 통해서 디비에 데이터를 저장하고, 데이터베이스의 데이터도 영속성 컨텍스트를 통해서 자바쪽으로 전달이 된다. 그리고 영속성 컨텍스트에서 일어난 모든 일들은 자동으로 처리가 된다.

  • JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)
    야구 DB에 team(ID, Name, year)과 player(ID, Name, teamId) 테이블이 있다고 하자.
    각 컬럼들은 가질 수 있는 데이터가 기본 자료형이다. Object를 데이터로 가지지 않는다.
    자바의 관점에서 보면, 

Class Team {
	int id;
    String name;
    String year;
}

Class player {
	int id;
    String name;
    int teamId;
}

자바는 object를 저장할 수 있기 때문에,

Class Team {
	int id;
    String name;
    String year;
}

Class player {
	int id;
    String name;
    Team team;
}

이 될 수 있음. 
ORM 덕분에 자바가 주도권을 쥐고 있는 모델을 만들 수 있음.
또, JPA가 자동으로 DB에 FK(외래키) 데이터를 넣어줌.

다음 시간에 배울 내용

  • JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
  • 방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음
  • JPA는 쉽지만 어렵다.
이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

'웹 개발 > Spring Boot' 카테고리의 다른 글

HTTP가 무엇일까요?  (0) 2023.08.03
OOP 관점에서 모델링이란 무엇일까요?  (0) 2023.08.01
ORM이란 무엇인가요?  (0) 2023.07.31
JPA란 무엇인가요?  (0) 2023.07.30
메시지 컨버터가 무엇인가요?  (0) 2023.07.30

이전 시간에 배운 것

1. JPA란?

  • JPA는 Java Persistence API이다.

  • JPA는 ORM 기술이다.
    ORM은 Object Relational Mapping의 약자로, 오브젝트를 데이터베이스에 연결하는 방법론 중 하나이다. 
    "ORM은 나의 하인 같은 기술"
    추상적인 개념을 현실세계로 뽑아내는 개념을 모델링이라고 한다.
    Team 테이블에 ID, Name, Year를 넣고 자바에서 사용을 할텐데, Input과 Output이 각각 DML(Delete, Update, Insert), Select라고한다. 자바는 테이블 데이터 타입을 가지지 않는다. 따라서 클래스를 통해서 데이터베이스의 테이블을 모델링해야한다.

class Team{
	int id;
    String name;
    String year;
}

DB 세상에 있는 데이터를 자바 세상에 모델링한다. 

그런데 ORM은 Class를 먼저 만들고 DB를 자동생성할 수 있는 기술이다. JPA가 가지고 있는 인터페이스 덕분에 자바 클래스를 짜면 테이블을 만들 수 있다. 

  • JPA는 반복적인 CRUD 작업을 생략하게 해준다.
    Select 1건
    Select All 전체
    Delete 1건
    Update 1건
    Insert 1건
    자바에서 DB로 연결하기위해서 신원을 확인하고 DB가 세션을 오픈하면 커넥션 시킬 수 있다. 이때 자바가 쿼리를 전송한다. DB는 해당 쿼리를 통해, 어떤 작업을 통해 데이터를 만들어내고, 자바에 응답한다. 응답시 DB 타입값과 자바 타입값이 다르기 때문에 자바 Object로 바꿔야한다. 이때 자바 Object로 바꾸는 작업은 단순한 반복노동이기에 JPA를 사용해서 전송된 쿼리에 대한 응답이 있을때 이 데이터를 받고 자바 오브젝트로 바꾸고 연결된 세션을 끊고, 연결된 커넥션을 끊고하는 이러한 모든 일련의 과정들을 함수 하나로 제공해준다. 기본적인 CRUD를 단순하게 처리하도록 도와준다. 이런 단순한 CRUD를 도와주는 것도 ORM이 해준다.

다음 시간에 배울 내용

  • JPA는 영속성 컨텍스트를 가지고 있다.
  • JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)
  • JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
  • 방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음
  • JPA는 쉽지만 어렵다.
이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

+ Recent posts