성장을 꾸준히 기록하는 공간

고정 헤더 영역

글 제목

메뉴 레이어

성장을 꾸준히 기록하는 공간

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (108)
    • tech (28)
    • spring (14)
    • mysql (8)
    • kubernetes (12)
    • kafka (12)
    • windows (6)
    • project (26)
      • wargame (12)
      • resistance (5)
      • SIEMple (6)
      • Witch's Tower (3)

검색 레이어

성장을 꾸준히 기록하는 공간

검색 영역

컨텐츠 검색

전체 글

  • 8억 명의 사용자를 지원하기 위한 OpenAI의 PostgreSQL 확장

    2026.01.24 by downfa11

  • Kubernetes 리소스 최적화: CPU Throttling은 왜 Limits보다 낮은데 발생할까?

    2026.01.15 by downfa11

  • JVM Metaspace가 단순히 이름만 바꾼건 아닐텐데요

    2026.01.14 by downfa11

  • 운영중 장애 징후 분석: MySQL fsync 최적화를 통한 Commit 지연 해결

    2026.01.13 by downfa11

  • 가상 쓰레드 도입 전후 DB 병목의 이동 (feat. HikariCP 튜닝 전략)

    2026.01.12 by downfa11

  • ArgoWorkflows: 대용량 워크플로우 아카이브 조회시 Out of sort memory 기여

    2026.01.12 by downfa11

  • InnoDB Flush 계층에서 본 Direct IO (feat. Zero Copy와의 차이점)

    2026.01.09 by downfa11

  • Cursus: BloomFilter를 이용한 컨슈머 벤치마크의 정확성 검사 확장

    2026.01.03 by downfa11

8억 명의 사용자를 지원하기 위한 OpenAI의 PostgreSQL 확장

나는 PostgreSQL 안쓰는데도 무려 8억 사용자의 수백만 QPS를 어떻게 해결하는지 궁금하잖아 다들 수백만 QPS를 처리하는데 Azure PostgreSQL을 쓰고, 단일 쓰기 노드와 50 여개의 복제본으로 수용한다는건 직접 안해보면 알 방법이 없는 견적이다. 그 쓰기 처리량을 단일 노드로…. 놀랍다. 이거 단순 계산하면 각 읽기 복제본당 약 2만~5만 QPS 정도를 분담하는 구조로, Azure에서 제공하는 가장 높은 하드웨어 사양(96 vCore, 672GiB RAM, 32TiB)로 추측했다. East US 리전 기준으로 최대 스펙의 Azure 서버는 수백만 QPS의 네트워크 IO 비용을 제외하고서도, 인스턴스 비용 $10,000 * 50, 스토리지 공간 $5,000 * 50 으로 한화로 월 1..

tech 2026. 1. 24. 12:44

Kubernetes 리소스 최적화: CPU Throttling은 왜 Limits보다 낮은데 발생할까?

오늘은 토스 Slash의 'Kubernetes CPU 알뜰하게 사용하기' 섹션을 주제로 작성했다. 처음 resources.requests.cpu 설정을 접할때 'CPU Core를 몇 개 요청한다'라고 막연히 이해했었다. 예를 들어 cpu: 0.3이라고 적혀 있으면 물리적인 CPU Core를 30% 점유한다거나, 코어의 일부를 고정적으로 할당받는다고 오해하기 쉽다. 그리고 이런 접근 방식은 사실 절반 정도 틀렸다. Kubernetes requests.cpu의 오해 Kubernetes에서 CPU는 Core 개념이 아니라 CPU Time이라는 상대적인 시간 점유율로 다뤄진다. 즉, requests.cpu=0.3의 의미는 실제로 Core를 0.3개 쓴다는게 아니라 필요할 때 CPU Time을 30%만큼 보장받..

kubernetes 2026. 1. 15. 21:24

JVM Metaspace가 단순히 이름만 바꾼건 아닐텐데요

Java 8부터 JVM 메모리 구조에서 PermGen 영역이 제거되고 Metaspace가 도입되었다. 이 변화는 그동안 개발자들을 괴롭히던 OutOfMemoryError: PermGen space 오류를 사라지게 만들었고, Heap 영역에서 관리받던 친구를 바깥으로 빼버리면서 JVM 메모리 관리가 한층 단순해진 것처럼 보였다. 하지만 이 변경은 메모리 사용량 자체를 줄이거나, 클래스 로딩 문제를 근본적으로 해결한 결정은 아니었다. PermGen이 담당하던 클래스 metadata를 Heap 내부에서 관리하던 방식이, Native memory로 이동했을 뿐이다. 즉, JVM이 직접 통제하던 메모리 영역을 OS의 메모리 관리에 위임한 것이다. 이 지점부터 Java 8 이후의 메모리 문제는 Heap이 아니라 ..

spring 2026. 1. 14. 17:14

운영중 장애 징후 분석: MySQL fsync 최적화를 통한 Commit 지연 해결

11월에 행사를 진행하면서 트래픽 조금 경험한걸 아직도 곱씹어 먹고 있다. 트래픽이 많았다고 말하긴 애매하지만, 운영 환경에서 실제 사용자가 동시에 몰리는 상황을 처음을 제대로 겪은 경험이었다. 그고 항상 성능 테스트를 진행해도 spike 몰리는 상황을 염두해왔지 8시간이나 되는 장시간 트래픽 집중은 그 자체로 신선했다. Hack Playground: 부산대-부경대 해킹캠프 회고11월 8일자로 진행된 부산대-부경대 연합 해킹캠프에서 'Hack-Playground' 서비스 내의 CTF 대회를 시범적으로 도입했다. 서비스 자체는 KOREN망 안에서 호화롭게 실험하고 성능 걱정없이 트래픽 때려박downfa11.tistory.com 대회 기간동안 발생한 슬로우 쿼리를 분석해서 인덱스 설계가 제대로 이뤄졌는지..

