문제 발생
postman으로 한 API를 호출하는데,

위와 같은 ER_DUP_ENTRY 에러가 나는 것이었다.
이 에러가 뭘까 찾아봤는데 unique 제약이 걸려있는 컬럼에 같은 값을 대입할 경우 나는 에러라고 한다.
"그런데 저기에 id 컬럼은 auto_increment가 돼서 중복값이 삽입될 수가 없는 컬럼인데?"
이해할 수 없었다... 🤔
auto_increment가 걸려있는 컬럼에 중복값이 삽입이 될 수가 있나?
문제 해결
그렇게 몇 시간을 고민하고 stack overflow도 찾아보면서 이것저것 해보다가 console에 쿼리가 어떻게 찍히나 보았더니

"트랜잭션이 두 번 일어나고 있는 것이었다!!!"
트랜잭션이 두 번 일어나면서, 먼저 auto_increment된 id값이 DB에 저장이 되고 또 같은 값으로 auto_increment된 id값이 insert 되려다 보니까 에러가 발생하는 것이었다.
그래서 왜 트랜잭션이 두 번 일어나는지 확인해보니..
@Transactional({...})
async saveSample(...) {
const queryRunner = getConnection().createQueryRunner();
await queryRunner.connect();
const transactionManager: EntityManager = queryRunner.manager;
await queryRunner.startTransaction();
...
}
@Transactional로 트랜잭션을 한 번 실행하고 queryRunner.startTransaction()으로 한 번 더 실행하고 있었다.
다음과 같이 @Transactional부분을 주석 처리 해주었더니 잘 호출이 되었다. 😁
// @Transactional({...})
async saveSample(...) {
const queryRunner = getConnection().createQueryRunner();
await queryRunner.connect();
const transactionManager: EntityManager = queryRunner.manager;
await queryRunner.startTransaction();
...
}
