에러
[23.10.27] nestjs typeorm synchronize table already exists Error 0.0.2
paikpaik
2023. 10. 27. 19:48
에러
- nestjs와 typeorm을 사용하여 여러가지 user와 관련한 테스트 + 공부 목적의 개발중 synchronize: true 로 했을때 변경점을 파악해서 적용하는것이 아닌 기존에 table의 충돌이 되는 에러가 발생하였다.
본론
- 처음에 개발할때 typeorm은 0.3.7 nestjs/typeorm은 9.0.0버전으로 개발을 진행하였다.
1.1 synchronize
- synchronize 옵션을 간단하게 설명하자면 서비스를 구동할 때 소스 코드 기반으로 db 스키마를 동기화할지를 물어보는 간단한 옵션입니다.
- 근데 이 synchronize옵션이 중요한 이유가 true로 해두면 소스코드상의 테이블의 변화, 예를 들어 user의 id타입이 string에서 number로 바뀌었다면 그 변경점을 파악해서 테이블만 바꾸는것이 아니라 아예 새롭게 테이블을 구성하기 때문이다.
- 그래서 개발할때는 true로 해두지만 프로덕션에서는 false로 해둬야 하고 그걸 인지하고 true로 해뒀는데 생각지도 못하게 Error table already exists 가 발생하였다.
- synchronize 옵션은 변경점만 파악하기 때문에 이 에러는 뭔가 문제가 있는 것.
- 구글링과 stackoverflow에서 분명히 똑같은 에러가 났을것이기 때문에 찾아다녔다.
- entity를 정의한 클래스명을 공백으로 두면 알아서 정의가 된다는 stackoverflow 형님분의 말씀이 있었다.
- 근데 아무리 생각해도 이 방법은 옳은 슈팅이 아니었다. 그러면 모든 테이블명에 entity가 붙는다는 의미인데 매우 이상하기 때문.
- 버전문제
- 가장 가능성이 높은 이유.
- 인프런overflow에서도 버전문제라고 답하신 지식공유자분이 계셨음.
- 그분의 버전은 오작동없이 동작하기 때문에 그분의 버전을 가져오기로 함.
- typeorm은 0.3.7 nestjs/typeorm은 9.0.0에서
- typeorm은 0.3.12 nestjs/typeorm은 9.0.1버전으로 교체
결론 0.0.1
- 버전바꾸고 바로 해결되었다.
- 잘 작동하는 버전을 기억하기 위해서 기록.
- 현재 typeorm 의 버전문제가 계속 있는것 같은데 Prisma도 공부해둬야겠다.
결론 0.0.2
- 다시 에러가 발생해서 결국 stackoverflow 형님들의 말을 듣고 UserEntity class를 User로 @Entity('User')를 @Entity()로 바꾸고 나니 시원하게 에러가 없어졌다.
- stackoverflow 만세 ㅠㅠㅠㅠ