📚FOS Study
홈카테고리
홈카테고리

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agents 페이지로 이동
    • langgraph 페이지로 이동
    • BMAD Method — AI 에이전트로 애자일 개발하는 방법론
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • Claude Code를 11일 동안 쓴 결과 — 데이터로 본 나의 사용 패턴
    • Claude Code 멀티 에이전트 — Teams
    • 하네스 엔지니어링 실전 — 4인 에이전트 팀으로 코딩 파이프라인 구축하기
    • 하네스 엔지니어링 — 오래 실행되는 AI 에이전트를 위한 설계
    • 멀티모달 LLM (Multimodal Large Language Model)
    • AI 에이전트와 함께 MVP 만들기 — dooray-cli 사례
  • algorithm 페이지로 이동
    • live-coding 페이지로 이동
    • 분산 계산을 위한 알고리즘
  • architecture 페이지로 이동
    • [초안] 시니어 백엔드를 위한 API 설계 실전 스터디 팩 — REST · 멱등성 · 페이지네이션 · 버전 전략
    • 캐시 설계 전략 총정리
    • [초안] DDD와 도메인 모델링: 시니어 백엔드 관점의 전술/전략 패턴 실전 가이드
    • 디자인 패턴
    • [초안] 분산 아키텍처 완전 정복: Java 백엔드 시니어 인터뷰 대비 실전 가이드
    • [초안] 분산 트랜잭션과 Outbox 패턴 — 왜 2PC를 피하고 어떻게 대신할 것인가
    • 분산 트랜잭션
    • [초안] 대규모 커머스 트래픽 처리 패턴 — 1,600만 고객과 올영세일을 버티는 설계
    • [초안] MSA 서비스 간 통신: Redis Cache-Aside × Kafka 이벤트 하이브리드 설계
    • [초안] Observability 입문: 시니어 백엔드가 장애를 탐지하고 대응하는 방식
    • [초안] 시니어 백엔드를 위한 Resilience 패턴 실전 가이드 — Timeout, Retry, Circuit Breaker, Bulkhead, Backpressure
    • [초안] Strategy Pattern — 분기문을 없애는 설계, 시니어 백엔드 인터뷰 핵심 패턴
    • [초안] 시니어 백엔드를 위한 시스템 설계 입문 스터디 팩
    • [초안] 템플릿 메서드 패턴 - 백엔드 처리 골격을 강제하는 가장 오래되고 가장 위험한 패턴
    • [초안] 대규모 트래픽 중 무중단 마이그레이션 — Feature Flag + Shadow Mode 실전
  • css 페이지로 이동
    • FlexBox 페이지로 이동
  • database 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • redis 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • 커넥션 풀 크기는 얼마나 조정해야할까?
    • 인덱스 - DB 성능 최적화의 핵심
    • 역정규화 (Denormalization)
    • 데이터 베이스 정규화
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • monitoring 페이지로 이동
    • Envoy Proxy
    • Graceful Shutdown
  • go 페이지로 이동
    • Go 언어 기본 학습
  • http 페이지로 이동
    • HTTP Connection Pool
  • interview 페이지로 이동
    • 210812 페이지로 이동
    • company-analysis 페이지로 이동
    • experience-based 페이지로 이동
    • master 페이지로 이동
    • 뱅크샐러드 AI Native Server Engineer
    • CJ 올리브영 커머스플랫폼유닛 Back-End 개발 지원 자료
    • 마이리얼트립 - Platform Solutions실 회원주문개발 Product Engineer
    • NHN 서비스개발센터 AI서비스개발팀
    • nhn gameenvil console backend 직무 인터뷰 준비
    • 면접을 대비해봅시다
    • 토스증권 Server Developer (Platform) 지원 자료
    • 토스증권 Server Developer (Product) 지원 자료
    • 토스뱅크 Server Developer (Product) 지원 자료
    • Tossplace Node.js Developer
    • 토스플레이스 Node.js 백엔드 컬처핏
  • java 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • 더_자바_코드를_조작하는_다양한_방법 페이지로 이동
    • [초안] JVM 튜닝 실전: 메모리 구조부터 Virtual Threads, GC 튜닝, 프로파일링까지
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • OpenTelemetry 란 무엇인가?
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • Data_Structures_and_Algorithms 페이지로 이동
    • Heap 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node.js
    • npm vs pnpm 선택기준은 무엇인가요?
    • `setImmediate()`
  • kafka 페이지로 이동
    • Kafka 기본
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • [초안] Kafka 실전 설계: 파티션 전략, 컨슈머 그룹, 전달 보장, 재시도, 순서 보장 트레이드오프
    • 메시지 전송 신뢰성
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • tmux — Terminal Multiplexer
  • network 페이지로 이동
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • observability 페이지로 이동
    • [초안] Datadog APM 실전 투입 가이드: Java/Spring 서비스 관측성 스택 구축하기
  • react 페이지로 이동
    • JSX 페이지로 이동
    • VirtualDOM 페이지로 이동
    • v16 페이지로 이동
  • resume 페이지로 이동
    • 지원 문항
  • security 페이지로 이동
    • [초안] 시니어 백엔드를 위한 보안 / 인증 스터디 팩 — Spring Security, JWT, OAuth2, OWASP Top 10
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • sb-dev-team 페이지로 이동
    • the-future-company 페이지로 이동
  • testing 페이지로 이동
    • [초안] 시니어 Java 백엔드를 위한 테스트 전략 완전 정리 — 피라미드부터 TestContainers, JMH, Contract까지
📚FOS Study

