블로그
GPU·LLM·MLOps·쿠버네티스, 그리고 마음가짐에 관한 글 · 3704 편
#2026-03 762#culture 283#deep-dive 275#kubernetes 262#career 233#ai 223#llm 217#devops 198#2026-04 158#security 149#observability 118#database 113#communication 108#history 107#architecture 101#productivity 98#performance 93#linux 90#networking 89#finance 87#economy 84#mindset 80#psychology 79#ai-papers 78#food 78#it 78#travel 78#japanese 76#deep-learning 75#english 74#gpu 74#ai-agent 69#business-travel 69#postgresql 67#cs-fundamentals 63#rag 63#systems 63#python 56#learning 54#self-improvement 53
PD 분리는 처리량을 늘리지 않는다 — 프리필/디코드 분리가 실제로 사는 것
프리필과 디코드를 다른 GPU로 쪼개는 PD 분리는 2026년 vLLM·SGLang·TensorRT-LLM에 모두 들어온 설계지만, 어디를 봐도 "2배에서 7배"라는 숫자만 돌아다닙니다. 그런데 vLLM 공식 문서는 같은 기능을 두고 "분리 프리필은 처리량을 개선하지 않는다"고 대문자로 못 박아 두었습니다. 둘 다 맞습니다 — 그 벤더 숫자들은 전부 처리량이 아니라 goodput(SLO를 지
2026-07-16 · 30 분 읽기 #llm#ai#inference#kv-cache#vllmAWS Lambda MicroVMs — 에이전트가 짠 코드를 VM 격리로 실행한다는 것, 그리고 스냅샷이 만드는 새 문제
AWS가 2026년 6월 22일 Lambda MicroVMs를 출시했습니다. Firecracker 마이크로 VM을 서비스로 파는 물건이고, 노린 시장은 명확합니다 — 사용자나 AI가 생성한 코드를 테넌트별로 격리해 실행하는 일. 컨테이너의 공유 커널 문제를 VM 경계로 치우고, 부팅 대신 미리 만들어 둔 Firecracker 스냅샷에서 되살아나 시작 지연을 없앱니다. 그런데 바로 그 스냅샷이
2026-07-16 · 30 분 읽기 #security#firecracker#microvm#aws-lambda#sandboxingOpenTofu 1.12의 동적 prevent_destroy — lifecycle의 정적 제약이 풀린 자리와 그 대가
Terraform의 lifecycle 블록은 설계상 리터럴 값만 받습니다. 의존성 그래프를 만드는 단계에서 처리되기 때문에 변수를 평가할 시점이 아직 아니라는 것이 HashiCorp 문서의 설명이고, "변수를 쓰게 해 달라"는 요청은 2016년부터 있었습니다. OpenTofu 1.12(2026년 5월 14일)는 preventdestroy의 평가를 설정 로더에서 언어 런타임으로 옮겨 이 제약을
2026-07-16 · 22 분 읽기 #opentofu#terraform#iac#devops#state-managementLoRA rank를 바꾸면 학습률도 바꿔야 하나 — μA(2026)가 가른 두 레짐, 그리고 그 측정의 한계
LoRA에서 rank를 바꾸면 최적 학습률을 다시 찾아야 한다는 통념과, "1/r 스케일링을 쓰면 학습률은 rank와 무관하다"는 통념이 실무에서 동시에 돌아다닙니다. 2026년 2월 arXiv에 올라온 μA(Maximal-Update Adaptation) 논문은 이 둘이 모두 맞다고 말합니다 — 단, 당신이 어떤 α 규약과 어떤 초기화를 쓰느냐에 따라. 이 글은 μA가 유도한 두 레짐(η가
2026-07-16 · 31 분 읽기 #llm#lora#fine-tuning#peft#trainingParquet 2.13.0의 nan_count와 IEEE 754 total order — float 통계가 3년 3개월 만에 고쳐진 이야기
Parquet의 min/max 통계는 쿼리 엔진이 데이터를 건너뛰게 해 주는 장치입니다. 그런데 부동소수점 컬럼에서는 이 장치가 10년 넘게 미묘하게 고장 나 있었습니다 — NaN은 어떤 비교에서도 false를 내므로 통계에서 배제되는데, 그러면 NaN이 든 페이지가 max보다 큰 값을 찾는 쿼리에서 통째로 스킵될 수 있습니다. 성능 문제가 아니라 결과가 틀리는 문제입니다. 2026년 6월
2026-07-16 · 30 분 읽기 #data-engineering#parquet#columnar-storage#apache-arrowJDK 26의 final 필드 변경 경고 — JEP 500이 실제로 바꾼 것, 그리고 지금 확인해 둘 것
JDK 26(2026년 3월 17일 GA)은 JEP 500 "Prepare to Make Final Mean Final"을 통해, 딥 리플렉션으로 final 필드를 재할당하는 코드에 런타임 경고를 띄우기 시작했습니다. JDK 5 이후로 setAccessible(true) 다음의 Field.set()은 final 필드를 마음대로 바꿀 수 있었고, Gson 같은 역직렬화 라이브러리와 필드 주입
2026-07-16 · 30 분 읽기 #java#jvm#reflection#serialization#migrationNix 2.35가 플레이크 소스를 store에 덜 복사한다 — 6년 8개월 걸린 이슈, 그리고 업스트림이 lazy trees 대신 고른 길
2026년 7월 13일 태그된 Nix 2.35.0의 첫 번째 하이라이트는 "Sources are copied to the store more lazily"입니다. 이 한 줄이 닫은 이슈 3121은 2019년 10월 7일 Eelco Dolstra 본인이 열었고, 2026년 6월 9일에 닫혔습니다 — 2,437일. 흥미로운 건 정작 머지된 물건이 Dolstra의 lazy trees가 아니라는 점
2026-07-16 · 25 분 읽기 #nix#reproducible-builds#build-systems#developer-experience#open-sourceKotlin Swift export가 Alpha가 됐다 — Objective-C 다리를 걷어내는 중이지만, 아직 건너지는 마십시오
Kotlin Multiplatform이 iOS에서 치러 온 가장 큰 세금은 Objective-C 다리였습니다. Kotlin 코드가 Swift로 넘어가려면 반드시 Objective-C 헤더를 거쳐야 했고, 그 과정에서 Int?는 KotlinInt로 박싱되고, 제네릭은 클래스에만 남고, suspend 함수는 컴플리션 핸들러가 됐습니다. Swift export는 그 중간 다리를 없애고 Kotlin
2026-07-16 · 30 분 읽기 #kotlin#kotlin-multiplatform#swift#ios#compilerMCP가 세션을 걷어낸다 — 2026-07-28 리비전의 스테이트리스 코어 읽기
MCP 사양의 다음 리비전 2026-07-28은 출시 이후 가장 큰 변경입니다. 핵심은 프로토콜 계층에서 상태를 걷어내는 것 — initialize 핸드셰이크와 Mcp-Session-Id 세션이 사라지고, 모든 요청이 meta에 프로토콜 버전과 클라이언트 능력을 실어 스스로를 설명합니다. 그 대가로 서버가 되묻는 방식이 MRTR(Multi Round-Trip Requests)로 뒤집히고, S
2026-07-16 · 31 분 읽기 #mcp#ai#protocol#agents#integrationGo 1.26의 goroutineleak 프로파일 — GC의 마킹으로 고루틴 누수를 잡는다 ♪ 들을 수 있어요
Go 1.26(2026년 2월 10일)이 runtime/pprof에 goroutineleak 프로파일을 실험 기능으로 추가했습니다. 아이디어는 GC의 마킹 단계를 재활용하는 것입니다 — 실행 가능한 고루틴만 루트로 삼아 마킹한 뒤, 어떤 고루틴도 도달할 수 없는 동시성 프리미티브에 블록된 고루틴을 누수로 보고합니다. 메모리 도달 가능성이 고루틴 생존성의 건전한 과대근사라는 점이 핵심이고, 그
2026-07-16 · 32 분 읽기 #go#goroutine#garbage-collection#profiling#debuggingCXL 메모리 티어링, 커널은 어디까지 왔나 — DAMON이 머지한 것과 숫자가 재지 않은 것 ♪ 들을 수 있어요
CXL 하드웨어가 서버에 꽂혀 있어도 뜨거운 페이지와 식은 페이지를 실제로 옮기는 건 커널입니다. 2026년 7월 현재 리눅스 mainline에는 DAMON/DAMOS 기반 티어링 부품이 6.11부터 7.2-rc1까지 나눠 들어와 있지만, 정작 "그냥 켜면 되는" 티어링 커널 모듈은 없고 CONFIGDAMON은 Linus가 기본값 활성화를 되돌린 뒤로 여전히 꺼져 있습니다. 이 글은 어떤 코
2026-07-16 · 34 분 읽기 #hardware#cxl#memory#linux-kernel#performanceInfluxDB 3 Core의 72시간 제한은 사실 432개 파일 제한이다 — Parquet 재작성이 남긴 청구서 ♪ 들을 수 있어요
InfluxDB 3는 엔진 전체를 Rust로 다시 쓰고 저장 계층을 Apache Arrow와 Parquet 위에 올렸습니다. 흔히 "Core는 72시간까지만 조회된다"고 알려져 있지만 소스를 읽어 보면 그런 코드는 없습니다. 실제로 존재하는 것은 쿼리 하나가 스캔할 수 있는 Parquet 파일 개수 제한 432개이고, 72시간은 기본 gen1 블록 10분을 곱해서 나온 파생값이자 최선의 경우
2026-07-16 · 34 분 읽기 #database#influxdb#time-series#parquet#storage-engineKubernetes v1.36의 Workload/PodGroup API — 갱 스케줄링이 kube-scheduler 안으로 들어오는 중 ♪ 들을 수 있어요
AI 학습·배치 워크로드의 갱 스케줄링은 지금까지 Volcano나 Kueue 같은 외부 스케줄러의 몫이었지만, Kubernetes가 이 기능을 코어로 가져오기 시작했습니다. v1.35가 Workload API와 첫 갱 스케줄링 구현을 알파로 내놨고, 2026년 4월 22일 나온 v1.36은 구조를 갈아엎어 Workload를 정적 템플릿으로, 새 PodGroup을 런타임 객체로 분리하고 그룹
2026-07-16 · 34 분 읽기 #kubernetes#scheduling#gang-scheduling#distributed-training#draeBPF Verifier는 멈춘 곳만 알려준다 — 거부 235건을 재현해 측정한 진단 격차 ♪ 들을 수 있어요
eBPF를 써 본 사람이라면 누구나 겪는 일이 있습니다. Verifier가 프로그램을 거부하는데, 에러 메시지는 아무 잘못도 없어 보이는 줄을 가리킵니다. 2026년 7월에 나온 논문 하나가 이 답답함을 처음으로 수치화했습니다. 저자들은 Stack Overflow, GitHub 이슈, 수정 커밋, 커널 셀프테스트에서 후보 936건을 모아 커널 6.15.11 + clang 18이라는 고정 툴체
2026-07-16 · 33 분 읽기 #ebpf#linux#kernel#debugging#developer-experienceKafka Diskless Topics(KIP-1150) — 크로스 AZ 비용과 맞바꾸는 지연 시간, 그리고 아직 배송되지 않은 기능 ♪ 들을 수 있어요
2026년 3월 2일, Apache Kafka 커뮤니티가 KIP-1150 Diskless Topics를 승인했습니다. 브로커 디스크 대신 오브젝트 스토리지를 데이터의 원본으로 삼아, 하이퍼스케일러에서 Kafka 비용의 큰 축인 크로스 AZ 복제 트래픽을 없애겠다는 제안입니다. 다만 승인된 것은 방향이지 구현이 아니고 — KIP 본문이 "이 KIP는 승인되더라도 코드 변경을 요구하지 않는다"고
2026-07-16 · 32 분 읽기 #kafka#streaming#distributed-systems#cloud-nativeFerrocene의 인증된 core — 컴파일러는 ASIL D인데 라이브러리는 왜 ASIL B에서 멈추나 ♪ 들을 수 있어요
"ASIL D 인증받은 Rust 컴파일러"라는 문장은 사실이지만, 거기서 흔히 유추하는 결론은 사실이 아닙니다. Ferrocene은 컴파일러를 ISO 26262 ASIL D / TCL 3 도구로 자격심사받았고, 이건 "이 도구를 쓰면서 ASIL D 소프트웨어를 개발해도 된다"는 뜻이지 "결과물이 ASIL D"라는 뜻이 아닙니다. 정작 당신 코드가 매 줄 호출하는 core 라이브러리는 별개의
2026-07-16 · 44 분 읽기 #embedded#rust#ferrocene#safety#systemsambient로 옮기면 EnvoyFilter는 조용히 무시된다 — Istio 1.30 TrafficExtension이 메운 구멍과 남은 구멍
ambient 모드 이전을 막는 진짜 장애물은 리소스가 아니라 확장성입니다. Istio 공식 마이그레이션 문서는 EnvoyFilter가 waypoint에서 지원되지 않으며 이전 후 "조용히 무시된다"고, 대안이 없으면 "마이그레이션 블로커"라고 직접 적어 두었습니다. 2026년 5월 18일 나온 Istio 1.30은 이 구멍을 겨냥해 TrafficExtension API를 냈습니다 — Was
2026-07-16 · 26 분 읽기 #kubernetes#istio#service-mesh#envoy#ambient-meshElixir 1.20의 점진 타입 시스템 — 어노테이션 없이 "검증된 버그"를 찾는다는 것의 실제
2026년 6월 3일 나온 Elixir v1.20은 2022년에 시작한 집합론적 타입 시스템의 첫 번째 마일스톤을 끝냈습니다. 이제 모든 Elixir 프로그램이 타입 어노테이션 한 줄 없이 점진적으로 타입 체크되고, 컴파일러가 가드·함수 본문·절 사이에서 타입을 추론해 "실행되면 반드시 런타임에 터지는" 위반과 죽은 코드를 찾아냅니다. 핵심은 dynamic() 타입인데, 다른 언어의 any(
2026-07-16 · 31 분 읽기 #elixir#type-system#beam#compiler#static-analysis.NET 11 runtime-async — async 상태 머신을 컴파일러에서 런타임으로 옮기는 중간 보고 ♪ 들을 수 있어요
C의 async/await는 2012년부터 줄곧 컴파일러 기능이었습니다. Roslyn이 메서드 본문을 상태 머신 클래스로 재작성하고, 런타임은 그게 async인지도 모른 채 실행했죠. .NET 11의 runtime-async는 그 재작성을 런타임 안으로 옮깁니다 — 메서드에 MethodImplOptions.Async 플래그가 붙고, 중단과 재개는 JIT과 VM이 직접 처리합니다. 눈에 보이는
2026-07-16 · 33 분 읽기 #dotnet#csharp#async#jit#performance결정론적 시뮬레이션 테스트가 찾은 버그 — KAFKA-19880, 그리고 "버그 0건"을 읽는 법 ♪ 들을 수 있어요
결정론적 시뮬레이션 테스트(DST)는 클럭, 스레드 인터리빙, 난수처럼 비결정성이 흘러 들어오는 출처를 시뮬레이터 안에 가두어, 재현이 안 되던 heisenbug를 시드 하나로 다시 불러올 수 있게 만드는 기법입니다. 2026년 3월 Aiven은 Kafka의 Diskless Topics 구현체를 Antithesis에 넣고 약 2,200 논리 시간을 돌렸고, 결과는 버그 0건이었습니다. 정작
2026-07-16 · 32 분 읽기 #testing#deterministic-simulation-testing#distributed-systems#kafka#antithesis