기존에 잘 되던 POST API를 테스트했는데, 이전과 달리 다음과 같은 Sequelize 오류가 발생했다.
error : SequelizeForeignKeyConstraintError: Cannot add or update a child row: a foreign key constraint fails (`respec`.`reservation`, CONSTRAINT `reservation_FK_2` FOREIGN KEY
(`id`) REFERENCES `mentorinfo` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
동작한 API는 reservation 테이블에 한 행을 INSERT 하는 기능을 하고
이 reservation 테이블은 mentorinfo의 id와 연결된 외래키 mentorkey를 갖고있다.
reservation.mentorkey = mentorinfo.id
오류 내용은 외래키의 제약과 관련한 에러인데, 정확히는 참조 무결성 제약이 위배된 것이다.
참조 무결성 제약은 reservation 테이블의 mentorkey 컬럼이 mentorinfo 테이블의 id칼럼을 참조하고 있다면, 이 두 칼럼의 값이 항상 일관되어야 한다는 것이다.
이 참조 무결성 오류를 해결하기 위해 나는 아래 3가지 과정을 거쳐 원인을 알아냈다.
1. 외래키 정책이 설정되어있는지 확인
오류에서 나왔듯이 외래키 정책은 설정되어있었다.
2. 삽입하려는 데이터가 참조 테이블에 있는지 확인
내가 삽입하려는 mentorkey 값은 2였고 mentorinfo 테이블에 id가 2인 데이터가 있는지 확인했다.
만약 없다면 mentorinfo에 id가 2인 데이터를 삽입하면 된다. 그치만 이미 데이터가 있었다.. 그래서 PASS!
3. 아무리 생각해도 이상해서 외래키 정책 다시 확인
무엇이 문제인지 감이 안잡혀서 외래키 정책을 다시 보니까, 외래키가 mentorkey가 아닌, 그냥 id로 설정되어있었다.
1번에서는 외래키가 mentorinfo 테이블에 연결되어있는지만 확인하고, 컬럼끼리 잘 연결되어있는지 확인을 안했었는데, 문제는 컬럼에 있었다.ㅠ 외래키 정책 설정할때 졸았나보다 .. 앞으로는 꼼꼼히 보고 설정해야지 !
해결 : 외래키 정책 정상적으로 설정하여 다시 시도하니 정상적으로 작동했다!
'IT > Node.js' 카테고리의 다른 글
Node.js express-validator 사용하기 check VS body (0) | 2023.03.19 |
---|---|
Node.js express-session (0) | 2022.10.21 |
Node.js cookie (0) | 2022.10.17 |