programing 30

대규모 시스템 설계 - 구글 드라이브 설계

이번엔 대규모 시스템 설계 15장 구글 드라이브 설계 중 개략적 설계안 제시 및 동의 구하기에서 API와 한 대 서버의 제약 극복 부분을 정리하고자 한다. 구글 드라이브 설계시 어떤 API를 제공해야 할까?라는 질문에 기본적으로 3가지 API 제공이 필요하다.파일 업로드 API, 다운로드 API, 파일 갱신 히스토리 제공 API이다. 1. 파일 업로드 API이 시스템은 2가지 종류의 업로드를 지원한다. - 단순 업로드: 파일 클기가 작을 때 사용한다.- 이어 올리기 : 파일 사이즈가 크고 네트워크 문제로 업로드가 중단될 가능성이 높다고 생각될 때 API 예시는https://api.example.com/files/upload?uploadType=resumable위와 같은 API를 사용한다면 인자는 uplo..

programing 2025.07.02

kafka 기초

이번엔 카프카 기초를 되돌아보려 한다.작년 게시글에도 있고 이미 사용하고 있는 스택이긴 하나 다시 기초를 정립해 탄탄해져 보려 한다. kafka카프카는 고성능 분산형 데이터 스트리밍 플랫폼으로 메시징 시스템 중 하나로 사용된다.고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위한 오픈 소스 분산 이벤트 스트리밍 플랫폼이다.이벤트 스트리밍 플랫폼이다. 이벤트 스트리밍은 디지털 처리 방식으로 비즈니스 자동화를 위한 기술 기반이다. 증권, 은행, 보험, 물류, 공장, 호텔 등 여러 사례에 사용된다. kfaka는 3가지 주요 기능을 결합해 end-to-end 이벤트 스트리밍을 구현할 수 있다.이벤트 스트림을 지속적으로 발행 - 구독한다, 내구성 있고 안정적으로 저장한다. ..

programing 2025.06.26

대규모 시스템 설계 검색어 자동 완성

이번엔 대규모 시스템 설계 검색어 자동 완성 부분에서 접두어 최대 길이 제한과 각 노드 인기 검색어 캐시 부분을 알아보고자 한다. 기존 트리 구조 알고리즘에서 최악 결과로 전체를 모두 탐색하는 일이 생길 수 있기에 다음과 같은 부분으로 해결하려 한다.1. 접두어 최대 길이 제한2. 각 노드에 인기 검색어를 캐시 접두어 최대 길이 제한사용자가 검색창에 긴 검색어를 입력하는 일은 거의 없다. 따라서 검색어 값을 작은 정숫값(p)으로 가정해도 안전하다.검색어의 최대 길이를 제한할 수 있다면 접두어 노드를 찾는 단계의 시간 복잡도는 O(p)에서 O(작은 상수값) = O(1)로 바뀔 것이다. 노드에 인기 검색어 캐시각 노드에 k개 인기 검색어를 저장해 두면 전체 트라이를 검색하는 일을 방지할 수 있다.5~10개 ..

programing 2025.06.21

대규모 시스템 설계 - 채팅 시스템

채팅 시스템 설계 중 개략적 설계안 제시 및 동의 구하기 부분 중 클라이언트와 서버의 통신 방법에 대해 정리하고자 한다. 채팅 시스템의 경우 클라이언트는 모바일 앱이거나 웹 애플리케이션이고 클라이언트는 서로 직접 통신하지 않는다. 대신 각 클라이언트는 채팅 서비스와 통신을 하게 된다.채팅 서비스는 클라이언트들로부터 메시지 수신, 메시지 수신자 결정 및 전달, 수신자가 접속 상태가 아닌 경우 접속할 때까지 해당 메시지 보관을 해야 한다.위는 메시지 송수신 클라이언트와 채팅 서비스의 관계이다. 채팅을 시작하려는 클라이언트는 네트워크 통신 프로토콜을 사용해 서비스에 접속하고 채팅 서비스의 경우 어떤 통신 프로토콜을 사용할 것인가도 중요한 문제이다.대부분의 클라이언트/서버 애플리케이션에서 요청을 보내는 것은 클..

programing 2025.06.18

웹 소켓(Web Socket)

이번에 알아볼 건 웹 소켓이다.스터디중 웹 소켓에 대해 나왔고 스터디 내용 정리하기 전에 웹 소켓에 대해 먼저 정리하고자 한다. 웹 소켓(Web Socket)웹 소켓(Web Socket)은 웹 브라우저와 서버 간 실시간 양방향 통신을 가능하게 하는 프로토콜로 HTTP와 달리 지속적 연결을 유지해 데이터를 주고받을 수 있기 때문에 양방향 통신에서 클라이언트와 서버가 데이터를 주고받을 때 사용한다. 주요 특징을 알아보자.지속적인 연결 : HTTP처럼 요청/응답 방식이 아닌 연결이 유지되는 동안 실시간으로 데이터를 주고 받는다.실시간성 : 빠른 데이터 전송이 필요한 채팅, 게임, 주식 정보 등 실시간 애플리케이션에 적합하다.TCP 기반 : 웹 소켓은 TCP 기반으로 동작한다. 장점으로는 실시간 데이터 전송, ..

programing 2025.06.18

대규모 시스템 설계 - 뉴스피드 상세설계