개발 학습 기록을 정리하는 블로그입니다.

바로가기

  • 홈
  • 카테고리

소셜

  • GitHub
  • Source Repository

© 2025 FOS Study. Built with Next.js & Tailwind CSS

목록으로 돌아가기
🧮algorithm

분산 계산을 위한 알고리즘

약 3분
2026년 4월 19일
GitHub에서 보기

분산 계산을 위한 알고리즘

  • 수학 시간에 배운 분산

    • 편차 제곱의 합의 평균
    • 예) 1, 2, 3의 분산을 구하라
    • 평균 = (1 + 2 + 3) / 3 = 2
    • 편차 제곱의 합 = (1-2)^2 + (2-2)^2 + (3-2)^2 = 2
    • 분산 = 2 / 3 = 0.6666666666666666
  • 위 처럼 naive한 방식으로는 1억개 데이터의 분산을 구하려면 1억개의 데이터를 리스트로 보관해야한다.

    • 1억개의 Long 타입을 메모리에 저장한다면?
    • 100,000,000 * 24 / 1024 / 1024 = 2286MB 를 필요로 하게 된다.
    • 이는 메모리 비효율성을 야기시키고, 연산을 동시에 4개를 처리한다면 OOM이 발생할 수 있다.

OpenJDK 기준으로 Long 타입의 메모리 크기

OpenJDK의 HotSpot JVM을 기준으로 java.lang.Long 객체는 다음과 같은 메모리 구조를 가집니다.

  • 메모리 구성:

    • 객체 헤더 (Object Header): 12 바이트
    • 마크 단어 (Mark Word): 8 바이트
    • 클래스 포인터 (Class Pointer): 4 바이트 (compressed oops 사용 시)
    • 필드 (long 값): 8 바이트
    • 패딩 (Padding): 4 바이트

    JVM은 객체 크기를 8바이트 단위로 정렬하므로, 총합이 20 바이트인 경우 4바이트의 패딩이 추가되어 24 바이트가 됩니다.

  • 총 메모리 크기: 24 바이트

  • 계산 방식:

    • 객체 헤더: 12 바이트
    • long 필드: 8 바이트
    • 패딩: 4 바이트
    • 합계: 12 + 8 + 4 = 24 바이트
  • 추가 정보:

    • Compressed OOPs:

      64비트 JVM에서 객체 참조를 압축하여 메모리 사용량을 줄이는 기술입니다. 이를 사용하면 클래스 포인터의 크기가 줄어들어 메모리 효율이 향상됩니다.

    • 메모리 정렬:

      JVM은 객체의 메모리 정렬을 최적화하기 위해 8바이트 단위로 패딩을 추가합니다. 이는 메모리 접근 속도를 향상시키기 위한 목적입니다.

  • 따라서 이를 해결하기 위해 Welford's Online Algorithm 을 사용한다.

웰포드의 온라인 알고리즘이란?

  • 웰포드의 온라인 알고리즘(Welford's Online Algorithm)은 데이터 스트림을 한 번에 한 요소씩 처리하면서 평균과 분산을 효율적으로 계산할 수 있는 방법입니다.
  • 특히, 대용량 데이터나 실시간으로 들어오는 데이터에 대해 메모리 사용량을 최소화하면서 통계 값을 업데이트할 수 있어 유용합니다.

왜 온라인 알고리즘이 필요한가?

  • 전통적인 통계 계산 방식에서는 모든 데이터를 한 번에 메모리에 로드한 후 평균과 분산을 계산합니다.
  • 그러나 데이터의 양이 매우 크거나 실시간으로 데이터가 유입되는 경우, 이러한 방식은 비효율적이거나 불가능할 수 있습니다. 온라인 알고리즘은 다음과 같은 장점을 제공합니다:
    • 메모리 효율성: 모든 데이터를 저장할 필요 없이, 현재까지의 통계 값만 유지하면 됩니다.
    • 실시간 처리: 데이터가 들어오는 즉시 통계 값을 업데이트할 수 있습니다. 단일 패스 처리: 데이터를 한 번만 읽으면 되므로 I/O 비용을 절감할 수 있습니다.

웰포드 알고리즘의 작동 원리

  • 웰포드의 알고리즘은 새로운 데이터 포인트가 들어올 때마다 평균과 분산을 업데이트합니다.
  • 이를 위해 다음과 같은 변수를 유지합니다:
    • n: 현재까지의 데이터 포인트 수
    • mean: 현재까지의 평균
    • M2: 현재까지의 두 번째 중심 누적합 (분산 계산에 사용)

장점과 단점

  • 장점
    • 효율성: 시간 복잡도가 O(1)로 매우 효율적입니다.
    • 안정성: 누적 오차를 최소화하여 정확한 통계 값을 제공합니다.
    • 비교적 단순한 구현: 이해하고 구현하기 쉬운 알고리즘입니다.
  • 단점
    • 단일 통계만 유지: 평균과 분산만을 계산할 수 있으며, 다른 통계 값을 원할 경우 추가적인 수정이 필요합니다.
    • 정확도 제한: 매우 큰 데이터 집합에서는 부동 소수점 연산의 한계로 인해 정확도에 영향을 받을 수 있습니다.
algorithm 카테고리의 다른 글 보기수정 제안하기

댓글

댓글을 불러오는 중...
  • 분산 계산을 위한 알고리즘
  • 웰포드의 온라인 알고리즘이란?
  • 왜 온라인 알고리즘이 필요한가?
  • 웰포드 알고리즘의 작동 원리
  • 장점과 단점