투스데이 서비스를 배포하고 그 이후 자잘자잘한 오류를 해결하고, 추가 개발하고 있다.
그 중에 내가 오늘 해결한 오류에 대해 정리해보려 한다!
사실 그렇게 어려운? 오류는 아니었고 에러 코드를 보자마자 어 익숙한데! 싶었다.
08-07 03:40:38.274 WARN 15204 --- [nio-8000-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1451, SQLState: 23000 2024-08-07 03:40:38.275 ERROR 15204 --- [nio-8000-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : Cannot delete or update a parent row: a foreign key constraint fails (toothday.notification, CONSTRAINT FKn1l10g2mvj4r1qs93k952fshe FOREIGN KEY (post_id) REFERENCES post (post_id))
오류 발생 상황
서비스 배포 후 이것 저것 기능들이 잘 작동하는지 테스트해봤는데 한가지 이상한 점이 있었다
바로 커뮤니티 게시글 삭제에서 어떤 게시글은 삭제가 잘 되고 어떤 게시글은 삭제 버튼을 눌러도 튕기고 삭제가 이루어지지 않았다. 의심되는 원인으로는 좋아요나 댓글이 달려있는 경우에 삭제가 잘 되지 않는 것 같았다
그래서 바로 테스트 돌입
게시글(좋아요,댓글X) ---> 삭제 성공
게시글(내가 좋아요,댓글 작성) ---> 삭제 성공
음 여기서 일단 1차 의문 내가 좋아요와 댓글을 작성하였을 때는 무사히 삭제가 된다. 그럼 좋아요, 댓글 연관 문제가 아닌가?
게시글( 타유저의 좋아요 ) ---> 삭제 실패 !!!
찾았다! 타유저의 좋아요나 댓글이 생성된 경우에 에러가 뜬다. 왜일까? 혹시 JWT 관련 문제일까 싶어 에러 코드를 확인해봤더니 위에 있는 익숙한 SQL 에러코드가 있었다.
원인 파악
원인은 내 게시글에 타유저가 좋아요나 댓글을 남기면 알림이 생성되도록 알림 기능을 개발했는데
알림 테이블이 게시글ID를 외래키로 가져서 게시글을 삭제할 때 알림과 관련하여 에러가 떴던 것이다.
알림을 개발 후반부에 작업하고 알림과 테이블 사이에 CASCADE 설정을 해주지 않아서 에러가 떴던 것이다
처음 오류를 확인하고 왜 어떨 때는 되고 어떨 때는 안되나 답답했었는데 이렇게 명확한 원인이 있었다
원인을 파악하고 나니까 답답했던 속이 시원해졌다.
게시글 삭제 시에 해당 post id를 가지는 알람도 삭제 후에 게시글을 삭제하도록 코드를 수정하고 오류를 해결하였다.
public void delete(Post post) {
notificationRepository.deleteByPostId(post.getId());
postRepository.delete(post);
}
지난 번에 cascade 조건에 대해서도 공부해보고 sql 연관관계에 대해서도 공부하였는데 덕분에 이번에 에러 원인 파악을 빠르게 할 수 있었던 것 같다!
'프로젝트' 카테고리의 다른 글
[공모전][제3회 DGB금융그룹 IT's DGB iM Challenger] 대한민국 디지털 인재 양성 프로젝트 < 발대식 및 본선 대회 > 회고 (1) | 2025.01.27 |
---|---|
JPA 페이징 처리 기법에 대해, 어느 방법이 내 프로젝트에 적격일까? (1) | 2024.09.07 |
[투스데이_커뮤니티] 좋아요 기능 개발/ 좋아요 등록,취소를 하나의 api로 설계 (0) | 2024.07.18 |
[마잇(MyEat)] 주요 기능 정리, 도메인 모델 설계 (0) | 2024.04.12 |
[마잇(MyEat)] jpa 연관관계 공부하기 (0) | 2024.04.06 |