본문 바로가기
DBMS || SQL_MAPPER/DEV QUIZ

'맞팔' 기능을 구현하려면 어떤 정보가 필요할까?

by DanteMustDie 2023. 10. 16.
728x90

kernel360 1주차를 보내며 상용 서비스의 대한 분석, 설계를 하는 과정을 거쳤다.

팀원들과 '인스타그램' 같은 sns 기능을 이야기 할 때,

상호간 팔로우를 했는지 정보를 db에 저장 하기위해 어떤 필드가 필요한지 정리를 하였었는데,

본인은 놀랍게도 수포자인데 불구하고 순간 머릿속으로

 

[ A 가 B,C,D,E 를 포함하고, B가 A,C,D,E 를 포함한다면 A와 B는 상호 상관관계에 있다. ]

 

명제가 생각나 '내가 누구를 팔로우 했는가?' 만 알면 될 것이라 떠올랐지만

정작 설명을 하려고 하니 말문이 막혀서 확실하게 맞는지 검증이 필요해

예시 데이터와 쿼리를 작성하여 확인을 하는 과정을 가졌다.

 

사용 툴, DBMS : 디비버 / MYSQL 8.0.33 64bit

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 팔로워 저장 정보 테이블 생성
 
create table follower (
follow_sn int(10not null auto_increment primary key,
user_id varchar(10not null,
follow_id varchar(10not null
);
 
#테이블 생성 확인
desc follower;
 
#푸바오가 팔로우 한 데이터 추가 (ID로 만들었지만, 가독 편의상 한글로 데이터 삽입)
insert into follower (user_id,follow_id) values('푸바오','아이바오');
insert into follower (user_id,follow_id) values('푸바오','러바오');
insert into follower (user_id,follow_id) values('푸바오','강철원');
 
#러바오가 팔로우 한 데이터 추가
insert into follower (user_id,follow_id) values('러바오','아이바오');
insert into follower (user_id,follow_id) values('러바오','강철원');
 
#아이바오가 팔로우 한 데이터 추가
insert into follower (user_id,follow_id) values('아이바오','푸바오');
insert into follower (user_id,follow_id) values('아이바오','러바오');
insert into follower (user_id,follow_id) values('아이바오','루이바오');
insert into follower (user_id,follow_id) values('아이바오','후이바오');
insert into follower (user_id,follow_id) values('아이바오','강철원');
 
#루이바오가 팔로우 한 데이터 추가
insert into follower (user_id,follow_id) values('루이바오','아이바오');
insert into follower (user_id,follow_id) values('루이바오','후이바오');
 
#후이바오가 팔로우 한 데이터 추가
insert into follower (user_id,follow_id) values('후이바오','아이바오');
insert into follower (user_id,follow_id) values('후이바오','루이바오');
 
#강철원 사육사가 팔로우 한 데이터 추가
insert into follower (user_id,follow_id) values('강철원','푸바오');
insert into follower (user_id,follow_id) values('강철원','러바오');
insert into follower (user_id,follow_id) values('강철원','아이바오');
insert into follower (user_id,follow_id) values('강철원','루이바오');
insert into follower (user_id,follow_id) values('강철원','후이바오');
 
# 푸바오가 팔로우 한 목록 조회
select user_id, follow_id from follower
where user_id = '푸바오';
 
# 푸바오를 팔로우 한 목록 조회
select user_id, follow_id from follower
where user_id <> '푸바오' and follow_id = '푸바오';
 
 
cs

예시 데이터와 쿼리는 다음과 같다.

 

푸바오가 팔로우 한 상대방 유저 목록
푸바오를 팔로우 한 유저 목록

조회 결과 내가 누군가를 팔로우 했는지만 알면 조회가 가능하다.

 

단, 현재 구조는 데이터가 상대적으로 적을 때 부하가 작아 당장의 퍼포먼스는 문제가 없지만

서비스 규모가 커질경우 (최소 100k 팔로우 이상) 대량의 유저가 조회 할시 속도에 문제가 없을지,

있다면 어떻게 개선해야 할지 고민 할 필요가 있다.

반응형