전체 글 133

보드 공유 URL 설계 (다담다)

https://dadamda.me/main 세상의 모든 URL, 다담다 내용에 따라 자동으로 북마크를 구성하는 신개념 컨텐츠 맞춤 스크랩 서비스, 다담다 dadamda.me 위 사이트는 현재 작업하고 있는 컨텐츠 맞춤 스크랩 서비스 다담다 사이트이다. 현재 스크랩을 저장하는 기능은 구현되어 있고, 스크랩을 보드에 담아서 공유하는 기능을 추가 구현하고 있다. 먼저 설계 조건을 파악해보자. 설계 조건 1. 보드는 공개가 기본이며 원한다면 비공개할 수 있다. 2. 비공개 보드에 접근하려고 한다면 토큰을 확인해 본인이면 입장시켜주고 타인이라면 권한이 없다는 문구를 보여준다. 만약 로그인되어 있는 상태가 아니라면 로그인 페이지를 띄워준다. 로그인하면 다시 판단한다. 3. 보드 비공개 상태에서 링크 공유를 하게 된..

한빛N MSA - #5 Re-Search

https://festa.io/events/4050 한빛N MSA - #5 Re-Search | Festa! Festa에서 당신이 찾는 이벤트를 만나보세요. festa.io 한빛미디어 오시는 길 감사하게도 저번 #3 코드리뷰 세션에 이어 #5 검색 방법론 세션에 초대받게 되어 참석하게 됐다. 발표자는 아직 정식 기업명이 정해지지 않은 전기차 충전 플랫폼 CTO 박순영님이다. 이제 막 개발을 하기 시작하는 주니어 개발자들이 성장하기 위해 기본이면서도 필수적인 검색 방법론에 대해 설명해주셨다. 발표에서 다루는 내용 1. 검색과 학습의 차이 2. 개발 지식을 얻는 채널 3. 검색 엔진 잘 활용하기 4. 질문과 키워드를 날카롭게 하기 5. 적용하기 6. 내 능력으로 내재화하기 검색 case #1, 무언가 사용법..

Observer 패턴

상태 변화를 알려준다 관찰 대상의 상태가 변화하면 관찰자에게 알린다 → 상태 변화에 따른 처리를 기술할 때 효과적 예제 프로그램 관찰 당하는 대상이 갖고 있는 숫자가 변경됐을 때, 대상을 관찰하고 있는 Observer들에게 알리는 예제 클래스 및 인터페이스 목록 이름 설명 Observer 관찰자 인터페이스 NumberGenerator 수를 생성하는 추상 클래스 RandomNumberGenerator 랜덤하게 수를 생성하는 클래스 DigitObserver 숫자로 수를 표시하는 클래스 GraphObserver 그래프로 수를 표시하는 클래스 Main 동작 테스트용 클래스 예제 프로그램의 클래스 다이어그램 Observer 인터페이스 관찰자를 나타내는 인터페이스. 구체적인 관찰자가 이 인터페이스를 구현한다. up..

구글 드라이브 설계 (대시설기)

1단계 문제 이해 및 설계 범위 확정 기능적 요구사항 파일 추가 파일 다운로드 여러 단말에 파일 동기화 파일 갱신 이력 조회 파일 공유 파일이 편집되거나 삭제되거나 새롭게 공유되었을 때 알림 표시 비기능 요구사항 안정성 빠른 동기화 속도 네트워크 대역폭 규모 확장성 높은 가용성 2단계 개략적 설계안 제시 및 동의 구하기 서버 한대에서 시작 파일을 올리고 다운로드 하는 과정을 처리할 웹 서버 사용자 데이터, 로그인 정보, 파일 정보 등의 메타데이터를 보관할 데이터베이스 파일을 저장할 저장소 시스템 API 파일 업로드 API 단순 업로드 이어 올리기 인자: uploadType=resumable, data: 업로드할 로컬 파일 이어 올리기 URL을 받기 위해 최초 요청 전송 데이터를 업로드하고 업로드 상태 모..

유튜브 설계 (대시설기)

1단계 문제 이해 및 설계 범위 확정 빠른 비디오 업로드 원활한 비디오 재생 재생 품질 선택 기능 낮은 인프라 비용 높은 가용성과 규모 확장성, 안정성 지원 클라이언트: 모바일 앱, 웹브라우저, 스마트 TV 2단계 개략적 설계안 제시 및 동의 구하기 주요 컴포넌트 3개 단말 CDN: 비디오는 CDN에 저장한다. API 서버: 비디오 스트리밍을 제외한 모든 요청 처리(피드 추천, 비디오 업로드 URL 생성, 메타데이터 데이터베이스, 캐시 갱신, 사용자 가입) 설계 영역 2가지 비디오 업로드 절차 비디오 스트리밍 절차 비디오 업로드 절차 사용자 로드밸런서 API 서버 메타데이터 데이터베이스 메타데이터 캐시: 비디오 메타데이터와 사용자 객체는 캐시한다. 원본 저장소: 원본 비디오를 보관할 대형 이진 파일 저장..

채팅 시스템 설계 (대시설기)