이번에 맡은 부분은 뉴스피드 상세 설계 중 흐름부터 뉴스피드 마무리까지이다. 이미지나 비디오와 같은 미디어 콘텐츠는 CDN에 저장하고 빨리 읽을 수 있게 했다. 이제 클라이언트가 뉴스 피드를 어떻게 읽는지 단계별로 알아보자.1. 사용자가 뉴스 피드를 읽으려는 요청을 보낸다. 요청은 /v1/me/feed로 전송될 것이다.2. 로드 밸런서가 요청을 웹 서버 가운데 하나로 보낸다.3. 웹 서버는 피드를 가져오기 위해 뉴스 피드 서비스를 호출한다.4. 뉴스 피드 서비스는 뉴스 피드 캐시에 포스팅 ID 목록을 가져온다.5. 뉴스 피드에 표시할 사용자 이름, 사용자 사진, 포스팅 콘텐츠, 이미지 등을 사용자 캐시와 포스팅 캐시에서 가져와 완전한 뉴스 피드를 만든다.6. 생성된 뉴스 피드를 JSON 형태로 클라이언..

programing 2025.06.15

대규모 시스템 알림 서비스 상세설계

대규모 시스템에서 알림 서비스 설계 시 상세 설계 부분을 알아보자. 개략적으로 설계를 진행하며 알림의 종류, 연락처 정보 수집 절차, 알림 전송, 수신 절차에 대해 살펴보았고 이후 안정성, 추가로 필요한 컴포넌트 및 고려사항인 알림 템플릿, 알림 설정, 전송률 제한, 재시도 메커니즘, 보안, 큐에 보관된 알림에 대한 모니터링과 이벤트 추적, 개선된 설계안에 대해 알아보아야 한다. 안정성분산 환경에서 운영될 알림 시스템을 설계할 때는 안정성을 확보하기 위한 사항 몇 가지를 반드시 고려해야 한다. 데이터 손실 방지알림 전송 시스템의 가장 중요한 요구사항 중 하나는 알림이 소실되면 안 된다는 것이다. 알림이 지연되거나 순서가 틀려도 괜찮지만 사라지면 곤란하다는 것으로 요구사항을 만족하려면 알림 시스템은 알림 ..

programing 2025.06.11

프로젝트 회고

이번 기회를 토대로 지나오며 프로젝트를 진행한 부분을 개념을 토대로 정리하려 한다.오늘은 가장 최근 프로젝트이다. 가장 최근 프로젝트는 MSA 기반 대량 트래픽 프로젝트로 캐치 테이블을 모방한 식당 예약 프로젝트를 진행했습니다.MAU를 설정해 예상 트래픽을 상정하고 각 서비스에 부하 테스트를 통해 안정성 있는 서비스 제공이 목표였습니다.담당한 부분은 팀장과 알림 서비스, 프로모션 서비스입니다.알림 서비스에서 특별한 부분은 성능 최적화, 리팩토링, 모니터링 지표 구성입니다.성능을 최적화한 부분은 알림 서비스가 기존 다른 서비스에 대해서 발생한 알림을 사용자에게 전달할 때 DB 폴링 방식을 사용했습니다.이때, DB 스케줄링을 통해 주기적으로 탐색하게 되었고 탐색의 양이 많아질수록 DB plan의 실행시간이 ..

programing 2025.06.09

대규모 시스템 설계 - URL 단축 설계

URL단축기 상세 설계UR 단축기는 시스템의 핵심 컴포넌트이므로, 그 처리 흐름이 논리적으로는 단순해야 하고 기능적으로는 언제나 동작하는 상태로 유지되어야 한다. 본 예제에서는 62진법 변환 기법을 사용해 설계할 것이다. 1. 입력으로 긴 URL을 받는다.2. DB에 해당 URL이 있는지 검사한다.3. DB에 있다면 해당 URL에 대한 단축 URL을 만든 적이 있는 것으로 따라서 db에서 해당 단축 URL을 가져와 클라이언트에게 반환한다.4. DB에 없는 경우에는 해당 URL을 새로 접수된 것이므로 유일한 ID를 생성하고 ID는 DB에서 기본키로 사용된다.5. 62진법 변환을 적용해 ID를 단축 URL로 만든다.6. ID, 단축 URL, 원래 URL로 새 DB 레코드를 만든 후 단축 URL을 클라이언트에..

programing 2025.06.03

대규모 시스템 설계 - 키, 값 저장소 장애 처리

대규모 시스템에서 장애는 불가피하기만 한 것이 아닌 흔하게 일어나는 사건으로 이 장애를 어떻게 처리할 것인가는 중요한 문제이다.장애 감지 기법과 장애 해소에 대해 알아보도록 하자. 장애 감지분산 시스템에서 한 대 서버(A 서버)가 죽는 상황이 있을 때 바로 A 서버를 장애 처리하지 않는다. 보통 두 대 이상의 서버에서 A 서버의 장애를 보고해야 해당 서버가 실제로 장애가 발생했다 간주해 처리하게 된다. 위 구성처럼 서버가 구성되어 있을 때 모든 노드 사이 멀티캐스팅 채널을 구축하는 것이 장애를 감지하는 가장 쉬운 방법이다. 하지만 서버가 점점 많아질수록 비효율적이게 된다.분산 시스템에서 가십 프로토콜(gossip protocol) 같은 분산형 장애 감지 솔루션을 채택하면 효율적이게 된다. 가십 프로토콜분..

programing 2025.05.30
728x90