[Spring] H2 데이터베이스 설치, 스프링 통합 테스트

728x90

H2 데이터베이스 설치

- 교육용으로 적합

- 개발, 테스트 용도로 가볍고 편리

- 웹 화면 제공

 

H2 데이터베이스 설치를 위해 https://www.h2database.com/ 에 접속한 뒤, 원하는 버전을 선택해 설치한다.

(H2 데이터베이스 홈페이지)

 

스프링 부트 2.x > 1.4.200 버전 다운로드

스프링 부트 3.x > 2.1.214 버전 이상 다운로드

 

압축을 풀고,

`h2` 파일에 들어가 `bin`폴더로 들어간다.

 

- `chmod 755 h2.sh` 로 권한을 줘야 실행이 된다.

- `./h2.sh` 으로 h2.sh 파일을 실행한다.

 

윈도우

- `./h2.bat` 로 h2.bat 파일을 실행한다.

 

정상 생성이 되지 않는 경우, url의 `:` 부분 앞 아이피 부분을 지우고, `localhost`로 수정하면 접근할 수 있다.

 

(H2 데이터베이스 실행 화면)

 

 

JDBC URL

1. 최초 한 번은 `jdbc:h2:~/test` 로 접속하여 들어간 다음, 다시 나온다.

2. `dir`(맥은 `ll`) 로 `~/test.mv.db` 파일이 생성됐는지 확인한다.

3. 이후부터는 `jdbc:h2:tcp://localhost/~/test` 로 접속하여 들어간다. 

 

> 참고 <

 `jdbc:h2:~/test` 로 파일을 통해 다양한 곳에서 접근하면 오류가 발생

 `jdbc:h2:tcp://localhost/~/test` 로 파일이 아닌 소켓을 통해 다양한 곳에서 안전하게 접근

 

만약 문제가 생기면, `~/test.mv.db` 파일을 삭제한 뒤 다시 실행한다.

 

 

 

예를 들어

drop table if exists member CASCADE;
create table member
(
 id bigint generated by default as identity,
 name varchar(255),
 primary key (id)
);

 

이런 식으로 작성하여 member table 을 생성할 수 있다.

 

스프링 통합 테스트

- 테스트 클래스 위에 @SpringBootTest, @Transactional 스프링 빈을 추가한다.

- @Autowired 로 사용할 클래스를 불러온다.

 

@SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행

@Transactional : 테스트를 완료한 뒤 항상 rollback 하여 DB에 반영되지 않도록 한다.

@Commit : @Transactional 이라도 commit 하여 DB에 저장된다.

 

> 참고 <

- 운영 DB와 테스트 DB를 보통 따로 준비한다.

- 순수한 자바 단위 테스트가 스프링 컨테이너, DB와 연결된 테스트보다 좋은 테스트이다.

 

예시 코드

@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    // @Commit
    @Test
    void 회원가입() {
        Member member = new Member();
        member.setName("spring100");

        Long saveId = memberService.join(member);

        Member findMember = memberService.findOne(saveId).get();
        Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
    }
}

 

 

 

 

 

 

 

출처 | 스프링 입문(김영한) - 인프런

728x90