민우의 코딩일지
article thumbnail

 

 

 

 

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

 

 

 

 

 

 

1.1. 방법 1 : application.properties

 

 

<bash />
# 공통 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

 

 

 

 

 

 

 

 

 

 

 

 

1.2. 방법 2 : application.yml

 

<bash />
# 공통 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

 

 

 

 

 

 

 

 

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

 

 

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

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

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

 

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

 

 

 

 

 

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

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

 

application-이름.확장자 

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

 

 

 

 

1.3.1. 예시 1

 

application.yml

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

 

<bash />
# 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

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

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3.2. 예시 2

 

 

application.yml

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

 

<bash />
spring: profiles: active: local servlet: multipart: max-file-size: 1024MB max-request-size: 5120MB

 

 

application-local.yml

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

 

 

<bash />
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

 

 

 

 

 

 

 

 

 

 

 

 

2. ddl-auto 속성

 

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

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

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

 

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

 

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