인프런 커뮤니티 질문&답변

공태성지능으로고상언짓하기님의 프로필 이미지
공태성지능으로고상언짓하기

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

팔로우, 해시태그 검색 기능 만들기

팔로잉과 팔로워 관계

작성

·

40

0

image.png

 

deserializeUser에서 req.user에 넣을 팔로잉이랑 팔로워 찾으실 때, as는 모델 관계의 as를 따라간다고 하셨는데

왜 위 코드에서 Follwers//팔로잉이고 Followings//팔로워라고 하신 건지 모르겠습니다ㅜ

예를 들어, 저의 팔로잉을 찾으려면 제 아이디를 팔로워 아이디에서 찾아야 하니까 기준 아이디가 followerId가 되는 Followings가 맞는거 아닌가요?

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

AI 인턴 답변도 참고하시면 됩니다

많이 헷갈려하시는 부분인데요. 결론적으로는 as를 기준으로 생각하시면 됩니다.

내 Followers를 모두 찾을 때를 생각해봅시다. 아이러니하게도 followerId가 아니라 followingId를 봐야 찾을 수 있습니다. followingId가 내 아이디랑 같은 로우의 followerId를 모두 불러오면 그게 내 follower들입니다. 그리고 이게 바로 foreignKey의 역할입니다. 원하는 것과 연결된 외부의 것을 가리킵니다. 그래서 제가 설명에서 belongsToMany는 as와 foreignKey가 반대라고 한 겁니다.

저도 똑같이 생각합니다! 본문에도 그렇게 써 놨습니다

그래서 User 모델도 잘 생성하고 그 때는 의문점이 없었습니다.

Followers가 followingId를 foreign key로 하는 건 완전히 이해했는데

위 코드만 봤을 때 Followers에 주석으로 팔로잉이라고 적으신 이유를 모르겠다는 의미입니다. Followers는 어쨌든 팔로워 아닌가여..??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

위 코드에 둘 다 as Followers로 되어있는거 봐서는 오타인 것 같습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용에 대해, 팔로워와 팔로잉 관계 설정에서 생기는 혼란에 대해 설명드리겠습니다. Sequelize에서 belongsToMany 메서드를 사용해 다대다 관계를 정의할 때, as 옵션은 모델 간의 관계를 나타내는 별칭(alias)입니다. 이 별칭을 사용하여 Sequelize가 자동으로 관계 메서드를 생성합니다. 이때 as 옵션의 이름이 메서드 이름에 반영되게 되는데, 관계를 설정할 때 사용하는 FollowerFollowing의 개념을 코드상에서 어떻게 적용하느냐에 따라 혼란이 발생할 수 있습니다.

예를 들어, 사용자 A가 사용자 B를 팔로우한다면, 사용자 A는 B의 Follower가 되고, 사용자 B는 A의 Following이 됩니다. 그러나 코드상에서 이 관계를 정의할 때, as 옵션에 사용되는 명칭은 그 관계를 코드를 읽는 사람에게 어떻게 전달하느냐에 따라 달라질 수 있습니다. 따라서 FollowersFollowings라는 용어가 실제로 어떤 엔티티를 지칭하는지는 그 관계를 설정한 코드의 컨텍스트에 따라 달라지게 됩니다.

질문자님의 혼란을 해결하기 위해, 이전에 제로초(조현영) 강사님이 답변해주신 내용이 도움이 될 수 있을 것 같습니다. 강의에서 언급하신 부분과 유사한 상황을 설명하고 있으니, 참고하시면 좋을 것 같습니다:
- “await user.addFollowers(req.user.id)에서 궁금한점이 있습니다.”에서 제로초 강사님은 as 옵션과 외래 키(foreignKey) 사용법을 설명하셨습니다. 특히, as를 기준으로 어떤 아이디가 외래 키로 설정될지 설명하는 부분이 이해에 도움이 될 것입니다.

질문의 세부적인 코드 컨텍스트에 대해선 제공된 정보만으로는 정확한 설명이 어려울 수 있으나, 제로초 강사님의 위 답변은 Sequelize에서 as 옵션과 관계 설정에 대한 기본적인 이해를 돕는 좋은 예시입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

공태성지능으로고상언짓하기님의 프로필 이미지
공태성지능으로고상언짓하기

작성한 질문수

질문하기