티스토리 뷰

초보 웹 개발자를 위한 스프링 5 프로그래밍 입문(최범균 저)의 chap08  jdbcTemplate 예제를 따라 하다 main 클래스 (MainForMemberDao)를 실행하는데 아래와 같은 오류가 발생했다.

 

 

1월 16, 2023 6:44:53 오후 org.apache.tomcat.jdbc.pool.ConnectionPool checkPoolConfiguration
WARNING: maxIdle is larger than maxActive, setting maxIdle to: 10
Mon Jan 16 18:44:54 KST 2023 WARN: Establishing SSL connection without server's identity verification is not recommended.

 According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must 
be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification. ... 생략

 

Establishing SSL connection without server's identity verification is not recommended.

 

 

원인

위 키워드로 검색해보니 Mysql 공식 문서글이 있어서 살펴보았다.

 

"MySQL이 8 로 업그레이드되면서 여러 가지 보안이 강화되었고 연결시 기본적으로 SSL 통신을 사용하도록 변경되었습니다. 메시지 중에 다음 항목을 보면 SSL 통신 시 서버 인증서를 검증할 수 없다는 내용이 있으며 이는 서버의 SSL 인증서가 Java의 신뢰하는 인증서 목록에 없기 때문입니다. "라고 한다.

 

즉, mysql 업그레이드 보안 강화로 SSL 통신을 사용하도록 변경되었는데 인증서 목록이 없어 오류가 난다는 것 같다.

 

📌 해결 방법

공식 문서에서 나온 방법대로 AppCtc 클래스의 setUrl()값에 useSSL=false을 추가해주었다.

 

수정 전

→sp5-chap08/src/main/java/config/AppCtc.java

	@Bean(destroyMethod = "close")
	public DataSource dataSource() {
		DataSource ds = new DataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost/spring5fs?characterEncoding=utf8");
		ds.setUsername("spring5");
		ds.setPassword("0000");
		ds.setInitialSize(2);
		ds.setMaxActive(10);
		ds.setTestWhileIdle(true);
		ds.setMinEvictableIdleTimeMillis(60000 * 3);
		ds.setTimeBetweenEvictionRunsMillis(10 * 1000);
		return ds;
	}

 

수정 후

	@Bean(destroyMethod = "close")
	public DataSource dataSource() {
		DataSource ds = new DataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost/spring5fs?characterEncoding=utf8&useSSL=false");
		ds.setUsername("spring5");
		ds.setPassword("0000");
		ds.setInitialSize(2);
		ds.setMaxActive(10);
		ds.setTestWhileIdle(true);
		ds.setMinEvictableIdleTimeMillis(60000 * 3);
		ds.setTimeBetweenEvictionRunsMillis(10 * 1000);
		return ds;
	}

 

 

수정 후 main 클래스를 실행해보니 다행히 잘 실행되었다.

 

댓글