인프런 커뮤니티 질문&답변

Tony님의 프로필 이미지
Tony

작성한 질문수

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

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

작성

·

358

1

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

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

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

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

Instantiating tests...

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

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

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

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

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

 

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

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

 

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

감사합니다~ 😊

Tony님의 프로필 이미지
Tony
질문자

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
질문자

image

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

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

image

 

최태현님의 프로필 이미지
최태현
지식공유자

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

Tony님의 프로필 이미지
Tony

작성한 질문수

질문하기