ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] JPA 개념 잡기
    WEB/Spring 2020. 9. 14. 02:40

    1. JPA는 Java Persistence API 이다.

    Persistence, 영속성은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는다.

    영속성은 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터 베이스 등을 활용하여 구현한다.

     

    JPA는 자바에 있는 데이터를 영구히 기록할 수 있는 환경(DBMS)에 저장하는 API

     

    인터페이스를 통해 프로그래밍을 하고 이를 통해 프로그램을 만드는 것

    API란 프로그램을 만들기 위해서 제공하는 인터페이스를 의미한다.

     

    홍길동이라는 사람이 장보고의 프로그램을 사용한다고 하면 장보고는 다음과 같이 약속을 정할 수 있다.

    이때 약속은 상하관계가 존재하는 약속이다.

    홍길동이 장보고의 프로그램을 사용하기 위해선 해당 인터페이스를 반드시 지켜야한다.

    그러나 프로토콜은 상하관계가 없는 수평한 약속이다.

    A, B, C 모두가 납득할 수 있는 약속을 정한 후 이 프로토콜을 따라야한다.

     

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

     

    2. JPA는 ORM 기술이다.

     

    ORM(Object Relational Mapping) -> 나의 하인!!!

    모델링이란 추상적인 개념을 현실 세계로 뽑아내는 것을 의미한다.

    DML을 통해 데이터를 조작할 때, 자바가 가지고 있는 데이터 타입과 DB가 가지고 있는 데이터 타입이 다르다.

    그래서 클래스를 통해 DB에 있는 테이블을 모델링 해야한다.

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

    이때 JPA를 사용하면 반대로 클래스에 있는 데이터를 DB에 모델링할 수 있다. (클래스를 통해 테이블을 자동으로 설정)

    이때 필요한 것이 JPA가 가지고 있는 인터페이스 (상하관계가 존재하는 약속)

     

    3. JPA는 반복적인 CRUD 작업을 생략하게 해준다.

    CRUD 작업을 할 때 일차적으로는 자바 프로그램에서 DB로 커넥션을 요청한다.

    DB는 요청을 확인해 신분을 확인하고, 세션을 열어준다.

    세션을 열면 둘은 연결되고, 자바는 커넥션을 가지게 된다.

    커넥션을 가지고 나서 두번째 요청때에는 쿼리를 요청할 수 있다.

    DB는 쿼리를 받아 어떤 작업을 수행한 후 테이블에 있는 어떠한 데이터를 만들어낸다.

    이 데이터를 다시 자바로 응답하게 되는데 이때 응답하는 데이터의 타입이 자바와 다르므로 이해할 수 없다.

    이때 이해하지 못하는 데이터를 자바가 이해하기 위해서 데이터를 자바 오브젝트로 변환하는 작업이 필요하다. (단순반복)

     

    이러한 반복 작업을 줄여주는 역할을 JPA가 한다.

    JPA를 사용하면 전송된 쿼리에 대한 응답이 있을 때, 응답 데이터를 받고, 데이터 타입을 자바 오브젝트로 바꾸고, 연결된 세션을 끊고, 연결된 커넥션을 끊고, 이러한 모든 일련의 작업을 JPA에서 함수 하나로 제공!!!

     

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

    영속성 컨텍스트는 데이터를 영구적으로 저장해야하는 모든 것을 알고있음

    자바 프로그램에서 동물 데이터를 DB에 저장하고 싶으면, 다이렉트로 DB에 저장하는 것이 아니라 중간에 영속성 컨텍스트에 먼저 저장된다.

    다음 영속성 컨텍스트에 있는 동물 데이터를 DB에 보내고 DB에 동물 데이터가 저장된다.

    영속성 컨텍스트 안에 있는 데이터와 DB 안에 있는 데이터는 동기화된다.

    만약 영속성 컨텍스트 안의 동물 데이터가 삭제되고 이를 DB에 보내면 DB 안의 동물 데이터도 삭제된다.

     

    영속성 컨텍스트가 비어있는 상태에서 DB에 있는 과일 데이터를 자바 프로그램에서 select한다고 가정

    자바는 DB가 아니라 먼저 영속성 컨텍스트에게 가서 과일 데이터를 요청한다.

    영속성 컨텍스트는 과일 데이터를 가지고있지 않기때문에 DB에게 과일 데이터를 요청한다.

    DB는 DB 타입의 과일데이터를 영속성 컨텍스트로 전달하고, 영속성 컨텍스트는 이를 자바 Object 타입으로 바꾼다.

    그 다음 자바 object 타입으로 바꾼 과일 데이터를 자바 프로그램으로 전달한다.

     

    만약 과일 데이터(사과)를 딸기로 변경하기 위해 update 요청을 한다면

    영속성 컨텍스트의 과일 데이터가 딸기로 바뀌고, DB에게 딸기를 저장하면 insert 쿼리가 아닌 update 쿼리가 작동하면서 DB의 과일 데이터가 딸기로 변경된다.

     

    왜냐하면 자바 프로그램, 영속성 컨텍스트, DB의 과일 데이터는 모두 타입이 다를뿐 일치하는 데이터!!!

    자바가 DB에 저장해야하는 모든 메타데이터를 영속성 컨텍스트가 가지고있고, 영속성 컨텍스트에서 일어나는 모든 작업들은 자동으로 이루어진다!

     

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

    DB에 중점을 두고 설계한 클래스
    객체에 중점을 두고 설계한 클래스

    ORM을 통해 자바가 주도권을 가지고 있는 OOP를 실현할 수 있다.

    자바에서 프로그래밍할 때는 객체를 저장하고, 이를 DB에 저장할 때는 JPA가 자동으로 FK를 매핑해준다. 

     

    6. JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)

     

    7. JPA는 방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋다.

     

    8. JPA는 쉽지만 어렵다.

     

     

    www.youtube.com/channel/UCVrhnbfe78ODeQglXtT1Elw
     

    데어 프로그래밍

    getinthere@naver.com

    www.youtube.com

    댓글

Designed by Tistory.