Coordinator 기반 분산 Key-Value 저장소 실습 실습 목적 Redis 서버 여러 대(예: 3대)를 하나의 “분산 저장소”처럼 보이게 만든다. Coordinator가 데이터 처리의 중심이 되어 일관성 있게 여러 노드에 데이터 읽기/쓰기를 관리한다. 복잡한 Paxos/Raft 없이, 단순 Majority-Writes, First-Respons...
키-값 저장소 고유 식별자인 키에 값을 할당하는 데이터베이스를 키-값 저장소라고 부른다. 키-값 저장소의 대표적인 시스템은 레디스가 있다. 단일 서버 키-값 저장소 한 대 서버만 사용하는 키-값 저장소에서는 키-값 쌍 전부를 메모리에 해시 테이블로 저장하는 게 제일 간단한 설계이다. 해시 테이블로 저장하는 방법은 O(1) 이어서 매우 빠르지만 시스템이 확장...
안정 해시 구현 안정 해시를 직접 만들어본다. 위 코드를 아래와 같이 스크립트를 작성하여 실행한다. 위 스크립트를 실행시키면 아래와 같이 출력된다. replicas 를 늘리면 Server에 User가 적절히 분배되지만, Server가 바뀌는 User가 늘어나게 된다. 반대로 replicas 를 줄이면 Server에 User가 적절히 분배되지는 않지만,...
문제 분산된 환경에서는 해시 키를 많이 사용한다. 분산 캐시(예: Redis): 서비스에 캐시 서버가 여러 대 있을 때, 어떤 서버에 데이터를 저장할지 결정해야 함. 데이터베이스 샤딩 (Sharding): 데이터베이스가 너무 커서 여러 DB 인스턴스로 나누고 싶을 때. 분산환경에서 일반적으로 사용하는 해시 방식(hash(key) % N)에는 치명적인 문제가...

슬라이딩 윈도우 카운터 알고리즘 슬라이딩 윈도우 카운터 알고리즘 = 고정 윈도 카운터 알고리즘 + 윈도 로깅 알고리즘 고정 위도우 카운터 알고리즘 타임라인을 고정된 시간 간격의 윈도우로 나누고, 각 윈도우에서 요청 수를 센다. 카운터가 임계치에 도달하면 새 윈도우가 열릴 때까지 요청을 거부하며, 윈도우 경계에서 트래픽이 집중되면 할당량보다 더 많은 요청...
처리율 제한 장치 네트워크 시스템에서 처리율 제한 장치는 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치이다. 처리율 제한 장치가 필요한 이유 DoS 공격에 의한 자원 고갈을 방지할 수 있다. 비용을 절감한다. 비용이 큰 API의 호출을 제한함으로써 비용을 절감할 수 있다. 서버 과부하를 막는다. 1단계 문제 이해 및 설계 범위 확...
문장과 단락을 구조화하는 법 서술식, 개조식, 도식 서술식 '~다.'로 끝나는 완전한 문장으로 구성된 글을 말한다. 개발 가이드 문서를 보통 서술식으로 작성한다. 개조식 종결 어미(예: ~다) 대신 명사(예: 완료, 증대 등)나 용언의 명사형(예: ~했음)으로 끝내는 것을 말한다. 신문의 헤드라인을 쓰거나 어떤 사항을 나열할 때 사용한다. 도식 도식은 사물...

🗓️ 09/29 (월) 📌 게시판 서비스의 특성 읽기 트래픽이 쓰기 트래픽보다 압도적으로 많음 단순히 게시글 데이터만이 아니라, 좋아요 수 / 댓글 수 / 조회 수 등 여러 데이터를 함께 보여줘야 함. ⚙️ 문제점 데이터가 분산되어 있는 환경에서 Client가 여러 서비스를 거쳐야 함 ArticleService는 게시글을 읽기 위해 여러 서...

⚙️ 대규모 시스템 설계 강의 정리 (섹션 4~5) > 인프런 강의 섹션 4~5: 어뷰징 방지, Kafka 주요 개념, 인기글 시스템, Transactional Messaging 정리 > 기간: 9월 2일 ~ 9월 10일 📅 9월 2일 (화) — 조회수 어뷰징 방지 설계 🔹 왜 어뷰징 방지가 필요한가 조회수는 단순한 숫자처럼 보여도 서비스 신...

⚙️ 대규모 시스템 설계 강의 정리 (섹션 3) > 인프런 강의 섹션 3: 트리 구조, 좋아요 수, 조회수 처리 설계 학습 내용 정리 > 기간: 8월 30일 ~ 9월 1일 📅 8월 30일 (토) — 무한 Depth 트리 구조 설계 🔹 트리 구조의 문제점 게시판, 댓글 등에서는 무한 Depth 구조(대댓글 등)가 자주 등장합니다. 이때, 단순...

