본문 바로가기
Spring/JPA

[JPA] JPA 세팅 및 MySQL 8 아마존 RDS 연결하기 by Spring Boot

by 코딩균 2021. 9. 10.

build.gradle 에 JPA / MySQL 의존성 세팅하기

방법은 여러가지가 있겠지만 내가 시도한 방법은 두가지다

> Spring Boot Initializer로 작업 환경 만들 때 추가하기

https://start.spring.io/ 이곳에서 웹을 통해서 스프링 프로젝트 생성이 가능한데 이때, jpa를 추가한다

 

> Maven Repository에서 가져와 추가하기

https://mvnrepository.com/ 에서 스프링에 필요한 라이브러리들을 가져와 추가할 수 있다. JPA도 여기서 검색하면 나온다.

build.gradle 파일에서 mavenCentral()이라고 쓰여있는 부분이 JPA 상세 코드 혹은 패키지가 존재하는 사이트 서버와의 인터페이스 (통로) 역할을 하는 메서드가 아닐까 싶다

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.22'

    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.4.5'

    // https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt
    implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'

    implementation('org.springframework.boot:spring-boot-starter-security')

    //GSON
    
    implementation 'com.google.code.gson:gson:2.8.6'
}

 

겪었던 문제 + 해결방법

RDS 즉, 데이터베이스를 아직 연결하지 않고 build 하는 경우 build 되지 않는 오류가 있어서 하루를 버린 적이 있다. 데이터베이스를 아직 연결하지 않았다면 Dependencies에서 JPA 부분을 주석 처리한 후에 build 해야 한다

 

 

application.yml에 세팅 추가하기

jpa 부분의 hibernate

hibernate는 JPA의 근간을 이루고 있는 ORM 이다.

hibernate에는 dialect 속성이 있다. dialect에서는 데이터베이스의 종류를 설정해줄 수 있다.

Dialect(방언) : SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능 - 사투리라고 생각한다
Hibernate의 Dialect

JPA를 특정한 데이터베이스에 종속되지 않게 하는 기술이다.

각 데이터베이스 종류에 따라 언어가 다른데 Hibernate ORM은 그러한 언어들을 모두 Dialect로 추상화 시켰다.

 

        => 즉, 데이터베이스 종류가 변경되어도 코드를 안건드려도 된다는 것이다! JPA가 종류에 따라 알아서 번역해주니까

 

아마 application.yml에서 따로 dialect를 넣지 않아도 돌아가는 이유는 아직 잘 모르겠다

추측으로는 JPA 환경설정 파일인 persistence.xml파일에서 알아서 관리를 해주는 것인지

아님 build.gradle에서 의존성 주입해 준 mysql 라이브러리가 알아서 관리를 해주는 것인지는 좀 더 알아봐야 할 것 같다

 

spring:
  application:
    name: Myproject

  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  datasource:
    platform: mysql
    url: jdbc:mysql://homekiri-db.cmi4erzbiz9b.ap-northeast-2.rds.amazonaws.com/스키마이름?autoReconnect=true
    username: DB 계정 아이디
    password: DB 패스워드
    driver-class-name: com.mysql.cj.jdbc.Driver
   

    logging:
      config: classpath:logback-spring.xml
      level:
        org.springframework.security: DEBUG
datasource 세팅
  • url : 아마존 RDS를 생성하면 endpoint라는 것이 있다. 이 uri를 넣고 스키마 이름을 쓰는 곳에 application이 사용할 스키마 이름을 넣어주면 된다
  • username / password : 아마존 RDS를 만들면서 설정한 아이디와 password를 넣어준다.
  • driver-class-name : mysql8버전인 경우 현재 기재 된 것을 넣어주고 mysql5버전인 경우 com.mysql.jdbc.Driver을 넣어준다