-
[에러] schema-validation 에러T-note 2024. 4. 8. 01:00728x90
에러 상황
운영중이였던 프로젝트에서 refresh token에 대한 scheduler 서비스를 도입하는 과정에서 refresh token의 entity가 변경되었습니다.
https://github.com/T-Notes/Tnote-BackEnd/tree/main/src/main/java/com/example/tnote/base/scheduler진행 중에 배포하여서 기존의 스키마를 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 사용
실제 운영 서버에서는 직접 쿼리를 날리는 것이 좋습니다 !!
'T-note' 카테고리의 다른 글
[Tnote] "참조관계"의 고민 (0) 2024.06.29 [티노트] 로깅 (0) 2024.03.28 [Error] 502 Bad Gateway (0) 2024.03.14 [error] bind for 0.0.0.0:80 failed: port is already allocate (0) 2024.03.11 [Tnote] npm를 통해서 https로 변경하기 (0) 2024.03.11