본문 바로가기

Framework/SpringBoot

[ DSIS_BE ] 카페 원두 관리 서비스 (1) : DB 연동 설정

 

뒤돌아서면 까먹는 본인임을 알기에 ... 개념 정리하며 리마인드 해보겠습니다. 정말 그만 좀 까먹었으면 해요 ;;

그리고 종강하면 김영한님 스프링 강의 복습하면서 개념을 매꾸도록 할게요.

 

기존에 생성했던 dsisSpring 프로젝트에서 작업을 진행해보겠습니다.

  • Spring Boot : 3.4.5
  • Lombok
  • Spring Configuration Processor

 

4주차에서는 "카페 원두 관리" 라는 주제로 실습을 진행했다.

스프링부트 프로젝트 구조인 Controller, Service, Repository에 대해서 매번 어설프게 기억만 하는데

나만의 언어로 마지막에 최종 정리까지 해보겠다.

 

 

1. DB 연동 설정 (application.properties)


 

스터디에서는 MySQL workbench 사용을 추천하였는데,

그래도 연구학점제를 한 학기동안 하고 있는데 배운 걸 좀 써먹어야 안 까먹을 것 같아서 Shell로 초기작업을 했다.

 

우선 MySQL Server가 저장되어 있는 경로로 접속한 후, mysql -u root -p를 입력하면 root 비밀번호를 입력하게 된다.

 

 

데이터베이스 생성, 데이터베이스 전환 
mysql> CREATE DATABASE dsisStudy;
mysql> USE dsisStudy;

 

사용자명 확인
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.01 sec)

 

이렇게 root 사용자명까지 확인이 끝났고 IntelliJ로 돌아가 다른 작업을 진행한다.

Intellij에서 터미널을 켜놓고 작업을 하면 되지 않았나 .. 라는 생각이 드는데

 

모쪼록 resources 디렉토리로 가서 application.properties에 들어가봅니다.

이 아이는 무슨 역할을 하는 아이냐 하면 ~ 

일반적인 Spring Boot 속성 목록과 해당 속성을 사용하는 기본 클래스에 대한 참조를 제공
https://docs.spring.io/spring-boot/appendix/application-properties/index.html
 

Common Application Properties :: Spring Boot

 

docs.spring.io

 

 

 

이제까지 스프링부트 학습을 할 때는 Spring Initializr에서 H2라는 데이터베이스를 선택하여 사용하였다.

https://start.spring.io/ (여기 사이트에서)

그래서 따로 application.properties에 들어가서 설정 작업을 해본 기억이 없다 (아마..)

 

이번에는 Spring에 MySQL 연결을 해보았는데 ~ 새롭네요 ^_^

 

 

application.properties
# DB 설정 부분
spring.datasource.url=jdbc:mysql://localhost:3306/dsisStudy?serverTimezone=Asia/Seoul&characterEncoding=utf8
spring.datasource.username= {사용자명}
spring.datasource.password= {비밀번호}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

 

위와 같이 설정을 해주고 실행을 시켰는데 이게 무슨 ...

침착하게 ~ 구글을 켰다.

 

프로젝트 초기설정에서 의존성 주입하는 부분을 이전에 스터디 리더님과 함께 작업하였는데,

구글링해서 얻은 소스랑 내 소스랑 다른 게 뭔지 찾아보았다.

 

https://dongdu-blog.tistory.com/16

 

[에러] Spring에 MySQL 연결하기 (Gradle)

Spring을 처음 배웠을 때, 인프런의 김영한 선생님 영상을 보고 배웠었다. 그때는 H2라는 DB에 연동해서 사용했었는데 뭔가 불편해서 평소에 내가 자주 사용했던 MySQL으로 DB를 바꾸고 싶었다. 목표

dongdu-blog.tistory.com

오늘의 선생님이다.

나랑 똑같은 작업을 하고 계셨고, 똑같은 에러가 발생했던 분이심

 

 

문제 해결

build.gradle 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    implementation 'org.springframework.boot:spring-boot-devtools'
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
 }

 

원래 나의 의존성 부분에 대한 내용이다.다른 블로그를 뒤져 보았을 때 아래 내용이 없다는 걸 알게 되었고,

해당 내용을 추가하고 다시 build 해주었다.

    dependencies {
       implementation 'org.springframework.boot:spring-boot-starter'
       runtimeOnly 'mysql:mysql-connector-java'
       testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

 

그런데 ~ ~ 여기서 또 말썽을 부린다.

Gradle  빌드 오류 : Could not find com.mysql:mysql-connector-java

 

이제 또 웃으면서 다른 블로그에 들어갔는데

spring이 3.x 버전으로 업데이트되면서, Gradle artifical id가 변경된 케이스라고 하여

 

spring 2.x에서 아래와 같이 사용하였다면

runtimeOnly  'mysql:mysql-connector-java'

 

spring 3.x부터는 이렇게 사용된다고 한다.

runtimeOnly 'com.mysql:mysql-connector-j'

 

build.gradle에서 plugins 부분을 보면 id 'org.springframework.boot' version '3.4.5'을 확인할 수 있기에

나도 새로운 버전의 내용을 dependencies에 반영 해주었다.

 

그런데도 .. 나의 빨간 줄은 사라질 줄 모르더라 ^^

이제 GitHub Copilot Chat에게 왜 그런거냐 ... 물어보았더니 아래와 같은 답변을 받았다.



1. 의존성 문제:  
   `build.gradle`에 `runtimeOnly 'com.mysql:mysql-connector-j'`를 추가했지만, Gradle이 해당 의존성을 제대로 다운로드하지 못했을 가능성이 있습니다. 이를 확인하려면 Gradle 캐시를 정리하고 다시 빌드해 보세요:
   ./gradlew clean build

2. MySQL Connector 버전 문제:  
   `mysql-connector-j`의 호환성 문제일 수 있습니다. Gradle이 최신 버전을 자동으로 가져오지만, Spring Boot와 호환되지 않는 버전일 가능성이 있습니다. 명시적으로 호환되는 버전을 지정해 보세요:
   runtimeOnly 'mysql:mysql-connector-java:8.0.33'

3. Gradle 빌드 캐시 문제:  
   Gradle 캐시가 손상되었거나 제대로 동작하지 않을 수 있습니다. 캐시를 삭제하고 다시 빌드하세요:
   ./gradlew --refresh-dependencies

4. 클래스 경로 문제:  
   `mysql-connector-j`가 클래스 경로에 제대로 추가되지 않았을 수 있습니다. 빌드 로그에서 `mysql-connector-j`가 다운로드되었는지 확인하세요.

위의 방법을 시도한 후에도 문제가 해결되지 않으면, Gradle 빌드 로그를 확인하여 추가적인 힌트를 얻을 수 있습니다.

 

 

 

이제까지 build.gradle에 딱히 큰 관심을 안 가지고 살았는데, 처음으로 자세히 살펴본 것 같다.

 ./gradlew clean build 를 하고 intelliJ를 다시 껐다 켰더니 잘 돌아갔다.

 

 

 

DB 연결까지 마무리 했고 !

다음 포스트로 뒤에 개발한 내용까지 들고 오겠다..