[Spring-입문] h2 데이터베이스 연결

DANI·2023년 11월 16일

Spring[김영한T]

목록 보기
8/31
post-thumbnail

✨ 가상 메모리가 아닌 h2 DB에 연결하여 데이터를 저장해보자!



✅ build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가

👉 implementation 'org.springframework.boot:spring-boot-starter-jdbc'
👉 runtimeOnly 'com.h2database:h2'



💾 스프링부트 데이터베이스 연결 설정 추가

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa

DB에 연결하기 위해서는 Drive, url, id, pw가 필요하다! 여기서 pw는 설정하지 않았음



📂 이제 입력되는 데이터는 전부 DB에 저장이 된다!





💻 스프링 통합 테스트

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest 
@Transactional
class MemberServiceIntegrationTest {

      @Autowired MemberService memberService;
      @Autowired MemberRepository memberRepository; 

      @Test
      public void 회원가입() throws Exception {
        //Given
        Member member = new Member();         
        member.setName("hello");
        //When
        Long saveId = memberService.join(member);
        //Then
        Member findMember = memberRepository.findById(saveId).get();
        assertEquals(member.getName(), findMember.getName()); 
        }

        @Test
        public void 중복_회원_예외() throws Exception {
        //Given
        Member member1 = new Member();         
        member1.setName("spring");
        Member member2 = new Member();         
        member2.setName("spring");

        //When
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class,
                () -> memberService.join(member2)); //예외가 발생해야 한다.
        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); 
        }
}

✨ @SpringBootTest

: 스프링컨테이너와 테스트를 함께 실행한다.

✨ @Transactional

: 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게하면 DB에 데이터가 남지않으므로 다음테스트에 영향을 주지 않는다.



0개의 댓글