🏗️ 대규모 시스템 설계 강의 정리 (섹션 2) > 인프런 강의 섹션 2: 데이터베이스 구조와 확장 전략 학습 내용 정리 > 기간: 8월 18일 ~ 8월 26일 📅 8월 18일 (월) — 샤딩(Sharding) 🔹 샤딩이란? 데이터를 여러 DB에 분산 저장하는 기술 가용성을 높이기 위한 Master-Slave 구조와는 목적이 다름 샤딩은...

Graphql 사용하는 이유 Graphql 이란 클라이언트가 원하는 데이터를 명확히 정의하고 효율적으로 요청할 수 있도록, 통제권을 제공하는 API 쿼리 언어 Overfetching RestAPI는 서버에서 정의한 데이터를 모두 반환한다. 클라이언트에서 필요한 정보는 일부분인데 많은 데이터를 받아오게 되면, 불필요한 리소스 낭비가 발생한다.(네트워크 낭비,...
1. 코드 더 잘 읽기 LTM: 장기 기억 공간 (하드) STM: 단기 기억 공간 (메모리) 코딩에 영향을 주는 인지 과정 지식이 없다는 것은 두뇌의 장기 기억 공간의 문제 지식이 아닌 어떤 정보가 부족할 때는 단기 기억 공간의 문제 1장 요약 코드를 읽거나 작성할 때 발생하는 인지과정 세가지 LTM에서 정보를 인출한다. 키워드의 의미 같은 것 메서드나...
그 전에 2장 '개략적인 규모 측정'을 정리하자. 개략적인 규모 측정 "개략적인 규모 추정"은 보편적으로 통용되는 성능 수치상에서 사고 실험을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것"이다. 개략적인 규모 측정을 위해서는 2의 제곱수, 응답지연 값, 고가용성에 대해 알고있어야 한다. 최근 기술 도향이 반영...

linux 에서 docker compose로 mysql db 두 대를 띄운다. 아래 절차에 따라 하면 된다. 1️⃣ Docker & Docker Compose 설치 2. 디렉토리 구조 3. docker-compose.yml 작성 4. 설정 파일 master_conf/my.cnf slave_conf/my.cnf Master Slave DB 설정 ...
데이터베이스 어떤 데이터 베이스를 사용할 것인가? 비-관계형 데이터베이스가 바람직한 경우 대부분의 개발자에게는 관계형 데이터베이스가 최선일 것이지만 다음과 같은 경우에 비-관계형 데이터베이스를 고려해 보아야 한다. 아주 낮은 응답 지연시간이 요구되는 경우 다루는 데이터가 비정형인 경우 데이터를 직렬화하거나 역직렬화 할 수 있기만 하면 되는 경우 아주...
개발자를 위한 글쓰기 가이드 - 유영경 메일 작성 받는 사람을 명확하게 지정한다 받는 사람 메일 내용을 반드시 알아야 할 사람, 메일을 받고 업무를 진행해야 하는 사람 참조 메일 내용을 알아두면 좋은 사람, 지금 바로 일을 해야 하는 것은 아니지만 관련 있는 조직 담당자 등을 지정한다. 숨은 참조 메일 내용을 알아 두면 좋지만, '받는 사람'이나 '참...
개발자를 위한 글쓰기 가이드 - 유영경 테크니컬 라이팅 5단계 계획 세우기: 독자를 명확히 하기 구조 잡기: 계획 단계에서 수집한 정보를 작업 순서에 따라 차례대로 배열 초안 작성: 전달할 정보를 모두 넣는 것에 초점. 내용에만 집중 검토와 재작성: 초안 작성 후 다시 읽어 보며 고치는 단계. 이 단계에 집중 필요 배포: 문서를 배포하는 단계 1단계 계...
주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 9장 최소한 알고 있어야 할 서버 지식 개발자와 서버 서버라는 단어는 다양한 대상을 의미한다. 서버 프로그램을 구동하는 OS를 '서버', 아파치나 톰캣 같은 프로그램은 '서버 프로그램'이라고 부르자. OS 계정과 권한 (Linux) root 계정은 OS를 설치하면 기본 생성되는 계정으로 모든 권한을 가...
정리하고 공유하기 글로 정리해서 공유하기 > 먼저 글을 읽기: 좋은 글을 쓰기 위해서는 우선 글을 읽는 노력이 필요하다. 주제와 내용 흐름 잡기 짧지 않은 글을 쓸 때는 일단 글에 담을 내용부터 정리해야 한다. 글의 주제, 개요, 목적, 대상을 결정했다면 내용을 어떤 순서로 풀어갈고 고민하자. 목차와 내용 흐름 초안이 나오면 그때부터 글을 쓰기 시작하자....