인프런 커뮤니티 질문&답변

다이니님의 프로필 이미지
다이니

작성한 질문수

Spring Boot JWT Tutorial

mysql 설정로 실습시

해결된 질문

작성

·

660

0

# server port
#spring.server.port=8080

# data base
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/데이터베이스이름?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=유저
spring.datasource.password=비밀번호


# thymeleaf
spring.thymeleaf.cache=false
spring.jpa.database=mysql
spring.jpa.database-platform= org.hibernate.dialect.MySQL8Dialect

# spring data jpa
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.jpa.show-sql=true
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true

spring.jpa.defer-datasource-initialization= true
spring.sql.init.mode= always

logging.level.org.silvernine=DEBUG
plugins {
   id 'java'
   id 'org.springframework.boot' version '3.1.5'
   id 'io.spring.dependency-management' version '1.1.3'
}

group = 'NewYear'
version = '0.0.1-SNAPSHOT'

java {
   sourceCompatibility = '17'
}

configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
}

repositories {
   mavenCentral()
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-security'
   implementation 'org.springframework.boot:spring-boot-starter-validation'
   implementation 'org.testng:testng:7.1.0'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   testImplementation 'org.springframework.security:spring-security-test'

   implementation 'mysql:mysql-connector-java:8.0.29'
// implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.29'

   runtimeOnly 'mysql:mysql-connector-java'

   implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

   implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
   implementation 'org.springframework.boot:spring-boot-starter-web'
   compileOnly 'org.projectlombok:lombok'
   annotationProcessor 'org.projectlombok:lombok'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('bootBuildImage') {
   builder = 'paketobuildpacks/builder-jammy-base:latest'
}

tasks.named('test') {
   useJUnitPlatform()
}

 

mysql에 정상적으로 connection이 되는 데 Entity에서 테이블 생성을 못하는 거 같습니다.

따로 오류는 없고, 테이블이 생성이 안됩니다.

data.sql에서 따로 테이블을 생성하는 구문을 넣으면 테이블과 컬럼값들이 제대로 들어가는 데 Entity에선 테이블을 자동으로 생성하지 못합니다.

무엇이 문제일까요? ㅠㅠ

답변 2

1

spring.jpa.defer-datasource-initialization= true

해당 설정으로 data.sql, schema.sql 의 sql 파일을 읽는 것으로 알고 있습니다.

테이블 만드는 부분은 schema.sql로 따로 만들고

데이터 넣는 부분은 그대로 data.sql로 만들어주세요.

 

그리고 spring.jpa.hibernate.ddl-auto=create

이 ddl-auto 설정은 none으로 설정하고 실행하면 되지 않을까.. 생각합니다

다이니님의 프로필 이미지
다이니
질문자

답변 감사합니다 !

궁금한 점이 있어서 추가 질문 남깁니다

혹시 저렇게 설정하면 나중에 Entity에서 테이블을 자동적으로 생성하진 못하는 걸까요?

환경 설정 부분은 공식문서와 다른 분들의 예시를 참조하면 좋을 것 같아요.
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html

여쭤보신 부분에 대해서 답변드리면

ddl-auto: create 설정을 해두면 이제 애플리케이션 실행할 때, 자동적으로 테이블 생성이 됩니다. @Entity를 설정한 클래스와 JpaRepository를 확장한 리포지토리 클래스가 있다면요. (하지만 권장하는 방식은 ddl-auto: create는 validate나 none으로 설정하고 sql 문으로 직접 테이블을 만드는 것을 추천드립니다. ddl-auto: create로 하는 게 편하긴 하지만요 ㅎㅎ.....)

 

글쓴이님의 설정대로라면 ddl-auto: create 설정으로 인해 테이블이 만들어지고 

이 후에 만약 schema.sql 파일이 있다면 해당 파일의 쿼리문에 따라 테이블을 생성하게 됩니다.

그 다음 data.sql 파일의 쿼리문을 수행하여 데이터를 처리하는 작업을 하게 됩니다.

아예 테이블이 생성되지 않았다고 하니 @Entity, @Repository 부분을 확인해보시고
그리고 테이블이 만들어졌는데 보이지 않을 수도 있을 수 있으니DB 부분에서 새로고침을 해보시면 테이블이 보일 수도 있을 것 같습니다.

다이니님의 프로필 이미지
다이니
질문자

친절한 답변 정말 감사합니다 !!

예전에 data.sql없이 JPA를 사용했을 때에는 테이블과 엔티티들이 잘 생성되었는 데 이번엔 안되어서 이것저것 찾아봤는 데 환경 설정 부분나 JPA 부분에서나 부족한 지식들이 너무 많아, 이해가 잘 안되었던 것 같습니다

알려주신대로 해보고, 안되면 따로 공부를 더 해서 해결해보겠습니다 !!!

정말정말 감사합니다 :)

다이니님의 프로필 이미지
다이니
질문자

덕분에 오류를 잘 수정했습니다 ㅠㅠ 정말 감사합니다 !!!

1

혹시 데이터베이스 접근에 쓴 유저아이디의 권한설정은 확인해보셨나요? 전에 비슷한 일이 있었는데 create권한이 없어서 생긴 문제였거든요 ㅎㅎ

다이니님의 프로필 이미지
다이니
질문자

답변 감사합니다 ! 유저 권한도 줘봤었는 데 안되더라고요 ㅠㅠ

다이니님의 프로필 이미지
다이니

작성한 질문수

질문하기