본문 바로가기

Develop/etc10

개략적인 영상 스트리밍 시스템 설계에 관한 이야기 가상 면접 사례로 배우는 대규모 시스템 설계 14장을 참고한 글입니다.매일 사용하지만 설계해 본 적 없는 기능에 대히여  1) 설계 범위 정하기어떤 기능? 비디오를 올리고 시청하는 기능클라이언트는? 모바일, 웹, 스마트TVDAU는?사용자가 소비하는 시간은?클라우드 인프라 활용 가능한지?빠른 업로드, 원활한 재생, 재생 품질 선택, 낮은 인프라 비용, 가용성, 확장성, 안정성에 초점을 둔다.  2) 설계안비디오 업로드 절차 생소한 컴포넌트만 살펴보면메타데이터 데이터베이스/캐시 : 비디오의 메타데이터를 보관한다. 샤딩과 다중화를 적용하여 성능 및 가용성 요구사항을 충족한다.트랜스 코딩 서버 : 비디오 트랜스코딩은 비디오 인코딩이라 부르기도 하는 절차로, 비디오의 포맷(MPEG, HLS 등)을 변환하는 절차다.. 2024. 4. 27.
개략적인 검색어 자동완성 시스템에 대한 이야기 가상 면접 사례로 배우는 대규모 시스템 설계 13장을 참고한 글입니다.매일 사용하지만 설계해 본 적 없는 기능에 대히여  1) 범위 설정하기검색 자동완성의 기준은 무엇인가? (가장 많이 이용된? 가장 최근에 검색된?)몇 개의 자동완성 단어가 표시되어야 하는지?다국어 지원이 가능한가?DAU는?규모에 따른 QPS 계산하기(일간이용자*요청수*최대글자/일/24시간/3600초) 2) 설계안데이터 수집 서비스사용자가 입력한 질의를 실시간으로 수집하는 시스템이다. 데이터가 많은 애플리케이션에 실시간 시스템은 바람직하지 않지만 설계안을 만드는 출발점으론 괜찮다. 질의문과 사용빈도를 저장하는 빈도 테이블이 있다고 가정한다. 처음엔 테이블이 비어있지만 사용자가 검색하면 상태가 바뀌어 나간다.  질의 서비스빈도테이블에서 빈.. 2024. 4. 26.
개략적인 채팅 시스템에 관한 이야기 가상 면접 사례로 배우는 대규모 시스템 설계 12장을 참고한 글입니다.   1) 설계 범위 확정1:1 채팅앱인지? 그룹앱인지?플랫폼은?DAU는?특정 기능이 있는지? (현재 활동중, 첨부파일 지원 등)메시지 길이 제한이 있는지?채팅 이력 보관 기간은? 2) 설계에 들어가기 앞서 필요한 지식어떤 네트워크 통신 프로토콜을 사용할 것인지? HTTP를 사용할까?→ 오랜 세월 검증된 HTTP 또한 좋은 방법일 수 있다. keep-alive 속성으로 TCP 핸드셰이크 횟수를 줄일 수 있다.하지만 HTTP를 사용한다면 수신 시나리오는 복잡해진다. 클라이언트가 연결을 만드는 프로토콜이기에 서버가 임의 시점에 메시지를 보내는 데 쉽게 쓰일 수 없다. 이 문제를 해결하기 위해 서버가 연결을 만드는 것처럼 동작하는 기법이 개.. 2024. 4. 25.
개략적인 뉴스 피드 시스템 설계에 관한 이야기 가상 면접 사례로 배우는 대규모 시스템 설계 11장을 참고한 글입니다.  1) 문제 범위 설정 - 지원 기기는 어디까지 인가?- 중요한 기능이 무엇인가? (새 글을 작성할 수 있어야 한다, 친구의 글을 볼 수 있어야 한다)- 뉴스 피드는 어떤 기준으로 표시되는가?- DAU는 몇인가?- 글에 이미지와 비디오를 올릴 수 있는가? (저장을 위한 저장소 요구량)  2) 설계안뉴스피드 발행포스팅 전송(fanout) 서비스사용자와 친구관계에 있는 모든 사용자에게 새 포스팅을 전달하는 과정, 쓰기 시점(push)과 읽기 시점(pull)이 있음 쓰기 시점에 팬아웃하는 모델새로운 포스팅을 기록하는 시점에 뉴스 피드를 갱신하게 된다. 피드가 실시간으로 갱신되며 친구 목록 사용자에게 즉서.. 2024. 4. 24.
Adapter Pattern은 무엇인가 현실 세계의 어댑터를 생각하면 Adapter Pattern을 이해하기 쉽다. USB-A와 USB-C를 연결해야 한다면 불가능하지만 어댑터를 사용하면 가능한 것처럼! 불완전한 서로를 어댑터로 전환시켜 주는 것이다. 이 디자인 패턴에선 어떤 타입을 기대하는 Class(Client)를 가지고 있고, 같은 기능이지만 다른 인터페이스로 노출되어 있 는 객체(Adaptee)를 가지고 있을 때 사용된다. 그니까! 정리하면 어댑터 패턴은 클래스의 인터페이스를 서버가 기대하는 다른 인터페이스로 변환시켜주는 디자인 패턴이다. Target 인터페이스(어댑터 아님)를 상속하는 어댑터가 구현되어 있다. 어댑터는 모든 요청을 Adaptee에게 위임한다. // Java implementation of Adapter pattern .. 2023. 9. 13.
Nginx 넌 도대체 뭐니 https://www.youtube.com/watch?v=6FAwAXXj5N0&ab_channel=우아한테크 해당 영상을 보고 정리한 내용입니다. 정말 설명을 잘하시니 한번씩 보시는 거 추천!! Nginx?백엔드 개발을 하다보면 들어봤을 법 한 단어이다. 왜 쓰이는지 어떻게 쓰는지 모르면서 사용하다가 이번에 확실하게 정리해본다. 웹서버이자 로드밸런서이자 *SSL 터미네이션이자 캐시이자 HSTS, CORS 처리, TCP/UDP 커넥션 분산 등등등… 만능열쇠🔑 더보기SSL 터미네이션 웹서버-클라이언트는 https, 웹서버-서버는 http 통신하드웨어 가속기라고도 한다. 년도에 따라서 웹서버가 발전한 내용을 알아보자.1995년이전까지는 NCSA HTTPd(유닉스 기반 최초의 웹서버)라는 웹서버 사용 → 버그가.. 2023. 9. 12.
0.1 + 1.1 == 1.2 문제 (feat. 부동소수점) 왜 이런 문제가 발생할까? 실수 표현 방법 고정 소수점 방식 (Fixed Point) 실수는 보통 정수부와 소수부로 나누어 표기한다. 따라서 실수를 표현하는 가장 간단한 방식은 소수부의 자릿수를 미리 정하여, 고정된 자릿수의 소수를 표현하는 것이다. 장점 : 단순하다. 단점 : 표현 범위가 적다. 부동 소수점 방식(Floating Point) 하나의 실수를 가수부와 지수부로 나누어 표현하는 방식이다. (不動이 아니라 浮動이다) 지수부 : 크기를 표현함. 가수의 어디쯤에 소수점이 있는지 나타냄 가수부 : 실수의 실제값 표현 지수의 값에 따라 소수점이 움직이는 방식을 활용한 실수 표현 방법이다. 장점 : 범위가 넓다(현재 대부분 시스템에서 사용 중) 단점 : 오차 발생 가능성 부동소수점의 오차 1보다 작은 .. 2023. 5. 23.
[C++] 람다식 (feat. 2887 행성 터널) https://www.acmicpc.net/problem/2887 2887번: 행성 터널 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이 www.acmicpc.net 해당 문제를 풀면서 정렬을 세 번 수행해야 하는데 C++로 람다식 어떻게 쓰나 찾아보고 쓴다. >>> 행성터널 풀이 2023.05.22 - [Computer Science/Problem Solving] - [백준] 2887번: 행성 터널 | C++ [백준] 2887번: 행성 터널 | C++ https://www.acmicpc.net/problem/2887 2887번.. 2023. 5. 20.