민우의 코딩일지
article thumbnail

 

 

 

 

사용 데이터베이스별 세팅법

 

 

 

 

 

 

방법 1 : application.properties

 

 

# 공통
spring.jpa.hibernate.ddl-auto=create  # (1)create (2)create-drop (3)update (4)validate
spring.jpa.open-in-view=true # 성능을 고려한다면 false

# ========================================================================


# MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/본인이 사용중인 스키마 이름
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.datasource.username=root
spring.datasource.password=1234
# Oralce 
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl # 혹은, 교육용을 사용중일경우 -> spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver  # 버전에 따라 안될 수도 있다, 안될경우 -> oracle.jdbc.driver.OracleDriver 
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect # 오라클 버전이 10g 가 아닌 경우, 해당 버전으로 수정필요 (ex: Oracle9iDialect , Oracle12cDialect)
spring.datasource.username=root 
spring.datasource.password=1234
# PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres # jdbc:postgresql:[HOST][:PORT]/[DATABASE]
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.username=root 
spring.datasource.password=1234
# H2
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb # 인 메모리가 아닌,  파일로 저장/관리하고싶은경우 -> spring.datasource.url=jdbc:h2:file:./database;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.username=sa
spring.datasource.password=


# ========================================================================

# 옵션
spring.jpa.properties.hibernate.default_schema=기본스키마 
spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Seoul

 

 

 

 

 

 

 

 

 

 

 

 

방법 2 : application.yml

 

# 공통
spring:
  jpa:
    hibernate:
      ddl-auto: create # (1)create (2)create-drop (3)update (4)validate
    open-in-view: true # 성능을 고려한다면 false

# ========================================================================


# MySQL
  datasource:
    url: jdbc:mysql://localhost:3306/본인이 사용중인 스키마 이름
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect
  datasource:
    username: root
    password: 1234

# Oracle 
  datasource:
    url: jdbc:oracle:thin:@localhost:1521:orcl # 혹은, 교육용을 사용중일경우 -> jdbc:oracle:thin:@localhost:1521:xe
    driver-class-name: oracle.jdbc.OracleDriver # 버전에 따라 안될 수도 있다, 안될경우 -> oracle.jdbc.driver.OracleDriver
  jpa:
    properties:
      hibernate.dialect: org.hibernate.dialect.Oracle10gDialect # 오라클 버전이 10g 가 아닌 경우, 해당 버전으로 수정필요 (ex: Oracle9iDialect , Oracle12cDialect)
  datasource:
    username: root 
    password: 1234

# PostgreSQL
  datasource:
    url: jdbc:postgresql://localhost:5432/postgres # jdbc:postgresql:[IP or Domain][:PORT]/[DATABASE]
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
  datasource:
    username: root 
    password: 1234

# H2
  h2:
    console:
      enabled: true
  datasource:
    url: jdbc:h2:mem:testdb # 인 메모리가 아닌,  파일로 저장/관리하고싶은경우 -> jdbc:h2:file:./database;DB_CLOSE_ON_EXIT=FALSE
    driver-class-name: org.h2.Driver
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
  datasource:
    username: sa
    password: 


# ========================================================================

# 옵션
  jpa:
    properties:
      hibernate.default_schema: 기본스키마 
      hibernate.jdbc.time_zone: Asia/Seoul

 

 

 

 

 

 

 

 

방법 3 : application-{파일명}.확장자

 

 

위 방법 1, 2는 하나의 설정 파일에 모든 내용을 저장하고 있다.

하지만 실무에서 개발할땐 상황에 따라 다른 DB 연결 정보가 필요한 경우가 발생한다.

* ex) 개발할때(로컬), 개발한걸 실제 서버에 올리기 전(테스트 서버), 실제 서버에 올릴때(실제 배포 서버)

 

해당 " 방법 3 "은 위와 같을때 유용하게 사용할 수 있다 

 

 

 

 

 

예시로  application-local.yml 파일을 만들 수 있는데

다음과 같은 형식만 지키면 얼마든지 만들어도 상관없다

 

application-이름.확장자 

이름은 아무거나 입력해도 상관없지만,  확장자는 다음 2개중 하나만 가능하다.   :   .properties 혹은  .yml 

 

 

 

 

예시 1

 

application.yml

공통되는 설정을 작성하는 파일

 

# application.yml 혹은 .properties 파일은 공통으로 사용될 설정을 적어주고
# 각 개발 환경별 필요한 정보는   application-파일명.yml  혹은 .properties 파일로 만들고, 만들어진 파일에 적어주는 방식

spring:
  profiles:
    active: local 
    
    # 만약 application-local.yml 파일이 아닌, 다른 설정 파일을 적용하고싶은경우.
    # ex)  application-docker.yml 혹은 .propertis 파일이 있다고 가정했을땐,  다음과 같이 사용한다
    # active: docker
    
    
# 새로 만든 파일의 application- 이후,   .확장자 사이에 있는 이름을 입력
# ex: application-local.yml)의 경우 하이픈 뒤, 그리고 .yml 사이에 있는 local을 입력


# ...
# ...
# 이외에도 파일 크기,  로깅 .. 등이 들어간다
# ...
# ...

 

 

 

application-local.yml

로컬환경에서 사용할 데이터베이스 관련 정보를 입력

 

# DB에 대한 정보만 입력
# class-name ..
# url ...
# username ...
# password .. 등등

 

 

 

 

 

 

 

 

 

 

 

 

 

예시 2

 

 

application.yml

공통되는 설정을 작성하는 파일

 

spring:

  profiles:
    active: local

  servlet:
    multipart:
      max-file-size: 1024MB
      max-request-size: 5120MB

 

 

application-local.yml

로컬환경에서 사용할 데이터베이스 관련 정보를 입력

 

 

spring:
      
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:    
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create # (1)create (2)create-drop (3)update (4)validate
    properties:
      hibernate:
        format_sql: true
        
  h2:
    console:
      enabled: true

 

 

 

 

 

 

 

 

 

 

 

 

ddl-auto 속성

 

위 내용에서 sprig.jpa.hibernate.ddl-auto 속성 값을 create 로 사용했다.

하지만, create 외에도 상황에 따라 다음과 같이 사용할 수 있다.

보통, 처음에만 create를 사용하고, 이후부터는 update를 사용한다. 그리고  안정화가되면 validate로 넘어가게된다.

 

속성값 설명
create 실행시 모든 데이터를 삭제 + 새로운 테이블 생성
* 종료후 재실행전까지 테이블 및 데이터 존재
create-drop 실행시 모든 데이터를 삭제 + 새로운 테이블 생성
* 종료시, 모든 테이블 및 데이터 삭제
update 이미 존재하는 테이블내 변경된 사항만 반영 (ex: 컬럼명, 컬럼타입 .. 등)
validate 엔티티 어노테이션이 있는 파일내 필드와 테이블 필드를 비교하며
서로 다를경우 실행 종료

 

create 혹은 create-drop을 사용하면  모든 테이블이 다 삭제되는 대참사가 발생한다.
따라서, 처음 테이블만들때만 사용하고, 이후 절대 사용하면 안된다