테스트DB를 PostgreSQL 로 전환 후 테스트 수행시 오류
배경
테스트 DB를 PostgreSQL로 전환하던 도중 발생한 오류이다. 테스트 db를 운영용 db와 같은 유형으로 바꾸기 위해 TestContainers을 사용했다.
에러발생
java.lang.ExceptionInInitializerError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.junit.platform.commons.util.ReflectionUtils.newInstance(ReflectionUtils.java:511)
at org.junit.jupiter.engine.execution.ConstructorInvocation.proceed(ConstructorInvocation.java:56)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
...
Can't get Docker image: RemoteDockerImage(imageNameFuture=java.util.concurrent.CompletableFuture@28486680[Completed normally], imagePullPolicy=DefaultPullPolicy(), dockerClient=LazyDockerClient.INSTANCE) at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1265)
....
강의대로 따라했는데 50개의 test 중 11개만 통과되고 39 개의 test가 fail 되었다. 우선 강의 댓글을 보고 나와 똑같은 에러가 발생한 사람이 있는지 찾아봤다. 😶
Can't get Docker image
Can't get Docker image: RemoteDockerImage(imageNameFuture=java.util.concurrent.CompletableFuture@28486680[Completed normally], imagePullPolicy=DefaultPullPolicy(), dockerClient=LazyDockerClient.INSTANCE) at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1265)
백기선님께서는 다음과 같은 답변을 달아주셨다. 답변을 보고 앗차 싶었다. 난 docker 조차 설치를 안했었다. 😳 docker 는 학부 클라우드 수업 때 많이 사용해보긴 했는데 windows에서의 경험은 없었다.
docker 설치
-
도커 설치 전 환경 설정
- 도커를 사용하기 위해서 가상화 기술인 Hyper-V를 활성화 시킨다.
- 작업 관리자 > 성능 > 가상화 : 사용
- 제어판 > 프로그램 설치 및 제거 > Window 기능 켜기/끄기 클릭 > Hyper-V 체크 확인 후 리부팅
-
도커 설치 파일 다운 및 설치
docker 연결 오류
도커 설치 후 실행하려고 했지만, 실행할 수 없었다. 😔
wsl2 installation is incomplete
위와 같은 메세지를 담고 있는 창이 떴다. 음 .. wsl2 이게 뭐지? 난생 처음보는 ....
wsl2란?
- WSL은 윈도우에서 경량 가상화 기술을 사용해 리눅스를 구동할 수 있도록 도와주는 기능
- WSL2는 WSL을 대폭 개선해 훨씬 더 뛰어난 성능과 통합된 환경을 이용할 수 있다.
- 윈도우 10 홈에서도 사용할 수 있어서, 홈 에디션에서도 도커Docker를 사용할 수 있다.
이런 것도 있다니 매우 신기했다. ㅋㅋㅋ 난 mac만 써서 항상 쉽게쉽게 우분투도 이용하고 도커도 다운받았었던 것 같은데 .. (당시 윈도우 사용중이던 친구들이 고생하긴 했음)
wsl2 설치
- 윈도우 터미널(Windows Terminal) 설
- WSL2 활성화를 위한 DISM 명령어 실행
- 마이크로소프트 스토어에서 WSL 용 리눅스 배포판 설치
- 우분투Ubuntu 배포판을 설치
- WSL2 리눅스 커널 업데이트 및 배포판에서 2 버전 활성화하기
다 완료했으니까 이제 TestContainers가 잘 작동하겠지? 🤨🤨🤨
가볍게 실패
이게 무슨일이야. 다음과 같은 메세지와 함께 .. 아예 인텔리제이가 켜지지 않았다.
해결
구글링을 했다.
java.util.concurrent.CompletionException: java.net.BindException: Address already in use: bind
댓글 중 다음과 같은 내용을 발견했다. 설마 도커 설치 전에 켜놨던 hyper -v 가 문제였을까? 다시 제어판 들어가서 hyper -v 에 체크를 해제했다. 윈도우 재부팅 후 다시 인텔리제이를 켜보니 성공 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
에러로 시뻘겋던 창이 사랑스러운 초록색으로 바뀌었다. 💪 💚💚💚💚💚
출처:
https://goddaehee.tistory.com/251 [갓대희의 작은공간]
https://www.44bits.io/ko/post/wsl2-install-and-basic-usage
https://intellij-support.jetbrains.com/hc/en-us/articles/360007568559-Start-Failed-Internal-error-recovering-IDE-to-the-working-state-after-the-critical-startup-error
Author And Source
이 문제에 관하여(테스트DB를 PostgreSQL 로 전환 후 테스트 수행시 오류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leyuri/테스트DB를-PostgreSQL-로-전환-후-테스트-수행시-오류저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)