본문 바로가기
Spring

ddl-auto란 (DB 날려먹은 썰)

by yeneua 2026. 4. 13.

 

오늘도 어김없이 평소와 다르지 않게

프론트 run dev를 하고 백엔드 서버를 켰는데 화면에 데이터가 하나도 없었다.

ip 주소도 그대로 잘 설정되어 있는데 뭐가 문제지 하면서

클린 빌드하고 전부 재실행해봤는데도 해결이 안 됐다.

 

gemini한테 이것저것 물어보다가 ddl-auto라는 옵션을 알게 되었고

그대로 yml 파일 수정을 잘못해서 DB 데이터를 모두 날려버렸다...

 

다행히

개발 서버였고...

상용화되기 전이었고...

무엇보다

소장님이 유쾌하게 웃으면서 조심하라고 말씀하시며 넘어가주셨다...

 

 

지금에야 '나 사고 쳤어'라고 말하지만

불과 몇시간 전만 해도 식은땀이 줄줄 났기에

같은 실수를 반복하지 말자는 차원에서 관련 내용을 정리해 보겠다.

 

 

먼저 DDL이란

데이터 정의어(Data Definition Language, DDL)

데이터베이스의 구조를 정의하거나 수정, 삭제하기 위해 사용하는 언어이다.

데이터를 조작하는 언어가 아닌 데이터를 담는 데이터베이스를 조작하는 명령어이다.

 

DDL에는 다음과 같은 것들이 있다.

 

  • CREATE(생성)
  • ALTER(수정)
  • DROP(삭제)
  • TRUNCATE(초기화)

 

ddl-auto란

JPA를 이용해서 데이터베이스를 초기화(Intialize)할 수 있는 설정이다.

관련 spring 문서

 

ddl-auto에는 5가지 옵션이 있다.

 

  • create
  • create-drop
  • update
  • validate
  • none(default)

 

1. create

jpa:
  hibernate:
    ddl-auto: create

 

- 기존 테이블이 있으면 모두 DROP, 엔티티를 다시 CREATE

- 매번 데이터가 없는 깨끗한 DB 상태에서 개발할 때 사용

 

 

2. create-drop

jpa:
  hibernate:
    ddl-auto: create-drop

 

- create와 동일하지만, 애플리케이션 종료 시점에 기존 테이블 모두 DROP

- 테스트 코드 등과 같이 실행 후 DB를 깔끔하게 비워야 하는 테스트 환경에 적합

 

 

3. update

jpa:
  hibernate:
    ddl-auto: update

 

- 실제 DB와 JPA 엔티티를 비교해 차이가 있는 부분만 반영

- 컬럼 삭제, 이름 변경은 반영되지 않음. 데이터 추가만 반영됨

 

 

4. validate

jpa:
  hibernate:
    ddl-auto: validate

 

- 엔티티와 DB 테이블이 정상 매핑되었는지 확인

- 다르다면 실행 중단

 

 

5. none (default)

jpa:
  hibernate:
    ddl-auto: none

 

- 자동 생성 기능을 끔. 아무 설정을 하지 않은 상태

 

 

 

 

결론

ddl-auto를 잘 이해하셨다면 제가 어떤 실수를 한지 다들 아실 텐데요...

네... ddl-auto: create를 해버렸습니다(당당)

데이터 없어지고 처음에는 제 잘못인 줄도 몰랐음

잘 해결되어 다행이지만 정말 아찔했던 상황이기에 반성하고 있습니다.

근데 처음에 왜 데이터가 안 보였던 건지는 아직도 모르겠음

 

그리고 DB 계정 권한 설정도 매우 중요한 부분이라고 느꼈습니다.

요 부분도 따로 공부해 보도록 하겠습니다.

 

 

>위험한< 옵션인 ddl-auto

잘 사용하면 편리하지만 잘못 사용하면 큰일이 날 수 있기 때문에 각별한 주의가 필요하다.

이 일을 교훈으로 삼아 사고 치지 않고 열심히 일하겠습니다 ^^7

댓글