-
[내일배움캠프] 2월 1주차 WIL 회고록카테고리 없음 2023. 2. 5. 14:47
이번주에 공부한 것 : Raw JPA, SpringData JPA (조금)
JDBC : Java Database Connectivity
- 문장 그대로 Java 앱과 DB를 연결시켜주기 위해 만들어진 기술, JPA도 이 기술을 사용한다.
하지만 JDBC를 사용하면서 여러 문제로 QueryMapper가 탄생했다.
문제점 : SQL 쿼리 요청시 중복 코드 발생, DB별 예외에 대한 구분 없이 SQL Exception 처리등
이 문제 해결을 위해 Persistence Framework가 등장했다.
Persistence Framework 의 종류
- SQL Mapper : JDBC Template, MyBatis
- ORM : JPA, Hibernate
SQL Mapper 첫번째 주자로 JDBC Template 가 탄생했다.
JDBC Template은 JDBC 코어 패키지의 중앙 클래스로 JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움이 된다. 개발자가 JDBC를 직접 사용할 때 발생하는 다음과 같은 반복 작업을 대신 처리해준다.
하지만 결과 값을 객체 인스턴스에 매핑하는데 많은 코드가 필요하다는 단점이 있다.
SQL Mapper 두번째 주자로 MyBaits가 탄생했다.
MyBatis는 반복적인 JDBC 프로그래밍을 단순화 하고, SQL 쿼리들을 XML 파일에 작성하여 코드와 SQL를 분리시킬 수 있다.
단점은 결국 SQL 쿼리를 직접 작성하는 것은 쉽지 않고, 테이블마다 비슷한 CRUD 반복, DB 타입 및 테이블에 종속적이라는 단점이 있다.
그 다음 영속성 컨택스트를 배웠다. 강의를 다 듣긴 했지만 아직까지 너무 어렵다.. ㅠㅠ
영속성 컨택스트
- JPA를 이해하는데 가장 중요한 용어이다.
- 엔티티를 영구 저장하는 환경이라는 뜻이다.
- 어플리케이션과 DB사이에서 객체를 보관하는 가상의 DB같은 역할을 한다.
- 서비스별로 하나의 EntityManager Factory가 존재하며 Entity Manager Factory에서 디비에 접근하는 트랜잭션이 생길 때 마다 쓰레드 별로 Entity Manager를 생성하여 영속성 컨텍스트에 접근한다!!
- EntityManager에 엔티티를 저장하거나 조회하면 EntityManager는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
- 영속성 컨텍스트는 EntityManager를 생성할 때 만들어지며 EntityManager를 통해 영속성 컨텍스트에 접근하고 관리한다.
영속성 컨택스트 내부에는 엔티티를 보관하는 저장소가 있는데 이를 1차 캐시라고 한다.
1차 캐시: 일반적으로 트랜잭션을 시작하고 종료할 때까지만 1차 캐시가 유효하고, 1차 캐시는 한 트랜잭션에서 계속해서 원본 객체를 넘겨준다.
2차 캐시도 있는데 2차 캐시는 애플리케이션 범위의 캐시로, 공유 캐시라고도 하며 애플리케이션을 종료할 때까지 캐시가 유지된다.
2차 캐시는 캐시 한 객체 원본을 넘겨주지 않고 복사본을 만들어서 넘겨준다. 복사본을 주는 이유는 여러 트랜잭션에서 원본객체를 수정하는 일이 없도록 하기 위해서이다.
SpringData는 기본 구조, 기능 목록을 배웠다.
스프링 데이터 : 스프링을 위한 다양한 데이터 저장소 연동 및 최적화 패키지
- 스프링 데이터 Common : 여러 저장소 연동 공통 기능
- 스프링 데이터 JPA : JPA 최적화 관련 기능(RDB)
- 스프링 데이터 REST : 저장소 데이터를 REST API로 제공
- 스프링 데이터 MongoDB : MongoDB 최적화 관련 기능
- 스프링 데이터 Redis : Redis 최적화 관련 기능
- 스프링 데이터 KeyValue : Map 데이터 최적화 관련 기능
그 다음 JPA 페이징 심화를 배웠다.
다음주 목표 : 강의 내용 이해하기, 팀 프로젝트 열심히 하기