오늘은 복잡한 데이터 구조들을 효율적으로 구현하는데 있어서 올바른 데이터베이스 구조와 관계 설정에 대해 배웠습니다
Many-to-Many 관계 적용 예시
1. 트위터 피드
트위터와 같은 소셜 미디어 플랫폼에서 Many-to-Many 관계를 활용하는 대표적인 예시로는 사용자와 트윗 간의 관계가 있습니다.
- 테이블 구조: Users, Tweets, Followers
- Users: 사용자 정보를 저장하는 테이블.
- Tweets: 트윗 정보를 저장하는 테이블.
- Followers: 사용자 간의 팔로우 관계를 저장하는 테이블.
- 기능: 사용자 A의 피드 조회
- 사용자 A가 팔로우하는 모든 사용자(B, C, D 등)의 트윗을 조회합니다.
- 이를 위해 조인 쿼리를 사용하여 Followers와 Tweets 테이블을 연결합니다.
2. 플레이리스트
음악 스트리밍 서비스에서는 사용자와 플레이리스트, 트랙 간의 Many-to-Many 관계가 중요합니다.
- 테이블 구조: Users, Playlists, Tracks, PlaylistTracks
- Users: 사용자 정보를 저장하는 테이블.
- Playlists: 플레이리스트 정보를 저장하는 테이블.
- Tracks: 트랙 정보를 저장하는 테이블.
- PlaylistTracks: 플레이리스트와 트랙 간의 관계를 저장하는 테이블.
- 기능: 특정 플레이리스트의 트랙 조회
- 사용자가 소유한 플레이리스트의 모든 트랙을 조회합니다.
3. 좋아요 기능
음악 스트리밍 서비스에서 사용자가 특정 트랙을 좋아요하는 기능을 Many-to-Many 관계로 구현할 수 있습니다.
- 테이블 구조: Users, Tracks, Likes
- Users: 사용자 정보를 저장하는 테이블.
- Tracks: 트랙 정보를 저장하는 테이블.
- Likes: 사용자와 트랙 간의 좋아요 관계를 저장하는 테이블.
- 기능: 특정 사용자가 좋아한 트랙 목록 조회
- 사용자가 좋아요한 모든 트랙을 조회합니다.
결론
오늘 배운 내용을 통해 복잡한 시스템에서 Many-to-Many 관계를 효과적으로 관리하고 성능을 최적화하는 방법을 이해하게 되었습니다. 이러한 설계를 통해 더 효율적이고 유지보수하기 쉬운 시스템을 구축할 수 있습니다. 데이터베이스에서 Many-to-Many 관계를 올바르게 설정하고 사용하는 것은 고성능 애플리케이션을 개발하는 데 필수적입니다.
참고사이트
https://hyeon9mak.github.io/twitter-system-design-experiment/
'TIL' 카테고리의 다른 글
TIL - 효율적인 데이터 Fetching 전략: 벌크 vs 개별 요청 (0) | 2024.07.11 |
---|---|
TIL - Next.js와 Zustand를 사용한 상태 관리 및 SSR 하이드레이션 (0) | 2024.07.10 |
TIL - 서버 사이드 렌더링으로 화면 깜빡임 제거 (0) | 2024.07.08 |
TIL - 소셜 로그인 기능 추가 도중 트러블 슈팅 (0) | 2024.07.06 |
TIL - 리액트 훅과 가상 DOM의 상호작용 (0) | 2024.07.05 |