인프런 커뮤니티 질문&답변

재영님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Persistence Layer 테스트 (1)

yml 프로파일 구분 관련 질문이 있습니다.

해결된 질문

23.07.12 17:11 작성

·

783

·

수정됨

1

강의 잘 보고 있습니다. 감사합니다.

 

지금 설정해두신 yml 파일을 보면,

아무런 프로파일을 지정하지 않으면 local 프로파일을 이용한다고 되어 있고, local 프로파일에는 ddl-auto 설정이 create으로 되어 있습니다.

spring:
  profiles:
    default: local

  datasource:
    url: jdbc:h2:mem:~/cafeKioskApplication
    driver-class-name: org.h2.Driver
    username: sa
    password:

  jpa:
    hibernate:
      ddl-auto: none

---
spring:
  config:
    activate:
      on-profile: local

  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true # (2.5~) Hibernate ??? ?? data.sql ??

  h2:
    console:
      enabled: true

 

기본 프로파일에는 ddl-auto 설정이 none으로 되어 있는데, 이 설정은 어떨 때 적용이 되는 건가요?

어차피 아무런 프로파일을 지정하지 않으면, local 프로파일대로 ddl-auto 설정은 create을 따라갈텐데 ddl-auto: none을 적어두신 이유가 궁금합니다.

 

결론은 아무런 프로파일을 지정하지 않았을 때,

local 파일의 ddl-auto 속성인 create이 되는지,

아니면 default 프로파일로 설정한 ddl-auto: none이 적용이 되는지가 궁금합니다.

답변 2

3

박우빈님의 프로필 이미지
박우빈
지식공유자

2023. 07. 17. 22:42

안녕하세요, 재영님! :)

일단 마지막 질문에 답변 먼저 드리자면, 말씀 주신 것처럼 default: local 설정이 되어 있기 때문에 아무런 프로파일을 지정하지 않았을 때 local 설정으로 수행되는 것이 맞습니다.

다만 기본 설정으로 none을 지정한 이유는, ddl-auto: create 가 워낙 위험한 기능이다 보니 혹시 모르는 상황을 대비한 방어 로직이라고 봐주시면 될 것 같아요.

예를 들어 default: local 설정이 빠져있는 상황에서 프로파일 지정을 하지 않고 실제 운영 환경에서 배포를 했다면, 모든 DB 데이터가 날아가는 사고가 생길 수 있습니다.
가능성은 낮겠지만, 미래에 어떤 형태로 생길지 모르는 휴먼 에러를 대비해서 나쁠 건 없으니까요 ㅎㅎ

도움이 되셨기를 바랍니다.
감사합니다. :)

재영님의 프로필 이미지
재영
질문자

2023. 07. 17. 22:56

그런 이유였군요,, 친절한 답변 감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

2023. 07. 14. 17:16

안녕하세요, 인프런 AI 인턴이에요. yml 파일의 프로파일 설정과 ddl-auto 설정에 대한 질문이시군요.

첫째로, yml 파일에서 프로파일을 지정하지 않으면 “default” 프로파일인 “local”을 사용하게 됩니다. 따라서, 아무런 프로파일을 지정하지 않았을 때에는 “local” 프로파일에 설정한 내용이 적용됩니다.

둘째로, ddl-auto 속성은 JPA를 사용할 때 데이터베이스 스키마의 자동 생성 및 수정을 제어하는 속성입니다. “ddl-auto: none”으로 설정하면 JPA는 스키마를 자동으로 생성하거나 수정하지 않습니다. 다시 말해, 애플리케이션 실행 시 디비 스키마에 아무런 변경이 일어나지 않습니다.

그러므로, 아무런 프로파일을 지정하지 않은 경우 “default” 프로파일인 “local”의 ddl-auto 설정인 “create”이 적용되고, “ddl-auto: none” 설정은 무시됩니다. 따라서, 설정 파일에 “ddl-auto: none”을 적어두신 이유와 상관없이 “create” 설정으로 동작할 것입니다.

프로파일에 따라 ddl-auto 설정을 다르게 조정하고 싶으시면, 각 프로파일에 맞게 ddl-auto 속성 값을 변경하시면 됩니다.

추가적인 질문이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

재영님의 프로필 이미지
재영
질문자

2023. 07. 14. 18:07

감사합니다.
프로파일 지정과 상관없이 무조건 무시될 ddl-auto : none 속성을 적어두신 이유가 궁금합니다!

재영님의 프로필 이미지

작성한 질문수

질문하기