1단계 문제 이해 및 설계 범위 확정 응답지연이 낮은 일대일 채팅 기능 최대 100명까지 참여할 수 있는 그룹 채팅 기능 사용자의 접속상태 표시 기능 다양한 단말 지원 푸시 알림 2단계 개략적 설계안 제시 및 동의 구하기 채팅 서비스 클라이언트들로부터 메시지 수신 메시지 수신자 결정 및 전달 수신자가 접속 상태가 아닌 경우에는 접속할 때까지 해당 메시지 보관 HTTP 프로토콜을 이용해 서버가 연결을 만드는 것처럼 동작하는 기법 3가지 폴링 클라이언트가 주기적으로 서버에게 새 메시지가 있냐고 물어보는 방법 롱폴링 클라이언트는 새 메시지가 반환되거나 타임아웃 될 때까지 연결을 유지, 메시지를 반환받으면 연결을 종료하고 새로운 요청을 보낸다. 단점 로드밸런싱을 사용하는 경우, 메시지를 받은 서버는 해당 메시지..

검색어 자동완성 시스템 (대시설기)

가장 많이 이용된 검색어 k개를 자동완성하여 출력하는 시스템을 설계해보자. 1단계 문제 이해 및 설계 범위 확정 입력 단어는 자동완성될 검색어의 첫 부분 5개의 자동완성 검색어 표시 인기순 맞춤법 x, 자동 수정 x 모든 질의는 영어 소문자 DAU 기준으로 천만명 요구사항 빠른 응답 속도 - 시스템 응답속도는 100ms 연관성 정렬 - 인기순 규모 확장성 - 많은 트래픽 고가용성 - 페일오버 개략적 규모 추정 DAU 천만명 한 사용자는 매일 10건의 검색 질의할 때마다 평균 20바이트 데이터 입력 검색창에 금자를 입력할 때마다 클라이언트는 검색어 자동완성 백엔드에 요청을 보낸다. 초당 24,000건의 질의(QPS)가 발생할 것 최대 QPS = QPS * 2 = 48,000 질의 가운데 20% 정도는 신규..

뉴스 피드 시스템 설계 (대시설기)

뉴스 피드는 홈 페이지 중앙에 지속적으로 업데이트되는 스토리이다. (페이스북, 인스타그램 피드 설계) 1단계 문제 이해 및 설계 범위 확정 앱, 웹 모두 지원 새로운 스토리를 올리고, 친구들이 올리는 스토리를 볼 수도 있다. 시간 흐름 역순 한 사용자는 5천명의 친구를 가질 수 있다. 매일 천만 명이 방문 (10million DAU) 이미지나 비디오 등 미디어 파일이 포함될 수 있다. 2단계 개략적 설계안 제시 및 동의 구하기 피드 발행: 스토리를 포스팅하면 해당 데이터를 캐시와 DB에 기록한다. 뉴스 피드 생성: 모든 친구의 포스팅을 시간 흐름 역순으로 모아서 만든다. 뉴스 피드 API 피드 발행 API 새 스토리를 포스팅하기 위한 API다. 피드 읽기 API 뉴스 피드를 가져오는 API다. 피드 발행..

알림 시스템 설계

알림 시스템 모바일 푸시 알림 SMS 메시지 이메일 1단계 문제 이해 및 설계 범위 확정 푸시 알림, SMS 메시지, 이메일 연성 실시간 시스템 (soft real-time) ios, android 단말, 랩탑, 데스크탑 지원 클라이언트 어플리케이션 또는 서버에서 스케줄링 할 수 있다. 사용자가 알림을 받지 않도록(opt-out) 설정할 수도 있다. 하루에 천만 건의 모바일 푸시 알림, 백만 건의 SMS 메시지, 5백만 건의 이메일 2단계 개략적 설계안 제시 및 동의 구하기 알림 유형별 지원 방안 연락처 정보 수집 절차 알림 전송 및 수신 절차 알림 유형별 지원 방안 ios 푸시 알림 알림 제공자 → APNS → IOS 단말 알림 제공자: 애플 푸시 알림 서비스(Apple Push Notification..

웹 크롤러 설계 (대시설기)

검색 엔진에서 널리 쓰는 기술로, 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 것이 주 목적이다. 크롤러 이용처 검색 엔진 인덱싱: 크롤러는 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스를 만든다. 웹 아카이빙: 나중에 사용할 목적으로 장기보관하기 위해 웹에서 정보를 모으는 절차를 말한다. 웹 마이닝: 유명 금융 기업들은 크롤러를 사용해 주주총회 자료나 연차 보고서를 다운받아 기업의 핵심 사업 방향을 알아낸다. 웹 모니터링: 인터넷에서 저작권이나 상표권이 침해되는 사례를 모니터링할 수 있다. 1단계 문제 이해 및 설계 범위 확정 URL 집합이 입력으로 주어지면, 해당 웹 페이지를 다운로드한다. 다운받은 웹 페이지에서 URL들을 추출한다. 추출된 URL들을 다운로드할 URL 목록에 추가하고 처음부터 반..