왜 db라는 매개변수를 사용하는지 궁금할 수 있습니다. ‘최상단에 const Comment = require('./comment') 식으로 불러오면 되지 않을까’라고 생각할 수 있지만, 이 경우 순환 참조 문제가 발생합니다. comment.js에서 user.js를 require하는데 user.js에서도 comment.js를 require하면 문제가 발생하기 때문입니다. 이와 같이 서로가 서로를 require하는 방식을 순환 참조라고 합니다. 이는 자바스크립트에서는 지양해야 하는 방식입니다. 따라서 index.js에서 각 모델을 불러와 db 매개변수로 넘기는 방식을 취한 것입니다.
어떤 모델에 hasMany를 쓰고, 어떤 모델에 belongsTo를 쓰는지 헷갈릴 것입니다. 다른 모델의 정보가 들어가는 테이블에는 belongsTo를 사용합니다. 예제에서는 commenter 컬럼이 추가되는 Comment 모델에 belongsTo를 사용하면 됩니다. 사용자는 한 명이고, 그에 속한 댓글은 여러 개이므로 댓글 로우에 사용자(commenter)가 누구인지 적어야 합니다.
시퀄라이즈는 위에서 정의한 대로 모델 간 관계를 파악해서 Comment 모델에 foreignKey(외래 키)인 commenter 컬럼을 추가합니다. Comment 모델의 외래 키 컬럼은 commenter이고, User 모델의 id 컬럼을 가리키고 있습니다.
▲ 그림 7-57 시퀄라이즈 용어 설명