SpringBoot 게시판 프로젝트

스프링부트(SpringBoot) 게시판 만들기 (2) - DB 연결

얼뚱인데요 2024. 7. 2. 20:40
Gradle 기반 스프링부트 프로젝트에 MySQL 연동하기

 

참고하던 블로그는 MariaDB를 사용하였지만 나는 기존에 MySQL을 사용했었고

굳이 MySQL에서 파생된 MariaDB를 새로 깔아서 할 이유가 없다고 생각하여
MySQL을 선택하였다.

 

연결하기 위해서는 데이터 소스 설정을 해주어 빈을 구성한다.

소스 설정은 application.properties 파일에 DB 정보를 선언하는 방식을 사용하였다.

# Spring DataSource (MySQL)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/board?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.hikari.connection-test-query=SELECT NOW() FROM dual

 

이렇게 입력을 했더니 첫 줄 코드에 com. 뒤부터 빨간색으로 뜨는 것.

지금은 해결 돼서 정상적으로 표시됨

 

이는 build.gradle 에 mysql 연결 라이브러리를 추가해주지 않았기 때문이다!

 

그런데, 의존성 추가를 해주어도 빨간색이 없어지지 않았다.

서치해보니 연동하는 코드가 변경이 되어서 시중에 떠도는 코드로는 되지 않았던 것 같다. 

// 처음에 입력했던 기존 코드
runtimeOnly 'com.mysql:mysql-connector-java'
// 이후에 입력하여 제대로 연결 된 코드
runtimeOnly 'com.mysql:mysql-connector-j'

 

 

이제 데이터 소스 객체(Bean)를 관리해 줄 config 파일(앞서 선언해둔 걸 참조하는 설정 파일)을 만들어주자. 

**** 모든 코드들은 맨 아래 첨부해놓은 블로그 참고.

 

* 스프링 레거시는 xml 설정 파일에 데이터 소스를 구성하는 반면, 스프링부트는 클래스에 @Configuration 어노테이션만 선언해주면 해당 파일이 Java 기반의 설정 파일임을 인식한다고 함

 

빈(Bean) 구성이 끝났으면 해당 빈을 기준으로 JUnit 단위 테스트 해보기.

 

이 구간에서 한참동안을 헤멨다 ..^^ 자꾸 테스트 실패가 뜨는 것이다..

분명 데이터베이스 연결 정보도 똑바로 다 넣었는데 말이지ㅠㅠ

cmd창에서 해당 db 접속 되는지 확인도 해봤고, 인텔리제이 Database 연결 테스트도 해봤는데 성공적으로 연결이 됨..

설정 파일 위치도 올바르고... 저 뭐가 문젠가요? ㅜㅜ

 

 

아래는 Bean 구성하는 코드 중 일부인데,

이 부분에서 제대로 외부 설정 파일(application.properties)을 불러오지 못하는 것 같았다.

 

 

한참동안을 이것저것 수정해봤지만 해결되지 않았다.

그래서 그냥 속성을 명시적으로 직접 설정해주는 코드로 변경했더니 테스트가 성공했다.

// 변경 전 - '@ConfigurationProperties' 사용하여 자동으로 속성 가져와서 설정
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
    return new HikariConfig();
}

@Bean
public DataSource dataSource() {
    return new HikariDataSource(hikariConfig());
}
// 변경 후 - HikariConfig 직접 설정 (모든 필수 속성을 명시적으로 설정)
@Bean
public DataSource dataSource() {
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
    hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/board?serverTimezone=Asia/Seoul&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true");
    hikariConfig.setUsername("boarduser");
    hikariConfig.setPassword("boarduser");
    HikariDataSource dataSource = new HikariDataSource(hikariConfig);
    return dataSource;
}

 

~~~!!!!! 바보가튼 나의 실수였다!!!!


jdbc-url 이 아니라 url 만 적었던 나으 실수 !!!!! 해결~~

 

 


모든 코드는 아래 블로그를 참고합니다!
https://congsong.tistory.com/14