상세 컨텐츠

본문 제목

JPA, H2 database 설정

기록 - 프로그래밍/Spring

by wjjun 2021. 12. 12. 07:35

본문

 

 

H2 다운로드

안정화 버전(Last Stable)을 설치합니다

 

H2 실행

다운로드한 H2 압축을 해제한 후

1) h2/bin 파일에 h2.sh 파일 실행 권한을 chmod 755로 변경합니다

2) 그리고 h2 스크립트 파일을 실행시킵니다

 

H2 데이터베이스 연결

스크립트를 실행하면 브라우저가 화면에 나타납니다.

URL 주소에 host 부분을 localhost로 변경해서 호출합니다

http://localhost:8082/login.jsp?jsessionid=a24a6eaf3e883d52f167b308bbedb95f

 

h2 접속창이 표시가 되면

파일 모드로 1회 접속하여 데이터베이스를 생성합니다

여기서 JDBC URL 주소를 사용하여 접속합니다 

JDBC URL : jdbc:h2~/querydsl

 

데이터베이스 접속된 것을 확인합니다

 

데이터베이스 경로에 mv.db 파일이 생성된 것을 확인하실 수 있습니다

 

데이터베이스 연결을 끊고

브라우저와 애플리케이션에서 동시에 접근하기 위해

TCP 방식으로 다시 연결합니다

TCP URL : dbc:h2:tcp://localhost/~/Install/h2/localdb/querydsl

여기까지 완료되었다면 어플리케이션에 H2 데이터베이스만 설정하여

실행시키면 H2 데이터베이스를 이용할 수 있습니다

 

(h2 데이터베이스 생성 확인 참고)

~/ 로컬 경로에 microservice라는 h2 데이터베이스를 생성하고 싶다면

첫 번째 연결은 JDBC 방식으로 데이터베이스 생성 : jdbc:h2:~/microservice

이후 부터는 TCP 방식으로 브라우저에서 연결 : jdbc:h2:tcp://localhost/~/microservice

어플리케이션에 실행 :

 

spring.datasource.url=jdbc:h2:tcp://localhost:9092/mem:microservice

 

application.yml 설정

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/Install/h2/localdb/querydsl
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create-drop
    properties:
      hibernate:
        show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug

 

어플리케이션을 실행시킵니다

2021-12-11 18:49:39.022  INFO 50120 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-12-11 18:49:39.031  INFO 50120 --- [           main] c.t.querydsl.QuerydslApplication         : Started QuerydslApplication in 2.351 seconds (JVM running for 2.862)

 

ddl-auto 설정을 create-drop로 설정했기 때문에

어플리케이션 작성한 Entity 클래스가 테이블로 생성된 것을 확인하실 수 있습니다

 

테이블에 insert 되는지 테스트 코드를 통해 확인하실 수 있습니다

@SpringBootTest
@Transactional
@Commit
class QuerydslApplicationTests {

 @Autowired
 EntityManager entityManager;

 @Test
 public void 프로젝트_QUERY_DSL_설정_성공_테스트() {
  Customer customer = new Customer();
  entityManager.persist(customer);

  JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
  QCustomer qCustomer = new QCustomer("hello");

  Customer selectedCustomer = queryFactory
    .selectFrom(qCustomer)
    .fetchOne();

  Assertions.assertThat(selectedCustomer).isEqualTo(customer);
 }
}

 

참고 1)

Test 환경에서는 생성된 테이블이 drop 되지 않도록 ddl-auto 옵션값을 create로 변경합니다

ddl-auto: create

 

참고 2)

실행된 쿼리에 '?' 값을 확인할 수 있도록 설정할 수 있습니다

 

1) org.hibernate.type: trace를 추가합니다

logging.level:
  org.hibernate.SQL: debug
  org.hibernate.type: trace

 

여기서 조금 더 편리하게 볼 수 있도록

p6spy-spring-boot-starter 라이브러리를 추가합니다

 

2) p6spy-spring-boot-starter 라이브러리 추가 (선택사항)

(운영 환경에 추가되기 전에는 성능테스트 필요)

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

 

추가해주신 다음 실행해보면 아래와 같이 '?' 표시가 대신

실제 입력되어진 값들이 표시되는 것을 확인하실 수 있습니다.

2021-12-11 19:31:34.312  INFO 56228 --- [           main] p6spy                                    : #1639218694312 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/Install/h2/localdb/querydsl
insert into customer (id, email, gender, name, nickname, password, phone_number) values (null, ?, ?, ?, ?, ?, ?)
insert into customer (id, email, gender, name, nickname, password, phone_number) values (null, 'jun@gmail.com', 'M', 'Jun', 'j', '1234', '01099990000');

 

관련글 더보기

댓글 영역