[에러] schema-validation 에러
에러 상황
운영중이였던 프로젝트에서 refresh token에 대한 scheduler 서비스를 도입하는 과정에서 refresh token의 entity가 변경되었습니다.
https://github.com/T-Notes/Tnote-BackEnd/tree/main/src/main/java/com/example/tnote/base/scheduler
Tnote-BackEnd/src/main/java/com/example/tnote/base/scheduler at main · T-Notes/Tnote-BackEnd
Contribute to T-Notes/Tnote-BackEnd development by creating an account on GitHub.
github.com
진행 중에 배포하여서 기존의 스키마를 drop하고 새롭게 create 테이블을 진행하고 ec2 인스턴스를 보니까 해당 에러가 발생하였습니다
에러 원인
에러의 원인은 위에서 말씀드렸던 것처럼 운영 서버이여서 ddl-auto를 validate로 설정해 놓았는데, 이런 과정에서는 테이블 생성시 쿼리를 직접적으로 작성을 해줘야 했는데 그러지 않아서 생긴 문제였습니다.
해결 방법
두가지 방법이 있습니다.
1. ( 토이 & 큰 플젝 ) 모두 가능한 방법은 쿼리를 직접 작성하는 방법입니다 [ 큰 플젝 같은 경우는 실사용 유저의 데이터가 날아갈 수 있기에 해당 방법을 사용해야 합니다
2. ( 토이 ) 실사용자가 없는 토이 [ 데이터가 날아가도 되는 상황 ] 의 경우에는 ddl option을 update로 수정하여 테이블을 새롭게 만드는 방법입니다
ddl-auto란?
ddl : 데이터 정의어로 데이터베이스 테이블의 생성, 변경, 삭제 등을 담당하는 명령어 입니다.
ddl-auto는 테이블을 JPA의 구현체가 자동으로 생성해주는 기능으로 "테이블 자동 생성 전략" 이라고 합니다.
데이터 베이스에는 다양한 dialect가 존재하는데 JPA 구현체는 dialect에 맞는 DDL을 생성해줍니다
- 사용 예시 )
spring:
jpa:
hibernate:
ddl-auto: update
- ddl-auto 속성
속성 | 기능 |
create | 기존 테이블 삭제 후 다시 생성 |
create-drop | create + 서버 종료시 테이블 삭제 |
update | 변경 부분만 반영 |
validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
none | 아무 기능 안함 |
5가지를 제공합니다.
- 올바른 방법
- 실제 운영 서버에서는 create, create-drop, update 절때 사용 금지
- 개발 초기 단계에서는 create, update 사용
- 테스트 서버에서는 update,validate 사용
- 스테이징 서버와 운영 서버에서는 validate , none 사용
실제 운영 서버에서는 직접 쿼리를 날리는 것이 좋습니다 !!