일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Component
- Bean
- spring
- 오토와이어드
- autowired
- git #gitlab #github
- 스프링
- zepettoworld.com
- 스프링 부트
- layout #thymeleaf #화면분할
- 1
- DispatcherServlet
- Today
- Total
기록과 정리
SpringDataJPA - 1. 환경설정 ( h2database, p6spy ) 본문
이 글은 김영한 님의 ' 실전 ! 스프링 데이터 JPA ' 강의 및 자바 ORM 표준 프로그래밍 서적을 참고하였습니다.
환경설정
해당 강의 프로젝트 기준 스펙은 다음과 같습니다.
- JDK 1.8
- SpringBoot 2.2.1.RELEASE
- Junit 5
H2database
특히 H2database의 경우 , 1.4.200 버전을 사용 중 입니다.
h2database에 대한 버전 정보가 없는데, 그래들 또는 메이븐에 따로 지정하지 않은 경우 스프링 부트 버전에 따라 정의해놓은 버전을 따라감을 의미합니다. 해당 버전은
해당 스프링 부트 버전의 Reference Doc에 들어간 다음 ,
해당 하는 h2database의 지정 버전을 찾을 수 있다. 즉 h2database를 다운 받아 설치할 경우, 1.4.200을 설치해야한다.
8082포트에 h2database를 설치하고 해당하는 데이터베이스를 생성하려면 Embedded 버전으로 한번 파일을 생성해야한다. JDBC URL 에 다음과 같이 한번 설정한 이후,
로컬이 아닌 원격으로 접속할 수 있도록 위 JDBC URL 로 접근하도록 하자.
JpaRepository - 순수 JPA
@PersistenceContext : 해당 어노테이션을 통해 영속성 컨텍스트를 관리하는 EntityManager 객체를 생성한다.
save와 find를 통해 영속 관계를 만드는 메서드를 구현해보자.
@Transactional : 트랜잭션구조를 만들어서 JPA 테스트가 가능하도록 어노테이션 설정, JPA의 모든 데이터 변경은 트랜잭션 안에서 이루어져야한다. SpringBoot에서 지원하는 어노테이션을 사용하자 ( 기능이 더 많다. )
@ Rollback(false) : SpringTest가 Transaction안에 있으면 테스트 끝나는 시점에 시행되는 rollback을 방지한다.
assertThat(findMember).isEqualTo(member) 의 경우 , 같은 트랜잭션 안에서는 영속성 컨텍스트의 동일성 보장을 하는 JPA 특징이다.
JpaRepository - 스프링 데이터 JPA
Interface로서의 MemberRepository는 JpaRepository 인터페이스를 상속받아 많은 JPA 구현체를 실행할 수 있도록 한다.
p6spy
콘솔로그에 찍히는 쿼리에 들어가는 파라미터가 안보일 경우, yml 에
org.hibernate.type: trace 를 통해 binding parmeter을 보여줄수 있지만 한눈에 보이지 않는다.
따라서 p6spy를 의존성 추가를 해준다면...
다음과 같이 한줄에 볼수 있도록 하지만 개발 공부를 할 때 편할지는 몰라도 운영에 퍼포먼스에 영향을 줄 수도 있다. 따라서 공부나 개발시에만 이용하도록 권장해야한다.
'IT > JPA' 카테고리의 다른 글
JPA 값 타입이란? (0) | 2022.02.14 |
---|---|
프록시와 즉시로딩, 지연로딩 (0) | 2021.02.23 |
JPA 고급 매핑 전략 + @MappedSuperclass (0) | 2021.02.20 |
JPA 연관관계 다중성 ( N:1, 1:N, 1:1, N:M ) (0) | 2021.02.16 |
JPA 연관관계 매핑 ( 단방향 , 양방향 ) (0) | 2021.02.16 |