권장 환경 : 데스크탑 + 다크모드
(ID)
| User | Archive | Post |
|---|---|---|
| 1 | 1 ~ 10 | 1 ~ 10 |
| 2 | 11 ~ 20 | 11 ~ 20 |
| 3 | 21 ~ 30 | 21 ~ 30 |
| 4 | 31 ~ 40 | 31 ~ 40 |
| 5 | 41 ~ 50 | 41 ~ 50 |
| 6 | 51 ~ 60 | 51 ~ 60 |
| 7 | 61 ~ 70 | 61 ~ 70 |
| 8 | 71 ~ 80 | 71 ~ 80 |
| 9 | 81 ~ 90 | 81 ~ 90 |
| 10 | 91 ~ 100 | 91 ~ 100 |
(ID)
| User | Friend |
|---|---|
| 1 | 3, 5, 7, 9 |
| 2 | 4, 6, 8, 10 |
| 3 | 1, 4 |
| 4 | 2, 3 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
| 8 | 2 |
| 9 | 1 |
| 10 | 2 |
Public:Restricted:Private=6:3:1
(Ex. ids : [1, 100] → Public : [1, 60] & Restricted : [61, 90] & Private : [91, 100])
⚠️ Diary 자체의 Visibility도 존재 → Archive의 Visibility와 일관성 유지
Case 1. Public Archive (모두공개) → 타인 조회 시, Public Diary만 조회됨
Case 2. Restricted Archive (친구공개) → 친구 조회 시, Private Diary 빼고 모두 조회되어야 함
Case 3. Private Archive (비공개) → 조회되면 안됨 (본인 제외)
Issue: UI가공개/비공개로만 디자인되어있더라고요. 설계 상 Archive와 공개범위를 1:1로 가져가는게 깔끔하기도 하고, UI 제작 이전에 기획측 설명 듣고 제작한거라, UI와 API 요청 구조 간 혼동의 여지가 있습니다.
Sol: Diary를 작성하는건 어차피 Archive에 종속됩니다. 따라서 React에서 Archive의 공개범위를 상태값으로 물고와서, 공개 클릭 시 Public Archive이면 Public Diary로, Restricted Archive이면 Restricted Diary로 API 요청 보내면 됩니다.
| Archive | Diary | Gallery | Ticket | Repost |
|---|---|---|---|---|
| 1 | 1 ~ 100 | 1 ~ 100 | 1 ~ 100 | 1 ~ 100 |
| 2 | NULL |
101 ~ 200 | 101 ~ 200 | 101 ~ 200 |
| 3 | 101 ~ 200 | NULL |
201 ~ 300 | 201 ~ 300 |
| 4 | 201 ~ 300 | 201 ~ 300 | NULL |
301 ~ 400 |
| 5 | 301 ~ 400 | 301 ~ 400 | 301 ~ 400 | NULL |
| 6 | NULL |
NULL |
401 ~ 500 | 401 ~ 500 |
| 7 | NULL |
401 ~ 500 | NULL |
501 ~ 600 |
| 8 | NULL |
501 ~ 600 | 501 ~ 600 | NULL |
| 9 | 401 ~ 500 | NULL |
NULL |
601 ~ 700 |
| 10 | 501 ~ 600 | NULL |
601 ~ 700 | NULL |
| 11 | 601 ~ 700 | 601 ~ 700 | NULL |
NULL |
| 12 | 701 ~ 800 | NULL |
NULL |
NULL |
| 13 | NULL |
701 ~ 800 | NULL |
NULL |
| 14 | NULL |
NULL |
701 ~ 800 | NULL |
| 15 | NULL |
NULL |
NULL |
701 ~ 800 |
| 16 | NULL |
NULL |
NULL |
NULL |
| 17 | NULL |
NULL |
NULL |
NULL |
| 18 | NULL |
NULL |
NULL |
NULL |
| … | NULL |
NULL |
NULL |
NULL |
| 100 | NULL |
NULL |
NULL |
NULL |
🔥 샘플에서는 데이터 셋업 편의성을 위해, Repost ID와 Posts ID를 동기화 시킨다.
카테고리별 150개씩
| IDOL | ACTOR | MUSICIAN | SPORT | ARTIST | ANIMATION |
|---|---|---|---|---|---|
| 1 ~ 150 | 151 ~ 300 | 301 ~ 450 | 451 ~ 600 | 601 ~ 750 | 751 ~ 900 |
Archive
| Archive | View | Like | createdAt |
|---|---|---|---|
| 1 | 10000 | 300 | 20250115 |
| 2 | 95000 | 275 | 20250115 |
| 3 | 90000 | 250 | 20250114 |
| 4 | 85000 | 225 | 20250114 |
| 5 | 80000 | 200 | 20250113 |
| 6 | 75000 | 175 | 20250113 |
| 7 | 70000 | 150 | 20250112 |
| 8 | 65000 | 125 | 20250112 |
| 9 | 60000 | 100 | 20250111 |
| 10 | 55000 | 75 | 20250111 |
| 11 | 50000 | 50 | 20250110 |
| 12 | 45000 | 25 | 20250110 |
| 13 | 40000 | 0 | 20250109 |
| 14 | 35000 | 25 | 20250109 |
| 15 | 30000 | 50 | 20250108 |
| 16 | 25000 | 75 | 20250108 |
| 17 | 20000 | 100 | 20250107 |
| 18 | 15000 | 125 | 20250107 |
| 19 | 10000 | 150 | 20250106 |
| 20 | 5000 | 175 | 20250106 |
나머지의 샘플은 조회수 & 좋아요 수는 0으로 고정한다.