JPA

[JPA] build.gradle, application.yml

da77777 2022. 7. 22. 00:53

JPA 써볼 일이 생겼다. 환경은 SpringBoot, gradle, JPA, MySQL

일단 아래 두 가지 세팅

  • build.gradle
  • application.yml

 

1. build.gradle

plugins {
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.블라블라'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    
    implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
    
    runtimeOnly 'mysql:mysql-connector-java'
    
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    
    testImplementation 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
}

tasks.named('test') {
    useJUnitPlatform()
}
  • dependencies
    implementation : 해당 라이브러리에 의존하는 의존성만 다시 빌드하며, 의존하는 항목을 노출시키지 않음
    compileOnly : 컴파일 시에만 해당 의존성 주입
    runtimeOnly : 런타임 시에만 해당 의존성 주입
    annotationProcessor : 컴파일 클래스 경로와 주석 프로세서 클래스 경로를 분리하여 빌드 성능 개선
    testImplementation : 테스트 시에만 의존성 주입

 

 

2. application.yml

spring:
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect #방언 설정(하단에 추가 설명)
    show-sql: true #sql문을 콘솔에 출력
    properties:
      hibernate:
        format_sql: true #sql문 출력 시 보기 좋게 정렬
    hibernate:
      ddl-auto: create #하단에 설명
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/schema이름?characterEncoding=UTF-8
    username: root
    password: 비밀번호
  • database-platform: org.hibernate.dialect.MySQL5Dialect
    방언(dialect) 설정 부분. JPA는 특정 DBMS에 종속되지 않는다. JPA가 DBMS에 맞춰 sql문을 날릴 수 있도록 어떤 DBMS를 사용할 것인지 명시해줘야 한다. 나는 MySQL을 사용하기 때문에 위와 같이 작성하였고
    MariaDB의 경우 database-platform: org.hibernate.dialect.MariaDB103Dialect
    Oracle의 경우 database-platform: org.hibernate.dialect.Oracle10gDialect
    처럼 필요한 DBMS에 맞춰 변경해주면 된다.

 

  • ddl-auto: create
    create: 애플리케이션 시작 시 테이블 삭제 후 다시 생성
    create-drop: create와 같으나 종료시점에 테이블 삭제
    update: 변경된 부분만 반영
    validate: 엔티티와 테이블이 정상 매핑되었는지 확인
    none: 사용하지 않음
    * local에서 테스트 할 때는 create, create-drop, update 사용해도 상관 없으나 실제 운영 시에는 사용하면 대참사 발생

 

 

 

 

 


참고

https://firework-ham.tistory.com/106

 

[Spring Boot JPA] JPA를 사용하기 위해 꼭 필요한 Dialect(방언)에 대해 알아보자.

Dialect(방언)이란? Dialect 방언에 대해 알아보기전 기본 SQL을 이해 해야 합니다. SQL은 표준 ANCI SQL이 있고 DBMS Vendor(공급업체)인 MS-SQL, Oracle, My-SQL, Postgre SQL에서 제공하는 SQL이 존재합니다...

firework-ham.tistory.com

https://smpark1020.tistory.com/140

 

ddl-auto 옵션 관련 주의할 점!!!!!!!!!

얼마전에 개발바닥 호돌맨님의 재난급 서버 장애내고 개발자 인생 끝날뻔 한 썰을 보게 되었다. 나처럼 JPA를 많이 안써본 사람들이 보면 아주 도움될 영상이다🤣🤣 결론은 spring.jpa.hibernate.ddl-a

smpark1020.tistory.com

'JPA' 카테고리의 다른 글

[JPA] deleteById(), delete()  (2) 2022.07.27
[JPA] Querydsl DTO로 조회하기  (0) 2022.07.25
[JPA] SpringBoot + Gradle + Querydsl  (0) 2022.07.24
[JPA] SpringBoot에서 EntityManager 사용하기  (0) 2022.07.22