Mysql database 생성
책 예제에서는 Oracle을 사용했지만, 이전에 사용했던 Mysql로 연동했다.
https://sujinpad.tistory.com/80
디펜던시 추가
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.7</version>
</dependency>
test 코드 작성 > Junit Test
* JUnit: 단위 테스트 프레임워크
package org.zerock.persistence;
import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JDBCTests {
// SLF4J 로거를 초기화합니다.
private static final Logger log = LoggerFactory.getLogger(JDBCTests.class);
static {
try {
// MySQL JDBC 드라이버 클래스를 로드(DBMS 별로 name이 다름)
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testConnection() {
try (Connection con = DriverManager.getConnection(
// MySQL 데이터베이스에 연결
// 데이터베이스 서버 주소 및 포트, 데이터베이스 이름, SSL옵션 추가
"jdbc:mysql://localhost:3306/BOOK?useSSL=false",
//"jdbc:mysql://localhost:3306/BOOK?useSSL=true&verifyServerCertificate=true",
// "jdbc:mysql://localhost:3306/BOOK", // 데이터베이스 서버 주소 및 포트, 데이터베이스 이름
"book_ex", // 사용자 이름
"1234")) { // 사용자 비밀번호
// 연결에 성공하면 연결 정보와 함께 로그 메시지를 출력
// {}는 포맷 문자열로 동적인 값으로 대체됨. 매게변수로 받음. con이 {}에 대체됨
log.info("Connection: {}", con);
} catch (Exception e) {
// 연결이 실패하면 예외가 발생하고 스택 트레이스를 출력
e.printStackTrace();
}
}
}
JRE 라이브러리 안에 JDBC 모듈이 있음
JUnit은 단위 테스트 프레임워크
콘솔에 con값이 출력되었으나 에러메세지와 경고메세지가 출력되었다.
1. MySQL JDBC 드라이버 클래스를 찾을 수 없을 때 발생
* MySQL JDBC 드라이버 버전
MySQL 8.0 이상 com.mysql.cj.jdbc.Driver
이전 버전은 com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.jdbc.cj.Driver
2. SSL(Secure Sockets Layer)옵션을 설정
verifyServerCertificate를 false로 하여 유효성 검사를 하지 않거나(인증서가 잘못되어도 연결을 허락한다.), SSL옵션을 추가하거나 false로 하여 비활성화를 제안하는 메세지이다.
Wed Oct 25 20:33:45 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.
* 스프링시큐리티랑 SSL의 차이가 궁금하여 찾아봤다.
SSL
- 데이터의 전송 보안을 담당하고, 데이터의 암호화와 안전한 통신을 하기 위한 보안 프로토콜(통신규약)
- HTTPS(HTTP + Security-SSL 또는 LTS프로토콜)에 통해 사용되며, 웹브라우저와 웹 서버 간 데이터 전송을 암호화하고, 인증하여 정보를 안전하게 전송한다 .(데이터의 무결성, 기밀성을 보장해줌)
- TCP/IP계층에서 전송계층 (Transport Layer)과 응용계층(Application Layer)의 데이터를 처리하기 전 사이에서 적용된다.
스프링시큐리티
- 애플리케이션의 사용자 인증 및 권한 부여, 세션관와 관련된 보안 기능을 제공하는 프레임워
- 애플리테이션 레벨에서 보안을 구성하고, 제어한다.