전체 글
[대규모 시스템 설계 기초] 14장 - 유튜브 설계
14장에서는 유튜브 시스템 설계를 다룬다.현 직장에서 영상 시스템을 해당 챕터와 비슷하게 설계되어 있기 때문에 쉽게 이해할 수 있었다. 나는 DAG는 데이터 파이프라인에서만 사용되는 줄 알았는데 DAG를 사용하여 비디오 프로세싱 파이프라인에도 적용할 수 있다는 것을 알게되었다. 요구사항 예시비디오 업로드 기능과 시청 기능 구현모바일 앱, 웹 브라우저, 그리고 스마트 TV 지원해야 함DAU는 5백만명으로 가정사용자가 머무르는 시간은 30분으로 가정다국어 지원비디어 종류와 해상도 모두 지원암호화 필요영상 최대 크기는 1GB로 제한퍼블릭 클라우드 서비스 활용 가능위 요구사항을 정리하자면 다음과 같다빠른 비디오 업로드원할한 비디오 재생재생 품질 선택 기능낮은 인프라 비용높은 가용성과 규모 확장성, 그리고 안정성..
[대규모 시스템 설계 기초] 13장 - 검색어 자동완성 시스템 설계
13장은 구글 검색 및 아마존 웹 사이트 검색창에 단어를 입력했을 때 입력 중인 글자에 맞는 검색어가 자동으로 완성되는 시스템에 대해 다룬다. 요구사항 예시자동완성될 검색어는 첫 부분으로 한정5개의 자동완성 검색어가 표시되어야 함인기 순위를 기준으로 5개의 검색어를 표시맞춤법 검사나 자동수정은 지원하지 않음질의어은 영어지만 다국어 지원을 생각하면 좋음질의는 영어 소문자로 이루어짐DAU 천만 명 위 요구사항을 정리하자면 다음과 같다.빠른 응답 속도: 사용자가 검색어를 입력할 때마다 자동완성 검색어도 표시되어야 한다.연관성: 사용자가 입력한 단어와 연관되어야 한다.정렬: 인기도 등의 순위 모델에 의해 정렬되어 있어야 한다.규모 확정성: 시스템은 많은 트랙픽을 감당할 수 있도록..
[대규모 시스템 설계 기초] 12장 - 채팅 시스템 설계
12장은 채팅 시스템 설계에 다룬다. 요구사항 예시 1:1 채팅과 그룹 채팅 모두 지원 모바일 앱, 웹 앱 모두 지원 50M DAU 그룹 채팅은 최대 100명 1:1 채팅, 그룹 채팅, 사용자 접속상태 표시 지원하고 텍스트 메시지만 주고받을 수 있음 메시지 길이는 100,000자 이하 채팅 이력은 영구적으로 보관 채팅 시스템을 설계하기 위해선 클라이언트-서버간 통신 방법에 대한 기본 지식을 갖추고 있어야 한다. 채팅 시스템은 다음 기능을 제공해야한다. 클라이언트로부터 메시지 수신 메시지 수신자(recipient) 결정 및 전달 수신자가 접속상태가 아닌 경우에는 접속할 때까지 해당 메시지 보관 채팅 서비스는 HTTP 프로토콜을 사용할 수 있지만 실시간으로 처리되어야 하기 때문에 HTTP 프로토콜은 사용하지..
[대규모 시스템 설계 기초] 11장 - 뉴스 피드 시스템 설계
11장은 뉴스 피드(news feed) 설계에 대해 다룬다. 뉴스 피드란? 사용자에게 자주 업데이트되는 콘텐츠를 제공하는 데 쓰이는 데이터 포맷이다. 콘텐츠 배포자들은 웹 피드를 중개함으로써 사용자들이 이들을 구독할 수 있게 한다. 출처 - 위키피디아 요구사항 예시 모바일 앱, 웹 모두 지원 사용자가 업로드한 스토리 및 친구들이 올리는 스토리를 볼 수 있어야 함 피드는 최근 순으로 정렬 사용자는 5천 명의 친구를 맺을 수 있음 10M의 DAU를 가짐 피드는 이미지, 비디오 모두 포함 개략적 설계 뉴스 피드는 피드 발행(feed publishing), 피드 생성(feed building) 두 가지 부분으로 나뉘어 있다. 피드 발행: 사용자가 스토리를 포스팅하면 해당 데이터를 cache와 DB에 기록한다. ..
[대규모 시스템 설계 기초] 10장 - 알림 시스템 설계
10장은 알림 시스템(notification system)에 대해 다룬다. 알림 시스템은 단순 푸시 알림뿐만 아니라, SMS 메시지 그리고 이메일 세 가지로 분류할 수 있다. 요구사항 예시 푸시 알림, 이메일, SMS 메시지 알림 지원 연성 실시간(soft real-time) 시스템 스마트폰, 랩톱/데스크톱 지원 클라이언트에서 만들 수도 있고, 서버 측에서도 스케줄링할 수 있음 알림을 받지 않도록 설정한 사용자에겐 알림 제공 X 하루에 천만 건에 푸시 알림, 백만 건의 SMS 메시지, 5백만 건의 이메일을 보낼 수 있어야 함 개략적 설계 알림 유형별 지원방안 iOS 푸시 알람 iOS에서 푸시 알람을 보내기 위해 알림 제공자(provider), APNS(Apple Push Notification Syste..
[대규모 시스템 설계 기초] 9장 웹 크롤러 설계
9장은 웹 크롤러(web crawler) 설계에 대해 다룬다. 웹 크롤러는 로봇 또는 스파이더라고도 부른다. 검색 엔진에서 널리 쓰는 기술로, 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 것이 주된 목적이다. 크롤러 이용 검색 엔진 인덱싱(search engine indexing): 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스(local index)를 만듦 웹 아카이빙(web archiving): 나중에 사용할 목적으로 장기 보관하기 위해 웹에서 정보를 모으는 절차 웹 마이닝(web mining): 인터넷에서 유용한 지식을 도출해 냄 웹 모니터링(web monitoring): 인터넷에서 저작권이나 상표권이 침해되는 사례 모니터링 웹 크롤러의 복잡도는 처리해야 데이터의 규모에 따라 달라지기 때문에 데..
[python] 프로그래머스 Lv1 - 기사단원의 무기
🔗 문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📁 분류 수학 구현 브루트포스 💡 풀이 주어진 범위 내의 모든 수에 대한 약수의 개수를 계산하고, 주어진 limit 값과 비교하여 조건에 따라 power 값 또는 약수의 개수를 선택한 후, 이들의 합을 반환한다. number의 범위가 1 ~ 100,000이기 때문에, 시간 복잡도를 개선하기 위해 약수의 개수를 계산할 때 제곱근까지만 반복하여 약수를 계산한다. 💻 코드 def get_divisor_cnt(): divisor = [0 for _ in range(100001)] for n in ran..
AWS Certified Developer - Associate 합격 후기 (2023 DVA-C02)
AWS Certified Developer - Associate (DVA-C02) 시험 합격 후기를 공유하고자 한다. 응시 계기 현 직장에서 AWS 실무 경험을 쌓아오면서, CTO님과 1 on 1할 때 커리어에 도움이 될 것이라고 AWS 자격증 취득을 권유받았다. 그리고 회사에서 교육 관련 복지가 개선되어, 법인카드로 자격증 응시할 수 있는 좋은 기회가 생겼다. 그래서 시험을 보기로 했다. 시험 준비 처음에는 준비 기간을 두 달로 잡고 시험 응시를 계획했다. 그러나 직장 동료분이 한 달이면 충분할 것이라고 설득하면서 같이 시험 보자고 해서 한 달로 단축하게 되었다. 여기에 비하인드 스토리가 있는데, 그분은 여행 이슈로 시험 날짜를 미뤘다😅 시험 준비는 Udemy AWS Certified Developer..
[python] 프로그래머스 Lv 1 - 명예의 전당 (1)
🔗 문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📁 분류 시뮬레이션 구현 자료구조 💡 풀이 이 문제는 리스트에 가장 작은 값을 뽑아내는 문제이다. 만약 리스트에 용량이 다 찾다면 현재 값과 가장 작은 값을 비교하여 가장 작은 값을 빼고 새로운 값을 넣어야 한다. 나는 리스트를 정렬하고 가장 작은 값을 뽑아내는 방식으로 풀었지만, min 함수를 사용하면 더 간단하게 풀 수 있었다. 💻 코드 """ [0, 300, 40, 300, 20, 70, 150, 50, 500, 1000] 0 -> 0 300 0 -> 0 300 40 0 -> 0 300 3..