Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 내일배움캠프
- 내일배움카드
- 국비지원취업
- KDT
- 국비지원교육
- 객체지향
- baekjoon
- 백엔드개발자
- Java
- Be
- 오블완
- 티스토리챌린지
- OPENPATH
- 패스트캠퍼스
- UXUI기초정복
- 백엔드 부트캠프
- 디자인챌린지
- UXUI챌린지
- 국비지원
- mysql
- 백준
- 디자인강의
- 디자인교육
- UXUIPrimary
- 부트캠프
- 자바
- 오픈패스
- 환급챌린지
- 오픈챌린지
- Spring
Archives
- Today
- Total
군만두의 IT 공부 일지
[스터디9] 03. 뉴스 피드 시스템 설계 - 실습1 본문
3장에 나온 것처럼 "시스템 설계 면접"을 대비해서 "뉴스 피드 시스템" 아키텍처에 대해 대략적으로 설계해서 발표/토의하기로 했다.
1단계 문제 이해 및 설계 범위 확정
- 모바일 앱과 웹 앱 둘 다 지원해야 한다.
- 가장 중요한 기능은 새로운 포스트(post)를 올리고, 다른 친구의 뉴스 피드를 볼 수 있도록 하는 기능이다.
- 문제를 단순하게 만들기 위해, 뉴스 피드는 시간 역순으로 정렬된다고 가정한다.
- 한 사용자는 최대 5000명의 사용자와 친구를 맺을 수 있다.
- 사이트로 오는 트래픽 규모(일간 능동 사용자, DAU)는 천만 명이다.
- 피드에 이미지나 비디오 같은 미디어 파일도 포스트할 수 있어야 한다.
요약하면 "페이스북이나 인스타그램 같은 SNS의 핵심 기능을 1,000만 명 DAU 규모로 설계하는 것"이다.
2단계 개략적인 설계안 제시 및 동의 구하기
종이에 핵심 컴포넌트를 포함하는 다이어그램을 그린다. 클라이언트(모바일/웹), API, 웹 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 같은 것들이 포함된다.
- 피드 발행(feed publishing): 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고, 해당 사용자의 친구(friend) 뉴스 피드에 뜨게 된다.
- 피드 생성(feed building): 어떤 사용자의 뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로(최신 포스트부터 오래된 포스트 순으로) 정렬하여 만든다.
책에서 나온 플로(flow)에 추가로 정리하면 위 내용과 더불어 포스트 관리, 피드 관리, 사용자 관리 등을 고려할 수 있을 것 같다. MSA로 설계했다.
- 뉴스 피드: 사용자가 팔로우하는 계정이나 페이지의 새로운 게시물, 콘텐츠 업데이트 등을 시간 순서대로 보여주는 공간
모바일/웹 클라이언트
- 사용자 인터페이스 제공
- 기능: 포스트 작성, 피드 조회, 미디어 업로드
로드 밸런서
- 기능: 헬스 체크, 세션 유지, SSL 종료
API 게이트웨이
- 기능:
- JWT 토큰 검증
- Rate Limiting (사용자당 초당 100 요청)
- 요청 라우팅 및 로깅
포스트 서비스
- 책임: 포스트 생성, 수정, 삭제, 조회
- POST /api/v1/posts
- GET /api/v1/posts/{postId}
피드 서비스
- 책임: 사용자별 개인화된 피드 제공
- GET /api/v1/feed?page=1&size=20
사용자 서비스
- 책임: 사용자 정보 및 친구 관계 관리
- POST /api/v1/users/{userId}/friends
- GET /api/v1/users/{userId}
+) 비동기 처리 → 메시지 큐, 피드 생성 워커
++) 대규모 트래픽 처리, 캐싱 등에 대해 고려하면 좋을 것 같다.
2단계까지는 진행했는데, 책을 참고해도 잘 하고 있는지 모르겠다. 다음 게시글에서는 3단계를 이어서 진행할 예정이다.
이 글은 『 가상 면접 사례로 배우는 대규모 시스템 설계 기초』 책을 학습한 내용을 정리한 것입니다.
'프로그래밍' 카테고리의 다른 글
[스터디9] 04. 뉴스 피드 시스템 설계 - 실습2 (0) | 2025.07.08 |
---|---|
[스터디9] 01. 사용자 수에 따른 규모 확장성 (3) | 2025.06.14 |
[Java] 자바 개발환경 구축 (JDK, IntelliJ) (0) | 2024.02.14 |
Comments