Spring Boot 설정 (1) - db, profile, dotenv

묘한묘랑·2023년 7월 31일
1

ShoppingMall

목록 보기
3/7

작업 환경

NameVersion
Spring Boot3.1.2
java17
PostgreSQL15
IDEIntelliJ

Profile

프로젝트를 시작하며 가장 먼저 떠오른 것은 properties File의 분리였다.
그 이유는 외부 API Key를 발급받아 사용할 예정이었고, GitHub에 프로젝트 코드를 올릴 생각이었기 때문이다.

그래서 Spring Boot에서는 어떻게 파일을 분리하여 사용하는지에 대하여 알아보니 Profile을 사용하여 분리가 가능하다는 사실을 알게 되었다

spring:
  profiles:
    active: # 활성화 시킬 profile - 로 구분
      - local
    include: # application-[name] 파일 내용을 포함시키기 
      - db
      - oauth
    group: # 그룹화 시켜 가져오기 위한 설정, profile 값 중 key와 일치할 경우 가져오기.
      local:
        - db-local
      dev:
        - db-dev
      prod:
        - db-prod

TestCode를 작성할 때, IDE로 설정을 변경하거나 yaml파일을 매번 변경하지 않고 @ActiveProfiles Annotation을 사용한다.

@ActiveProfiles("profile")
// Profiles라는 이름이기에 여러 값을 사용할 수 있을 것 같아 공식문서를 찾아보니
@ActiveProfiles({"profile1", "profile2"})
// 위와 같은형태로 사용이 가능하였다. 

이후 .gitignore에 application-*.yaml를 추가하여 주었다.


DB

# application-db.yaml


--- # Local
spring:
  config:
    activate:
      on-profile: "db-local"

  jpa:
    show-sql: true
    database-platform: postgresql
    hibernate:
      ddl-auto: create
  datasource:
    url: jdbc:postgresql://localhost:5432/ShoppingMall
    username: username
    password: userpw
    driver-class-name: org.postgresql.Driver
    
logging:
	level:
    	com.zaxxer.hikari: TRACE
    	com.zaxxer.hikari.HikariConfig: DEBUG



--- # Dev

이 상태로 일단 실행부터 해보았다.

에러가 발생하였다.

에러문을 통해 검색 해보자 properties.hibernate.dialect 를 추가 해줘야 했다.

 jpa:
    show-sql: true
    database-platform: postgresql
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect

Dialect란?

Diarect(방언)는 Jpa가 db에 맞는 문법을 만들기 위해 필요한 설정이다.

너무나도 당연한 이야기지만 각 DB마다 query문의 차이가 있기에 Jpa가 어떤 문법을 따라야 하는지 정의가 필요했다.

하지만 여기서 한 가지 의문이 들었다.

이전에는 database-platform, dialect와 같은 설정을 한 경험이 없었다.
그래서 알아보니 Spring Boot의 경우 내부에서 dialect를 자동으로 설정하고 있었다.

jpa: 
	show-sql: true
    hibernate:
    	ddl-auto: create

그래서 위와 같은 코드로 수정을 해보자 정상 작동 하였다.

(- 추가 2023-08-02 21:31:06 -)
DataSource 자동 구성에서 DriverClassName을 찾아서 넣어주기에 driver-class-name의 값을 주지 않아도 된다.


Spring Dotenv

Profile에 대해 알아보던 중 설정을 .env파일로 관리할 수 있다는 사실을 알게 되었다.

Spring-Dotenv

# .env

POSTGRESQL_USERID = "UserId"
POSTGRESQL_USERPW = "UserPw"
POSTGRESQL_URL = "url"
# application-db.yaml
  datasource:
    url: ${POSTGRES_URL}
    username: ${POSTGRES_ID}
    password: ${POSTGRES_PW}

IntelliJ의 경우 IDE에서 직접 환경변수를 설정해줄 수 있지만 .env로 정의 한다면 혹여 다른 언어에서도 같은 설정을 원할 경우 .env만 옮기면 끝이므로 사용하기로 결정하였다.

IntelliJ에서 환경 변수 설정법

profile
상황에 맞는 기술을 떠올리고 사용할 수 있는 개발자가 되고 싶은 개발자

0개의 댓글