mysql 2026. 1. 13. 16:47

가상 쓰레드 도입 전후 DB 병목의 이동 (feat. HikariCP 튜닝 전략)

컨테이너를 동적으로 생성하거나 현황을 조회하는 CTF 문제 관리 기능은 Hack Playground 서비스의 핵심 비즈니스 중 하나다. 이 기능은 Kubernetes API와 빈번하게 통신하며, 성격상 IO bound 작업에 가까워서 자연스럽게 Java 가상 쓰레드 도입을 검토했다. 가상 쓰레드의 개념부터 소개해야 하나 고민했지만 다행히 예전에 공부한 내용이 있다. Java도 한다 경량 쓰레드 (Virtual Thread)봄(Spring)은 왔는가?Java의 위대한 산물인 가상 쓰레드는 분명 JVM 생테계에 엄청난 열풍을 일으켰음에 의심할 여지가 없다.많은 개발자들이 그 패러다임에 발맞춰서 프레임워크를 개선하고 있듯downfa11.tistory.com IO 대기 비용을 줄일 수 있는지 데이터로 확인하..

tech 2026. 1. 12. 22:11

ArgoWorkflows: 대용량 워크플로우 아카이브 조회시 Out of sort memory 기여

원래는 오픈소스 기여한거 일일이 블로그에 포스팅하지 않는다. 성숙도가 높은 오픈소스에 기여하다보니 굵직한 기여도 못했다고 생각하고, 대부분 기술적으로 블로그에 작성할 분량이 나오지 않는다. 그런데 이번 이슈는 좀 달랐다.장애 상황이 명확하게 재현 가능했다.장애 원인이 애플리케이션 수준이 아니라 DB 수준까지 이어졌다.v3.7 업데이트 과정에서 생긴 성능 개선이 운영 환경에서 새로운 장애를 만들어냈다.단순한 버그 수정이라기보단 '최적화가 운영 환경에서 안전한가?'라는 고민을 해볼 수 있었기에 기록할 가치가 있다고 생각했다. Argo Workflows란?Kubernetes 위에서 배치 작업과 파이프라인을 선언적으로 실행, 관리하기 위한 워크플로우 엔진이다. k8s native로 모든 워크플로우를 CRD로..

tech 2026. 1. 12. 03:38

InnoDB Flush 계층에서 본 Direct IO (feat. Zero Copy와의 차이점)

처음에는 MySQL의 디스크 쓰기 작업에 대해서 정리하다가 O_DIRECT 옵션을 보고 이런 생각이 들었다.zero copy랑 비슷한 얘기 아닌가? 둘 다 불필요한 복사를 줄여서 성능을 개선하는건데. 궁금해져서 그 차이가 궁금해져서 좀 더 파고들어봤다. 본 내용은 MySQL 8.0을 기준으로 작성했다. MySQL의 디스크 쓰기(Flush)DB 튜닝시 귀에 피나도록 'disk IO를 최소화해야해'라는 말을 들었을 것이다. Full table scan이 아니라 Index range scan을 그렇게 강조하고 buffer_pool에 가능한 많은 데이터를 둘려는 이유이다. 여기서 말하는 디스크 접근, 즉 메모리에 적재된 데이터를 디스크에 영속적으로 기록하는 행위를 Flush라고 한다. 문제는 그 피나던 말처..

mysql 2026. 1. 9. 21:54

Cursus: BloomFilter를 이용한 컨슈머 벤치마크의 정확성 검사 확장

현재 컨슈머측 벤치마크 측정은 단순하게 전체 TPS와 발행된 메시지 수와 비교해서 유실된 메시지 수만 표시한다.broker-consumer | Total messages consumed : 100000broker-consumer | Actually processed messages : 100000broker-consumer | Duplicate messages filtered : 0broker-consumer | Consume elapsed time : 398.445467msbroker-consumer | Consume Throughput : 250975.37 msg/sbroker-consumer | Processed Throughput ..

tech 2026. 1. 3. 16:57

추가 정보

인기글

  1. -
    -
    Kafka는 고가용성을 어떻게 유지하는지 알아보자

    2024.12.17 14:23

  2. -
    -
    JVM Metaspace가 단순히 이름만 바꾼건 아닐텐데요

    2026.01.14 17:14

  3. -
    -
    오픈소스 입문자를 위한 Kubernetes 지역화: 누락된 문서 탐지 스크립트 구현

    2025.12.22 22:30

  4. -
    Hexagonal Architecture의 테스트코드 작성 (feat. StepVerifier, TestPublisher)

    2025.02.13 17:04

최신글

  1. -
    -
    8억 명의 사용자를 지원하기 위한 OpenAI의 PostgreSQL 확장

    tech

  2. -
    -
    Kubernetes 리소스 최적화: CPU Throttling은 왜 Limits보다 낮은데 발생할까?

    kubernetes

  3. -
    -
    JVM Metaspace가 단순히 이름만 바꾼건 아닐텐데요

    spring

  4. -
    -
    운영중 장애 징후 분석: MySQL fsync 최적화를 통한 Commit 지연 해결

    mysql

페이징

이전
1 2 3 4 ··· 14
다음
TISTORY
성장을 꾸준히 기록하는 공간 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바