미친에러

에러 아니고 그냥 연동하는건 build.gradle에 MySQL, JPA 의존성 넣어주고 리로드하고 application.properties에 설정 해주면 된다.

근데 나는 무수한 에러의 손짓을 받아서 에러정리를 해보려 한다.

에러 얘기하기 전에 내 MySQL 설정 어케했나

이름 root. 비번 대충. test table 삭제…(이게 원흉이었던 것 같기도,,).. 암튼 남들과 다를 바 없었다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 에러

application.properties에 넣어주는 설정값들 중 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver이 있었다.

여러 블로그들에 공통적으로 나와 있는 코드를 복사 붙여넣기 했는데 com.mysql.cj.jdbc.Driver에 빨간줄이 싸악 떠서 당황.,,

버전에 따라 이름이 다르다고 하는데 구버전에선 cj가 빠진다. 근데 나는 구버전이 아니었고…

외않되? 하고 혹시나 싶어 External Libraries 봤더니 mysql 없음,.,,

build.gradle 들어가서 코끼리 다시 돌려주니 정상적으로 도라왔다.

Could not find mysql:mysql-connector-java:

이젠 되겠지 하고 돌려보니 또 에러 폭탄.

구글링 돌려보니 mysql-connector-java 잘 설치됐는지 확인하란다,,, 나 방금 그거 해결한 것 같은데..?

근데 기가막히게 봤는데 없다. 귀신이 곡할 노릇,,,

그래서 여차저차 찾다가 버전 명시를 안 해줘서 그런가 하고 dependency에 버전을 넣어줬다.

    implementation 'mysql:mysql-connector-java:8.0.31'

그랬더니 됨.. 도대체 뭔데.. 기준이 뭔데…1!!

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set

이…. 이게 뭐여

바로 구글링 ㄱ

여기서 등장하는 hibernate는 데이터베이스에 접근할 때 쓰는 친구라고 한다.

hibernate.dialect가 설정이 안되어있어서 생기는 에러같은데, 이게 뭔데?

데이터베이스와 통신을 하기 위에 사용하는 언어라고 한다. 나는 MySQL을 쓸거니까 MySQL 쿼리 쓸거임~ 하고 명시해줘야 한다는 뜻.

그래서 application.properties에 해당 부분을 추가해줬다.

spring.jpa.database=mysql

이 에러에 대해 정말 잘 정리해둔 블로그 발견. 자고로 블로그 글은 이정도 되어야하는 듯 하고,,, 나는 또 반성의 시간,,,

Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed

산 넘어 산.

Public Key Retrieval이 허용되지 않았다고? 뭔데요 ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ

이쯤되니 이해하려는 생각보다 에러 없는 로그를 보고 싶은 생각으로 무지성 구글링. 는 쩌는 글 참고.

MySQL 8.0 버전부터 보안 이슈로 useSSL 옵션에 대한 추가 설정이 필요해졌다고 한다. 그래서 위와 같은 에러가 발생하면 다음 옵션을 확인하자.

useSSL: DB에 SSL로 연결
allowPublicKeyRetrieval: 서버에서 RSA 공개키를 검색하거나 가져와야하는지

나는 무지성 긁어오기로 useSSL=false는 설정을 했는데 allowPublicKeyRetrieval은 설정을 하지 않아서 생긴 문제였다.

역시나 application.properties에 있는 url에 다음 쿼리를 추가했다

# allowPublicKeyRetrieval=true 설정

spring.datasource.url=jdbc:mysql://localhost:3306/world?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=Asia/Seoul 

unknown database ‘world’

최종보스.

아니 얘는 딱 봐도 world라는 데이터베이스가 없어서 생긴 문제같은데 나는 MySQL 설정할 때 그 어떤 데이터베이스도 만들어두지 않았다…….고……..

그게 문제였던듯. (근데 도대체 어디서 world라는 애가 있던걸까 도대체 어디에..?)

갓택오버플로우 선생님들의 말에 따라 해당 이름의 데이터베이스를 생성해줬더니 해결..~~…..ㅠ

결론

살려줘.

댓글남기기