INTP의 멋대로 개발 세상

[📚상품 구매 사이트 3단계] 스프링부트 ↔ MyBatis ↔ MySQL 연동하기 본문

KDT 풀스택 국비 과정/파이널 프로젝트(미니)

[📚상품 구매 사이트 3단계] 스프링부트 ↔ MyBatis ↔ MySQL 연동하기

인팁구름 2023. 4. 12. 16:55

 


 

오늘 오전 내내 한참 헤메었던 DB 연결하는 방법을 공유합니다!!!!

어렵지 않아요😊😉

 

상품 구매 사이트 만들기 3단계에서는

2개의 서버가 하나의 DB를 공유하도록 만드는 것이 핵심(?) 목표입니다

(구매자 프로젝트, 판매자 프로젝트 별개인데 DB는 한 개를 쓰는 것)

 

이미 H2-Console 등을 사용해서 프로젝트를 만들었다해도,

dependency 와 yml 파일만 조금 수정해주면 쉽게 연동할 수 있습니다

 

먼저 기능 구현을 하고 (H2-Console을 사용해서)

마지막에 DB 연동하는 게 편한 것 같아요.

H2-Console은 서버 재실행 할 때마다 더미 데이터 빼고 나머지 데이터가 알아서 삭제되지만

MySQL은 데이터가 계속 쌓여서..

(ex. 회원가입 잘 되나 확인하려고 아무 정보 등록 시 삭제되지 않고 계속 쌓임)

 


 

0. MySQL에서 DB 생성하기

(스프링 프로젝트 먼저 만들어도 상관 없다. 설명을 편하게 하기 위해서 먼저 DB를 만들기로 한 거임!)

 

MySQL 워크벤치를 실행해서 새로운 Connection을 만들자

 

꼭 새로 만들 필요는 없고, 기존에 있던 걸 사용해도 되긴한데,

이전 수업 때 사용했던 DB랑 섞이기도 하고.. 삭제하기는 좀 그렇고 해서

아예 새로 만들었다.

 

 

+ 를 클릭하면 이런 창이 뜬다.

Connectrion Name 은 DB연동과 상관없으니 편한대로 작성하고,

나는 username을 root로 했고

밑에 Store in ... 을 클릭하면 비밀번호를 정하는 창이 뜬다.

 

비밀번호 1234 국룰

 

 

비밀번호를 설정하고

Test Connection을 눌러서 Test 한 번 해 준다.

 

 

 

Successfully 어쩌구라고 나오는 거 확인

 

 

그리고 마지막 OK를 누르면

 

 

방금 만든 새 Connection이 생성되었다.

클릭해서 들어가 보자.

 

 

새로 데이터를 등록할 스키마를 생성해야 한다.

동전? 원기둥? 모양 아이콘을 클릭하면

 

 

이런 창이 뜨는데, 스키마의 이름을 정해주고 Apply 클릭

 

 

 

이런 창이 뜨는데 그냥 Apply 누르면 된다

 

 

 

 

 

짠 스키마 생성 완료🎉✨

 

 

테이블을 생성하기 이전에, 권한 설정을 해 주어야 한다. (중요)

Server - Users and Privileges

 

 

⭐⭐이때 중요한 거!!!! ⭐⭐

꼭 root 권한으로 실행해야 함!!!!

 

root - Administrative Roles 에 들어가서

보이는 거 그냥 다 체크하고

Apply 클릭

 

 

새 SQL 파일을 생성해서

스키마를 더블클릭해서 선택해 준 후

테이블을 생성하는 쿼리를 작성한다.

Ctrl + Enter 로 실행한다.

 

⭐ 스키마 더블 클릭 후 작성할 것!

안 그러면 DB가 선택되지 않았다는 오류 로그가 뜬다.

 

Error Code: 1046. No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar.

 

테이블 성공적으로 만들어 짐!

 

 

 

스키마 우클릭 - Refresh All (새로고침) 해 주면

 

 

방금 생성된 user 테이블이 잘 생성된 것을 확인할 수 있다😎

 


 

쿼리문 말고 직접 테이블 만드는 방법

(웬만하면 쿼리문으로 작성하자..)

 

 

 

스키마 안에 있는 Tables 우클릭 - Create Table

 

 

Table 이름과

컬럼 - 데이터 타입 - 제약조건을 입력하고 Apply

 

❗❗ 데이터 타입 설정 시 ❗❗

 

created_at은 TIMESTAMP 타입을 쓰는데 선택하면 괄호가 남아 있다.

 

이렇게

 

 

괄호를 꼭 지워줘야 정상적으로 등록이 된다!!

 

안 그러면 아래와 같은 오류가 뜬다.

