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(10) not null auto_increment primary key,
user_id varchar(10) not null,
follow_id varchar(10) not 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 팔로우 이상) 대량의 유저가 조회 할시 속도에 문제가 없을지,
있다면 어떻게 개선해야 할지 고민 할 필요가 있다.
반응형