• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

h2 테스트 환경 설정시 속도 문제

22.09.14 18:32 작성 조회수 272

1

안녕하세요, 항상 친절하고 상세한 답변 감사합니다 :)

많은 도움이 되고 있습니다.

덕분에 kotlin + springboot 개발을 재밌게 하고 있는데요, 예전에 답변주신데로 h2 데이터베이스로 서비스 단위 테스트를 작성하고 개발하고 있는데 매번 테스트 실행시 속도가 좀 오래걸리더라구요.

실제로 테스트 실행은 1, 2초 내에 완료되는데,

Instantiating tests...

위 메시지와 함께 초기 테스트가 올라가는데 거의 30초 이상이 걸려서 간단한 메서드 변경 사항을 빠르게 테스트하려는데 좀 제약이 있는 상황입니다. 제가 다른 프레임워크를 쓸때는 거의 실시간으로 테스트가 동작했는데 (go 나 python) 속도를 조금 더 빠르게 할 수는 없는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

안녕하세요~~ Tony님!!! 😊 코프링 개발을 재밌게 하고 계시다니 정말 뿌듯하네요 ㅎㅎㅎㅎㅎ

아하~ 그쵸... 😢 초기 테스트를 위해서는 스프링 컨텍스트를 띄워야 하다보니, 구동 시간이 조금 걸리게 됩니다..!!

구동시간은 프로젝트 규모에 따라 차이가 있는데요 예를 들어 이번 강의에서 다루었던 간단한 애플리케이션 같은 경우는 2~3초면 스프링 컨텍스트가 떴어요!!

 

다시 질문으로 돌아와서 초기 부팅이 30초 이상이 걸리는 이유에 따라 조금더 빠르게 할 수 있는 방법이 있을 수도 있습니다! 하지만 30초 동안 정확히 어떤 부분에서 지연되는 것인지 알아야 적절한 방법을 찾을 수 있을 것 같습니다! 예를 들어, 컴파일이 느린 것인지, 스프링 컨텍스트가 뜨는 속도가 느린 것인지, 스프링 컨텍스트의 부팅이 느리다면 단계별로 어느 지점에서 병목이 있는지 등을 확인해야 될 것 같아요!

이런 이유 때문에 CI 환경을 만들어 원격 테스팅을 돌리기도 합니다!

 

제 답변이 조금이라도 도움이 되었으면 좋겠네요!!!

감사합니다~ 😊

Tony님의 프로필

Tony

질문자

2022.09.16

Book 어플리케이션 보다 작은 프로젝트인데도 저렇게 오래걸리더라구요.

Instantiating tests...

에서 뜨는게 스프링 컨텍스트 부팅이 느린거 같은데, 어느 지점에서 병목이 있는지 혹시 어떻게 확인하면 좋을까요?

흐음~~ 우선 "Instantiating tests..." 라는 로그는 사실 제가 처음 봅니다!! 😢 혹시나 해서 방금도 돌려 보았는데, 저는 찾지 못했어요..!!

우선 질문 주신 내용에 대해 일반론적인 답변을 드리자면, 로그가 나올 때 왼쪽에 시간도 함께 나오게 되는데요! 이 시간과 로그의 내용을 기반으로 각 단계가 얼마나 걸렸는지 추론하는 방식이에요!

2022-09-17 19:02:12.185  INFO 69065 --- [    Test worker] c.g.l.LibraryAppApplicationTests         : No active profile set, falling back to 1 default profile: "default"
2022-09-17 19:02:13.031  INFO 69065 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-09-17 19:02:13.095  INFO 69065 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 53 ms. Found 3 JPA repository interfaces.
2022-09-17 19:02:13.619  INFO 69065 --- [    Test worker] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-09-17 19:02:13.688  INFO 69065 --- [    Test worker] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.9.Final
2022-09-17 19:02:13.830  INFO 69065 --- [    Test worker] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-09-17 19:02:13.926  INFO 69065 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-09-17 19:02:14.108  INFO 69065 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

예를 들어, 위와 같은 로그가 있다면 아 JPA Repository를 읽어들여 구현체를 만드는데는 0.6초가 걸렸고, DBCP 설정에는 0.2초가 걸렸구나~ 와 같은 식으로 '추론'하는 느낌입니다!

Tony님의 프로필

Tony

질문자

2022.09.17

image

여기서 짧게는 10초 길게는 20초가 돌고나서 해당 로그가 나옵니다 ㅠ

즉, 저런 로그가 뜨기 전에 intellij 자체 테스트를 버튼을 눌러서 테스트를 했습니다.

image

 

아 저거 말씀이셨군요~! 저 Instantiating tests... 라고 적힌 부분을 클릭해보시면 어떤 단계가 진행중인지 아마 나올거에요! 컴파일이 느린 걸수도 있겠네요~!