inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Persistence Layer 테스트 (1)

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

해결된 질문

951

재영

작성한 질문수 55

2

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

 

지금 설정해두신 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이 적용이 되는지가 궁금합니다.

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 2

4

박우빈

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

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

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

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

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

0

재영

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

0

인프런 AI 인턴

안녕하세요, 인프런 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 속성 값을 변경하시면 됩니다.

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

0

재영

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

private 상수 테스트 관련 질문

0

83

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

126

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

161

2

테스트 문서화 질문입니다

0

105

2

단위테스트 질문이 있습니다

0

96

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

103

2

ERD 가장자리에 있는 도메인 테스트 질문

0

89

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

135

2

OrderCreateRequest DTO에 대해서 궁금한점

0

102

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

156

2

계층 관련 질문이 있습니다.

0

139

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

124

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

135

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

229

2

Service+Repository 통합테스트 관련 질문입니다.

0

150

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

185

2

test 용 .yml

0

90

2

throws Exception

0

80

2

카페키오스크 클래스 문의 ,,

0

89

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

174

2

테스트 코드에서 필요한 생성자

0

138

1

tearDown 순서

0

116

2

@Builder 생성자 private

0

136

2

@DisplayName gradle / intellJ

0

93

2