GPT한테 물어보니 TIMESTAMP 타입은 괄호를 사용하지 않아야 한다고 한다.

(뭐야 그럼 왜 입력되어 있냐고ㅠ)

 

 

 

무튼, Apply를 누르면 확인창이 한 번 더 뜨는데

여기서도 수정할 수 있다.

 

당신이 작성한 데이터는 이런 쿼리로 나올 것입니다요 라는 창

 

확인해 보고 이상없으면 Apply 클릭!

 

 

 

Refresh All 해 주면

방금 생성한 order 테이블이 뿅~~

 

 

 

 

더미데이터 넣어보기

 

user 테이블에 더미데이터를 넣어보자


오래동안 MySQL 을 안써서 까먹었었는데,

쿼리문 하나씩 실행해줘야 한다! ( Ctrl + Enter 로 )

(바나나 한 번, 딸기 한 번)

 

INSERT INTO product(product_name, product_price, product_qty, created_at) VALUES('바나나', 3000, 98, NOW());
INSERT INTO product(product_name, product_price, product_qty, created_at) VALUES('딸기', 2000, 100, NOW());

 

잘 들어갔는 지 확인해 보자

SELECT * FROM product;

 

잘 조회된당

 

 

 


 

1. 프로젝트 생성

 

스프링부트 2.7.10 버전
프로젝트 이름
자바는 11버전을 사용했다
의존성 설정

 

기존에는 DB를 H2-Console로 사용했는데,

이제는 MySql로 사용할 것이기 때문에

MySQL Driver로 추가한다.

(혹시나 여기서 잘못 선택했더라도 build.gradle에서 수정하면 됨!)

 

 

 


 

2. build.gradle에서 dependency 추가하기

 

프로젝트 생성 때 미리 들어간 것도 있지만 

우리 프로젝트는 화면을 jsp로 사용하기 때문에 

implementation 'javax.servlet:jstl'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'

+

MySql 연동을 위해  아래의 코드도 넣어주어야 한다

implementation 'mysql:mysql-connector-java:8.0.28'

 

 

dependencies {
	testImplementation group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter-test', version: '2.2.2'
	implementation 'javax.servlet:jstl'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
	compileOnly 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	implementation 'mysql:mysql-connector-java:8.0.28'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

 


 

3. application.yml 작성하기

 

처음에 프로젝트를 만들면 application.properties 라고 되어있을텐데

.yml 로 이름만 변경하면 된다.

 

properties 든 yml 이든 무엇을 써도 상관없지만

두 개는 작성 방식이 다르니 확인하고 써야 한다!

나는 수업 때 yml을 계속 써왔으므로 yml로 작성할 거다!!🙄

(그리고 yml이 대세라고 함)

 

yml 은 띄어쓰기 하나에도 예민하기 때문에 꼭꼭 잘 확인하고! 웬만하면 복붙으로 쓰는 게 실수를 줄인다

 

 

server:
  port: 8000
  servlet:
    encoding:
      charset: utf-8
      force: true
 
spring:
  mvc:
    view:
      prefix: /WEB-INF/view/
      suffix: .jsp 
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:포트번호/스키마 이름?serverTimezone=UTC&characterEncoding=UTF-8
    username: 유저네임 적는 곳
    password: 패스워드 적는 곳
  sql:
    init:
      schema-locations:
      - classpath:db/table.sql
      data-locations:
      - classpath:db/data.sql
  output:
    ansi:
      enabled: always

mybatis:
  mapper-locations:
  - classpath:mapper/**.xml
  configuration:
    map-underscore-to-camel-case: true

 

📛  주의!! 확인 필요!

 

 

MySQL 연동과 관련있는 부분은 이곳이다.

자신의 데이터에 맞게 수정해야 한다

 

 

 

유저네임, 포트번호 확인

스키마 이름

 

 

완성~~

(스키마 이름 옆에 ? 은 쿼리스트링 문법이기 때문에 지우면 안됨!!)

 

 

 

 

 

4. 서버 실행시켜서 데이터 잘 들어갔는지 확인하기

(진짜 확인만 하려고 대충 뿌린 모습..)

 

 


 

 

오류가 터진다면 확인할 것

- yml 제대로 작성 되었는지 (띄어쓰기 주의)

기존에 쓰던 h2 console 설정들 삭제하거나 주석처리 하기

 

- dependency 제대로 적용되었는 지

 

- MySQL에 만든 컬럼들의 데이터 타입과 스프링부트에서 만든 Model의 데이터 타입이 서로 일치하는 지

 

- xml, Repository 만들어서 데이터 뿌려보기 등등..

 

 

 

 

Comments