기록과 정리

SpringDataJPA - 1. 환경설정 ( h2database, p6spy ) 본문

IT/JPA

SpringDataJPA - 1. 환경설정 ( h2database, p6spy )

zepetto 2021. 3. 13. 20:11

이 글은 김영한 님의 ' 실전 ! 스프링 데이터 JPA ' 강의 및 자바 ORM 표준 프로그래밍 서적을 참고하였습니다.

www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-JPA-%EC%8B%A4%EC%A0%84/dashboard

 

실전! 스프링 데이터 JPA - 인프런 | 강의

스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다

www.inflearn.com

 

환경설정

해당 강의 프로젝트 기준 스펙은 다음과 같습니다. 

- JDK 1.8

- SpringBoot 2.2.1.RELEASE

- Junit 5

 

H2database

 

특히 H2database의 경우 , 1.4.200 버전을 사용 중 입니다.

h2 1.4.200
build.gradle

h2database에 대한 버전 정보가 없는데, 그래들 또는 메이븐에 따로 지정하지 않은 경우 스프링 부트 버전에 따라 정의해놓은 버전을 따라감을 의미합니다. 해당 버전은

현재 기준 2.2.1.RELEASE Reference Doc을 찾기 힘들었다.

해당 스프링 부트 버전의 Reference Doc에 들어간 다음 ,

맨 하단에 Dependency Versions
h2database의 버전

해당 하는 h2database의 지정 버전을 찾을 수 있다. 즉 h2database를 다운 받아 설치할 경우, 1.4.200을 설치해야한다.

localhost:8082

8082포트에 h2database를 설치하고 해당하는 데이터베이스를 생성하려면 Embedded 버전으로 한번 파일을 생성해야한다. JDBC URL 에 다음과 같이 한번 설정한 이후,

Server로 접속

로컬이 아닌 원격으로 접속할 수 있도록 위 JDBC URL 로 접근하도록 하자.

 

JpaRepository - 순수 JPA

MemberJpaRepository

@PersistenceContext : 해당 어노테이션을 통해 영속성 컨텍스트를 관리하는 EntityManager 객체를 생성한다.

save와 find를 통해 영속 관계를 만드는 메서드를 구현해보자.

MemberJpaRepositoryTest

@Transactional : 트랜잭션구조를 만들어서 JPA 테스트가 가능하도록 어노테이션 설정, JPA의 모든 데이터 변경은 트랜잭션 안에서 이루어져야한다. SpringBoot에서 지원하는 어노테이션을 사용하자 ( 기능이 더 많다. )

@ Rollback(false) : SpringTest가 Transaction안에 있으면 테스트 끝나는 시점에 시행되는 rollback을 방지한다.

 

assertThat(findMember).isEqualTo(member) 의 경우 , 같은 트랜잭션 안에서는 영속성 컨텍스트의 동일성 보장을 하는 JPA 특징이다.

 

테스트에 의해 등록된 데이터

JpaRepository - 스프링 데이터 JPA

MemberRepository

Interface로서의 MemberRepository는 JpaRepository 인터페이스를 상속받아 많은 JPA 구현체를 실행할 수 있도록 한다.

 

동일한 방식의 테스트 코드

p6spy

콘솔로그에 찍히는 쿼리에 들어가는 파라미터가 안보일 경우, yml 에 

org.hibernate.type

org.hibernate.type: trace 를 통해 binding parmeter을 보여줄수 있지만 한눈에 보이지 않는다.

 

따라서 p6spy를 의존성 추가를 해준다면...

build.gradle에 p6spy

다음과 같이 한줄에 볼수 있도록 하지만 개발 공부를 할 때 편할지는 몰라도 운영에 퍼포먼스에 영향을 줄 수도 있다. 따라서 공부나 개발시에만 이용하도록 권장해야한다.