작성
·
277
0
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
2024-10-09T14:59:40.805Z WARN 1 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata
org.hibernate.exception.JDBCConnectionException: unable to obtain isolated JDBC connection [Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.] [n/a]
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:100) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
안녕하세요. 강사님. 늘 퀄리티 좋은 강의 감사드립니다.
섹션 6. Docker Compose를 활용해 2개 이상의 컨테이너 관리기에서 스프링부트와 MySQL을 동시에 띄워보는데 위와 같은 예외가 나서 문의드립니다.
application.yml
에서 url: jdbc:mysql://my-db:3306/mydb
로 바꿔도 같은 상황입니다.
이후 계속 시도를 하다가, build.gradle
에 있는 jpa관련 의존성을 빼고 도커를 올리니 성공하였습니다. 그리고 다시 도커를 내리고 jpa의존성을 다시 추가하고 도커를 올리니 이제는 redis까지 올려서 운용 중입니다. 하지만 원인이 궁금하여 이렇게 문의 남깁니다.
감사합니다.
답변 2
0
안녕하세요 kyukyu0314님!
말씀해주신 에러 메시지를 해석해봤을 때는
데이터베이스와의 연결 상태 문제로 확인됩니다!
하지만 데이터베이스의 정보 자체를 잘못 작성했을 때 발생하는 에러는 아닙니다.
네트워크 연결에 있어서 문제 발생으로 예상됩니다.
네트워크 연결에 있어서 문제 원인은 다양하다보니
만약 위 에러가 지속적으로 발생하거나 자주 저 에러를 만난다면 다시 한 번 질문 남겨주세요!
그리고 어떤 상황에서 주로 저 에러가 발생하는 지도 규칙성을 체크해놓으시면 좋을 것 같습니다!
그러면 그 규칙성을 바탕으로 추가적으로 원인 파악 도와드릴게요~!!
추가적으로 궁금한 점이 생기시면 다시 질문 남겨주세요:D
0
안녕하세요, 인프런 AI 인턴입니다. kyukyu0314님 질문 주셔서 감사합니다.
해당 오류 메시지인 org.hibernate.exception.JDBCConnectionException
은 주로 데이터베이스와의 연결 문제로 발생합니다. 특정 네트워크 문제나 잘못된 설정이 원인일 수 있습니다. 하지만 구성에서 JPA 의존성을 제거했을 때는 정상 작동했다가 다시 추가했을 때도 문제가 없었다는 점을 보면, 초기 설정이나 빌드 과정에서 특정 지연이나 순서가 영향을 미쳤을 가능성이 있습니다.
이러한 문제는 다음과 같은 몇 가지 이유로 발생할 수 있습니다:
네트워크 연결 지연: Docker Compose에서 MySQL 컨테이너가 아직 준비되지 않은 상태에서 Spring Boot 애플리케이션이 먼저 시작되면 발생할 수 있습니다. depends_on
속성을 이용하여 의존성을 선언할 수 있지만, 이는 컨테이너의 “준비 상태”를 완벽히 보장하지는 않기 때문에 나중에 강의를 통해 더 안정적인 방법으로 보완하는 방법들을 배우실 수 있습니다.
라이브러리나 설정 충돌: JPA 의존성을 추가하면서 특정 라이브러리의 버전이나 설정의 오류 등으로 인해 문제가 발생할 수 있습니다. 의존성을 제거했다가 다시 추가했을 때 문제가 해결되었다는 점은 빌드 캐시나 일시적인 환경 변수 문제였을 가능성을 시사합니다.
Docker 네트워크 문제: MySQL 컨테이너가 동일 네트워크 상에 존재하지 않는 경우, “my-db”라는 호스트명을 올바르게 인식할 수 없게 됩니다. 이러한 경우 Docker Network 설정이 적절히 구성되었는지 확인이 필요합니다.
이에 대한 자세한 해결 방법이나 관련되는 질문은 다음의 링크를 통해 참고하실 수 있습니다:
JDBCConnectionException 관련 유사 질문 - 유사한 오류를 겪었던 다른 사용자의 해결 과정을 참고할 수 있습니다.
Docker Compose와 DB 연결 이슈 해결 - Docker Compose를 사용할 때의 데이터베이스 연결 문제 해결 방법에 대한 설명입니다.
문제의 근본적인 원인을 파악하기 위해서는 로그를 더욱 자세히 분석하거나, 환경 변수 값을 검토하고, 네트워크 상태를 확인하는 등의 방법으로 접근하는 것이 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.