728x90
1. h2 데이터베이스 설치
설치는 아래 링크를 통해 os에 맞는 데이터베이스를 설치하면 된다.
2. 데이터베이스 파일 생성
2-1. 설치된 데이터베이스의 bin 파일에 접근한다.
../h2/bin
2-2. 명령어를 통해 데이베이스를 열어준다
./h2.sh
이때 permission denied 가 뜬다면
chmod 755 h2.ch
를 이용해 권한을 변경하면 된다.
2-3. 실행 하면 다음과 같은 창이 뜨는데 , 이때 포트 앞의 주소를 localhost로 변경한 뒤 원하는 url을 설정한다.
2-4. 연결버튼을 눌러 데이터베이스 파일을 생성한다.
2-5. 홈 디렉토리에서 .mv.db 파일이 생성 되었는지 확인한다.
ls -arlth
jpatest.mv.db 파일이 성공적으로 생성된 것을 확인할 수 있다.
2-6. 이후로는 JDBC URL에 다음과 같은 url을 사용해 접근하면 된다.
jdbc:h2:tcp://localhost/~/jpatest
3. application.yml 설정
이제 스프링부트 프로젝트에 방금 생성한 h2데이터베이스를 연결해 주면 된다.
main/resource/application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/jpatest
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
logging.level:
org.hibernate.SQL: debug
4. 확인
잘 설정이 되었는지 확인해보자.
간단한 Member Entity를 만들어서 확인해 본다.
../com/wwan13/jpatest/Member
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
../com/wwan13/jpatest/MemberRepository
@Repository
public class MemberRepository {
@PersistenceContext
EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
테스트
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class MemberRepositoryTest {
@Autowired
MemberRepository memberRepository;
@Test
@Transactional
@Rollback(value = false)
public void testMember() {
Member member = new Member();
member.setUsername("memberA");
Long savedId = memberRepository.save(member);
Member findMember = memberRepository.find(savedId);
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
Assertions.assertThat(findMember).isEqualTo(member);
}
}
여기서 마지막 테스트로 생성자로 만든 member 과 .find(id) 로 찾은 멤버가 같은 이유는 무엇일까?
이 두 entity는 같은 transactional 안에서 멤버를 저장하고, 조회하고 있다. 즉 영속성 컨텍스트가 같다 따라서 같은 영속성 컨텍스트 내에서 id의 값이 같다면 이 두 객체는 같은 entity로 식별한다.
Transactional 애노테이션이 test에 적용되어 있다면, 테스트가 끝나고 이를 자동으로 롤백 해버린다.
따라서 이를 막기 위해 @Rollback 애노테이션에 false 설정을 부여하여 롤백을 방지한다.
결과를 보면 테스트에서도 MEMBER table이 잘 생성 되는것을 확인할 수 있고,
h2 데이터베이스에도 MEMBER 테이블이 성공적으로 생성된 것을 볼 수 있다.
5. 추가 : 쿼리 파라미터 로그 남기기
기존엔 다음과 같이 쿼리 파라미터들이 모두 ? 로 남았다.
스프링부트에 아래 라이브러리를 추가해주기만 하면
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
파라미터가 모두 로그로 남는다!
앞으로 유용하게 사용할만한 라이브러리다
wwan13 - Overview
😜. wwan13 has 31 repositories available. Follow their code on GitHub.
github.com
728x90