이번 프로젝트를 진행하면서 대댓글의 필요성이 있다고 판단하여 대댓글 작성을 위한 API를 만들려고 했다.
'대댓글을 어떻게 만들까?' 라고 처음에 생각했을 때는 새로 테이블을 하나 더 만들어서 대댓글을 따로 관리하는 테이블을 만들려고 구조를 떠올리게 됬다. 이렇게 관리하면 당연하게 recomment테이블에 commentId가 관계설정이 되고 cascade설정도 간단하게 처리 될 것 같아서 처음에 구상을 했었는데,
구글링을 좀 해보니 recomment테이블을 새로 만드는 형식 보다는 comment테이블을 self join해서 테이블을 하나만 관리하는 경우가 많았다.
아래는 DB self join설정의 일부이다.
static associate(db) {
db.Comments.hasMany(db.Comments, {
as: 'reComments',
foreignKey: 'parentCommentId',
targetKey: 'commentId',
});
db.Comments.belongsTo(db.Comments, {
as: 'parentComment',
foreignKey: 'parentCommentId',
targetKey: 'commentId',
});
}
생각해보면 대댓글도 어차피 댓글인 것이다. 그런데 나는 이걸 대댓글과 댓글을 따로 분류하려고 했다.
만약 이렇게 된다면 대댓글 또한 수정 삭제 조회에 대한 API를 따로 만들었어야 했을 것이다.