반응형
Process finished with exit code 1 뜨면서 JDBC 연결 안될 시
Connecting to database...
java.sql.SQLException: No suitable driver found for jdbc:mysql://서버주소.com:3306/test
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at Main.main(Main.java:26)
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.rollback()" because "conn" is null
at Main.main(Main.java:59)
Process finished with exit code 1
자바에서 mysql을 연결 시에는 MySQL Connector/J 외부 라이브러리 디펜더시(의존성)가 필요합니다.
만약 의존성이 설치되어 있지않으면, 당연히 MySQL과 어떻게 연결할지에 대해 모르기 때문에 에러가 발생하면서 연결이 되지 않습니다.
- 프로젝트를 만들 때 한꺼번에 넣으면 되지 않나? 왜 귀찮게 이렇게 만들었을까? 생각할수도 있지만, 그렇게되면 매번 프로젝트를 생성할 때마다 각양각색의 라이브러리 등을 다운로드 받고 적용하느라 무거워지고, 생성 할때마다 엄청난 시간이 걸릴지도 모릅니다.
하지만 메이븐과 그래들에는 의존성을 코드 한줄만 입력하면 우리가 만든 프로젝트에 저절로 필요한 플러그인, 라이브러리 등을 알아서 다운로드 하여 적용 시켜 줍니다.
JDBC 연결 시 javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify 에러(경고)가 뜹니다.
** BEGIN NESTED EXCEPTION **
javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify
STACKTRACE:
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:838)
at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:817)
at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:2249)
at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4221)
at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1464)
at Main.main(Main.java:52)
** END NESTED EXCEPTION **
Process finished with exit code 0
위 경고(에러)가 뜨지만, sql 조회는 되는 경우가 있습니다.
어찌됐든간에 조회가 됐으니 넘어갈수도 있지만, 왜 SSLException가 뜨는지 궁금합니다.
문서를 살펴보니, 서버가 SSL을 사용하도록 올바르게 구성된 한, 커넥터/J 클라이언트에서 암호화된 연결을 사용하도록 구성할 필요가 없습니다(예외는 커넥터/J가 5.6.25 이전 또는 5.7.5 버전을 쓰는 경우, 혹은 MySQL 서버 버전)
즉 5.6.25 혹은 5.7.5 이전 버전의 외부라이브러리를 사용하게 되면 SSL를 사용된 SQL서버에 접속시에는 설정을 구성할 필요가 있다고 합니다.
- 해결방법
- ① 실습환경에서 제공된 서버는 https가 적용된 AWS서버라서 connect/j를 버전을 올려주시면 위 에러(경고)창은 해결 될 겁니다.
- ② connect/j 버전을 낮은걸로, jdbc 연결 시에는 SSL연결이라고 명시를 해주면 됩니다.
옛날에는 SSL(https)를 선택이라서 http로 연결을 시도했지만, 요즘은 보안때문에 SSL로 연결을 시도하기 때문입니다.
jdbc:mysql://localhost:3306/test?verifyServerCertificate=true&useSSL=true&requireSSL=true
추가로 connect버전을 올려도 똑같은 에러메시지가 뜨셨다면, openjdk를 사용하셔서 그럴 수 있습니다.
https 접속 시 javax.net.ssl.SSLException: java.lang.RuntimeException: 에러 발생 원인
반응형
'개발 > Spring | Java | Error' 카테고리의 다른 글
자바의 정석- 프로세스와 쓰레드 (0) | 2022.03.13 |
---|---|
java.util.Objects, java.util.Random, java.util.regex(정규식) (0) | 2022.03.13 |
StringBuilder와 StringBuffer 차이 (0) | 2022.03.13 |
JAVA Object (0) | 2022.03.13 |
Maven과 Gradle, Build 방법 (0) | 2022.03.13 |