본문 바로가기
Spring/Spring Boot

[환경세팅] ③-② H2 DBMS 설치 및 환경세팅(Spring Boot 및 JPA 연동)

by YellowCow 2022. 8. 14.

2. Spring Boot 및 JPA 연동

H2 DBMS를 Spring Boot, JPA와 연동하기 위해서는

몇가지 설정을 해야 한다.

 

Spring Boot에서는 '.properties' 또는 '.yml'이라는 파일을 이용한 설정을 지원한다

이 글에서는 '.yml'이라는 파일형식을 이용하여 설정하겠다

 

아래와 같이 'application.properties' 파일을 지우고 'application.yml'파일을 생성한다

 

appilcation.yml의 내용을 아래와 같이 작성한다

datasource의 URL은 본인의 환경에 맞게 세팅한다

 

설정에 관한 속성들은 Spring 공식 홈페이지에서 찾아보기 바란다

 

예를 들어, JPA 관련 속성들은 아래 링크에서 확인해볼 수 있다

아래 링크에서 'Configure JPA Properties'를 검색하면 JPA 관련 설정방법을 볼 수 있다

https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/

 

Spring Boot Reference Documentation

This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe

docs.spring.io

 

위와 같이 진행하면 연동과 관련된 설정은 완료된다

 

3. 연동 테스트

다음은 연동이 잘 되었는지 테스트 하기 위해

테스트 케이스를 작성하여 테스트를 해보겠다

 

아래와 같이 진행한다.

 

1) Entity 생성

아래 사진과 같이 Member 클래스를 생성한다

 

아래와 같이 Member 클래스의 내용을 작성한다

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter @Setter
public class Member {
    @Id
    @GeneratedValue
    private int id;
    private String username;
}

 

 

2) Repository 생성

아래 사진과 같이 MemberRepository 클래스를 생성한다

 

아래와 같이 MemberRepository 클래스의 내용을 작성한다

import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Repository
public class MemberRepository {
    @PersistenceContext
    private EntityManager em;

	// insert
    public Long save(Member member){
        em.persist(member);
        return member.getId();
    }

	// select
    public Member find(long id){
        return  em.find(Member.class, id);
    }
}

 

 

3) 테스트 케이스 작성

※ 참고! 스프링 부트 2.2 버전 이상에서 JUnit4 사용 시, build.gradle 파일에 아래 사진과 같이 내용을 추가할 것!

 

다음은 테스트 케이스 생성 방법이다

 

맥에서는 ⇧T,

윈도우에서는 Shift + Ctrl + T 를 입력하면 테스트케이스 생성 창이 뜬다

 

테스트케이스 생성 창이 뜨면 아래와 같이 진행한다

 

확인을 클릭하면

다음 사진과 같이 테스트 케이스가 생성된 것을 확인할 수 있다

 

생성된 테스트 케이스에  아래와 같이 채워넣는다

import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.Assert. *;

@RunWith(SpringRunner.class) // 스프링과 관련된 Application을 테스트 하겠다
@SpringBootTest // 스프링 부트와 관련된 테스트 케이스이다
public class MemberRepositoryTest {
    @Autowired
    private MemberRepository  memberRepository;

    @Test //테스트 케이스임을 의미함
    @Transactional // 필수! JPA는 반드시 트랜잭션 안에서 동작해야함, 테스트 케이스에 있을 경우 테스트완료 후 Rollback, 반복적인 테스트를 위함
    @Rollback(false)// 테스트 완료 후 데이터 유지
    public void testMember() throws Exception{
        //given - 주어지는 값
        Member member = new Member();
        member.setUsername("memberA");

        //when - 테스트할 부분
        Long savedId= memberRepository.save(member); //member Entity 저장
        Member findMember=memberRepository.find(savedId); // 저장한 member Entity 가져옴

        //then - 검증
        // 넣은 member entity의 속성과 가져온 member entity의 속성 비교
        Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
        Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
        Assertions.assertThat(findMember).isEqualTo(member); // 같은 영속성 컨텍스트 안에 있으므로, 결과는 True!
    }
}

 

정상적으로 테스트가 완료되면 아래와 같은 화면이 출력된다

 

여기까지 정상적으로 완료되었다면, JPA 및 DB 연동설정은 완료된 것이다.

 

* Hibernate 로그 관련 Tip!

   - SQL 파라미터를 로그로 출력하는 방법

    1) "org.hibernate.type" 설정 이용

        - application.yml에 아래와 같은 내용을 추가한다

         - 위 설정이 성공적으로 적용될 경우 콘솔창에서 아래와 같이 SQL Parameter가 출력되는 것을 볼 수 있다

 

    2) 외부 라이브러리(P6Spy) 사용

        - build.gradle의 dependencies에 아래 내용 추가

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'

 

         - 위 설정이 성공적으로 적용될 경우 콘솔창에서 아래와 같이 SQL Parameter가 출력되는 것을 볼 수 있다

 

P6Spy을 사용할 경우, "org.hibernate.type" 설정할 때보다 훨씬 가독성이 향상된 것을 볼 수 있다

하지만, 성능 이슈가 있을 수 있으니 테스트 및 개발환경에서 주로 쓰는 것을 권장하며,

운영환경에서 사용할 경우, 성능 부하 테스트를 충분히 한 후 쓰기 바란다.

댓글