mongodb를 사용하는데 사용자에 대해서 팔로잉을 하는 기능이 있고,
내가 누구를 팔로우하는지, 누가 나를 팔로우하는지 빨리 찾기 위해서 정규화를 없애고
followings, followers 라는 사용자 들의 배열을 담은 필드를 만들었습니다.
(나의 follower를 찾기 위해 사용자 전체를 확인하면서 following에 본인이 속했는지 조회에 시간이 많이걸릴 거라 생각했습니다.)
@Schema({ timestamps: true }) export class User { @Prop() name: string; @Prop({ required: true, unique: true, }) @IsString() id: string; @Prop() @IsString() followings: string[]; -> 이부분 @Prop() @IsString() followers: string[]; -> 이부분 }
여기서 문제가 내가 누군가를 팔로잉하는 경우 추가를 할 때, 나의 document의 following에 상대방의 document Objejct Id를 추가하고,
상대방 document에서 followers에 나의 document Objejct Id를 추가하도록 되어있습니다.
다음과 같이 문제가 생길 경우의 수를 최대한 생각해서 다 처리를 해줘야할까요?
로직을 처리하는 것 보다 에러핸들링 작성하는 시간이 훨씬 오래걸려서 맞게 하고있는지 고민입니다.
나의 document에 추가 - > db나 서버에 뭔가 문제가 생김 → 상대방 document에 못넣었음 (나의 doc과 상대방의 doc에 불일치가 발생)
+) 팔로잉 추가 시 사용자가 있는지를 매번 db에서 조회하고 그 이후에 내 document에 팔로잉 추가, 상대방 document에 팔로워 추가 하는 식으로 매번 실제 있는 document인지 확인 한다음 추가하도록 해야겠죠..?
→ 관계성이 들어간다면 굳이 MongoDB를 쓰지 않고 관계형 DB를 쓰면 되지 않을까요? 혹시 MongoDB를 써야 하는 이유가 있을까요?
