240624
오늘의 학습
● SpringDataJPA
Application 스프링 프레임워크, 스프링부트로 만든 기본적인 어플리케이션 레이어를 의미한다.
1. SpringDataJPA
JPA를 Spring환경에서 편리하게 이용하기 위해 확장된 JPA이다.
ex) findById , repository 등
2. JPA
Java Persistence API의 약자로 자바 ORM 표준 명세이며, 표준 인터페이스라고 생각하면 된다.
자바에서 데이터베이스에 데이터를 영구히 저장을 도와주는 환경을 제공을 해주는 인터페이스이다.
JPA는 하나의 표준으로써 명세이다. 이걸 구현한 Hibernate나 다른 구현체로 언제든지 갈아끼워서 이용할 수 있다.
3. Hibernate
JPA의 구현체 중 하나이며, Hibernate가 JPA보다 먼저 나왔으며, JPA는 Hibernate를 기반으로 만들어진 명세이다.
하지만 Hibernate만이 JPA를 구현하지는 않고 다른 구현체들도 존재하며, 앞으로도 나올 가능성이 존재한다.
4. JDBC
데이터베이스의 직접적인 연결을 도와주며, JDBC만을 이용해 직접적으로 DB에 쿼리를 날려 DB와 상호작용을 할 수 있다. DB접근과 DB저장의 가장 원시적인 방법이다. 이 JDBC의 기반으로 만들어진게 JPA와 Hibernate이다.
ORM(Object Relational Mapping)
Object => 자바 객체
Relational => 관계형 데이터베이스(RDB)
Mapping => 매핑하다
# 자바 객체와 관계형 데이터베이스를 매핑을 해주는 기술
JPA 영속성 컨텍스트를 사용하는 이유
객체의 매 변경 사항마다 쿼리문을 날리는건 매우 비효율적이다.
그래서 JPA는 영속성 컨텍스트라는 공간을 만들어서 컨텍스트 내부에 엔티티 객체의 상태를 저장해두고
DB의 Transaction개념을 가져와 작업단위의 커밋 시점에 현재 상태를 DB에 반영하는 로직이 내부적으로 들어가있다.
즉, 인메모리 방식으로 엔티티의 수정 사항을 계속 저장을 해두었다가 DB에 최종적으로 반영하는 느낌이다.
결국은 엔티티 객체를 DB에 효율적으로 저장하기 위해 존재하는 컨텍스트이며, EntityManager가 컨텍스트에 해당 엔티티의 상태를 변경시켜주면서 넣었다 빼주고 DB에 반영해주는 역할을 해준다.
EntityManager
영속성 컨텍스트를 관리를 해주는 객체이다.
기본적으로 엔티티 객체를 영속성 컨텍스트에 넣어 영속성 상태로 만들어주기도 하며, 엔티티의 상태를 변경시켜주는 역할을 한다. 결국, EntityManager는 영속성 컨텍스트를 이용하여 엔티티의 상태를 변경시켜주는 것이다.
# 오늘의 회고
오늘은 프로젝트 마지막 날이며 발표를 맡게되었다. 개인적으로 발표준비를 하면서 노션을 이용하여 발표를 준비하게 되었다. 핵심내용만 가져와 준비를 다 마쳤고, 내일 발표를 하면 된다. 직접 Postman을 이용하여 시연도 해야되서 시간을 좀 잡아먹을것 같아 내용을 최대한 줄이게 되었다.
발표준비를 마치고 개인적으로 SpringDataJPA에 대해 궁금했던 부분을 공부하면서 정리를 좀 하였다.
시간이 좀 부족해 얼마 정리를 못한점이 좀 아쉽다.