테스트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 설치

  1. 도커 설치 전 환경 설정

    • 도커를 사용하기 위해서 가상화 기술인 Hyper-V를 활성화 시킨다.
    • 작업 관리자 > 성능 > 가상화 : 사용
    • 제어판 > 프로그램 설치 및 제거 > Window 기능 켜기/끄기 클릭 > Hyper-V 체크 확인 후 리부팅
  2. 도커 설치 파일 다운 및 설치

docker 연결 오류

도커 설치 후 실행하려고 했지만, 실행할 수 없었다. 😔

wsl2 installation is incomplete

위와 같은 메세지를 담고 있는 창이 떴다. 음 .. wsl2 이게 뭐지? 난생 처음보는 ....

wsl2란?

  • WSL은 윈도우에서 경량 가상화 기술을 사용해 리눅스를 구동할 수 있도록 도와주는 기능
  • WSL2는 WSL을 대폭 개선해 훨씬 더 뛰어난 성능과 통합된 환경을 이용할 수 있다.
  • 윈도우 10 홈에서도 사용할 수 있어서, 홈 에디션에서도 도커Docker를 사용할 수 있다.

이런 것도 있다니 매우 신기했다. ㅋㅋㅋ 난 mac만 써서 항상 쉽게쉽게 우분투도 이용하고 도커도 다운받았었던 것 같은데 .. (당시 윈도우 사용중이던 친구들이 고생하긴 했음)

wsl2 설치

  1. 윈도우 터미널(Windows Terminal) 설
  2. WSL2 활성화를 위한 DISM 명령어 실행
  3. 마이크로소프트 스토어에서 WSL 용 리눅스 배포판 설치
  4. 우분투Ubuntu 배포판을 설치
  5. WSL2 리눅스 커널 업데이트 및 배포판에서 2 버전 활성화하기

다 완료했으니까 이제 TestContainers가 잘 작동하겠지? 🤨🤨🤨

가볍게 실패

이게 무슨일이야. 다음과 같은 메세지와 함께 .. 아예 인텔리제이가 켜지지 않았다.

해결

구글링을 했다.

java.util.concurrent.CompletionException: java.net.BindException: Address already in use: bind

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

댓글 중 다음과 같은 내용을 발견했다. 설마 도커 설치 전에 켜놨던 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

좋은 웹페이지 즐겨찾기