사적인 블로그
[ISSUE] Grails dbCreate 속성 - create, create-drop, update, validate, none 본문
Troble Shooting
[ISSUE] Grails dbCreate 속성 - create, create-drop, update, validate, none
DevYeri 2024. 12. 31. 13:49이슈
DataSource.groovy에 들어있는 dbCreate 속성값에 대해 알아보자.
안알아봤다가 도메인에서만 컬럼을 추가하고 실행시켰는데
HibernateException: Missing column: description in db.table_name
이라는 에러를 만났다.
constraints값도 넣고, mapping도 했는데 머가 문제니!했더니
원인
DataSource.dbCreate 에 명시된 DB관리 옵션에서 수정된 도메인 값을 리얼 DB에서도 변경시키는 권한이 없는 문제였다.
(기존에는 DataSource.dbCreate 옵션으로 update를 사용했기에 문제가 없었다가, 변경하면서 발견됨)
environments {
development {
dataSource {
dbCreate = validate
...
}
}
}
해결
내 경우 dbCreate 속성이validate로 되어있어 데이터베이스 스키마를 변경하지 않고, 도메인 클래스 정의와 데이터베이스의 일관성을 확인하여 성실하게 달라!다르다고!하며 에러를 뱉어준건데
DB에 직접 컬럼을 alter문으로 추가하며 일치시켜줘서 문제가 해결되었다.
지식
dbCreate 주요 옵션
- create
- 애플리케이션이 실행될 때 기존 데이터베이스를 삭제하고, 도메인 클래스에 따라 새 스키마를 생성
- 기존 데이터 모두 삭제
- 사용 사례: 초기 개발 단계나 테스트용으로 적합
- create-drop
- 애플리케이션이 실행될 때 스키마를 생성, 애플리케이션이 종료되면 스키마를 삭제
- 기존 데이터는 모두 삭제됨
- 사용 사례: 단위 테스트나 일회성 실행을 위해 적합
- update
- 도메인 클래스와 비교하여 데이터베이스 스키마를 자동으로 변경
- 기존 데이터는 유지되지만, 복잡한 변경(예: 열 이름 변경 등)은 처리되지 않을 수 있음
- 사용 사례: 개발 단계에서 유용하지만, 프로덕션 환경에서는 권장되지 않음.
- validate
- 데이터베이스 스키마를 변경하지 않고, 도메인 클래스 정의와 데이터베이스의 일관성을 확인
- 일치하지 않을 경우 오류를 발생
- 사용 사례: 프로덕션 환경에서 데이터베이스와 도메인 간 일관성을 보장하기 위해 사용.
- none
- 데이터베이스 스키마를 변경하거나 검증하지 않음
- 사용 사례: 데이터베이스 스키마가 수동으로 관리되는 경우.
- 개발 환경: create, create-drop, update를 주로 사용.
- 프로덕션 환경: validate 또는 none을 권장.
'Troble Shooting' 카테고리의 다른 글
[Grails] respond vs redirect | 객체 자동 update 이슈 (1) | 2025.01.09 |
---|---|
[ISSUE] MySQL dump/load시 sql_mode 이슈 (0) | 2025.01.07 |
[ISSUE] CI/CD war 파일크기 불일치 이슈(Jenkins) (1) | 2024.12.11 |
[ISSUE] CSV 데이터 DB 임포트시 임의 숫자 변환(feat.Excel) (0) | 2024.12.10 |
[ISSUE] File upload (octet-stream) (1) | 2024.12.03 |