ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [에러] schema-validation 에러
    T-note 2024. 4. 8. 01:00
    728x90

    에러 상황

    운영중이였던 프로젝트에서 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 사용

    실제 운영 서버에서는 직접 쿼리를 날리는 것이 좋습니다 !!

    '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
Designed by Tistory.