Trawling

개발·오픈소스 · 최신기사

개발 도구와 언어, 웹 기술과 오픈소스 프로젝트의 변화를 다룹니다.

swap이 유발한 40ms Go GC stop-the-world pause — 프로덕션에서 swap을 켜기 전에 알아둘 것

발행

메모리 스파이크 대응을 위해 프로덕션에서 swap을 사용하던 저자가 Go 런타임의 GC 메타데이터 페이지가 swap-out되면서 stop-the-world pause가 중앙값 51µs에서 최악 40ms까지 폭증하는 현상을 실측했습니다. bpf 스크립트로 확인한 결과 40ms 중 39ms가 228건의 major page fault에서 발생했으며, 이는 GC가 heap 밖의 bookkeeping 영역을 읽는 동안 world가 멈춘 상태에서 swap-in을 기다렸기 때문입니다.

.NET 11 성능 개선 총정리 — 매년 이어지는 JIT·런타임 최적화 리포트

발행

Microsoft가 공개한 .NET 11의 연례 성능 개선 보고서로, JIT 컴파일러의 탈추상화(deabstraction)·가드드 디버추얼라이제이션(GDV)·이스케이프 분석(escape analysis) 등 수백 건의 최적화를 BenchmarkDotNet 마이크로 벤치마크와 함께 소개합니다. 대부분의 개선은 애플리케이션 코드 수정 없이 런타임 업그레이드만으로 이점을 얻을 수 있다는 점이 핵심입니다.

GNU coreutils 9.12 안정 버전 릴리스 — env 환경 완전 복원, 터미널 출력 안전성 강화

발행

GNU coreutils 9.12 안정 버전이 9.11 이후 21주 만에 공개되었습니다. env의 --env0-from 옵션으로 환경 변수의 완전한 저장·복원이 가능해졌고, 터미널 출력 시 셸 이스케이프 인용이 기본 적용되는 등 안전성이 강화되었습니다. 지난 버전에서 도입된 tee의 무한 루프 회귀를 포함해 다수의 버그가 수정되었습니다.

Wayback Machine 접근 문제에 대한 업데이트 — 대규모 자동화 트래픽과 차단 조치의 배경

발행

Internet Archive가 Wayback Machine을 겨냥한 대규모 자동화 트래픽에 대응해 차단 조치를 도입했고, 최근에는 요청이 차단될 때 표시되는 429 오류 메시지를 개선했습니다. 이 보호 장치가 실제 사용자까지 오탐하는 사례가 발생해, Internet Archive는 사과와 함께 오탐 신고 절차를 안내했습니다.

GCC는 어떻게 불필요한 정수 나눗셈을 제거하는가 — 매직 넘버와 역수 곱셈의 원리

발행

GCC가 상수 제수로 나누는 코드를 만나면 div 명령 대신 '매직 넘버' 곱셈과 비교 연산으로 치환하는 최적화를 다룬 글입니다. 저자는 Number Field Sieve 구현 과정에서 이 현상을 관찰하고, Granlund-Montgomery 계열의 round-up·round-down 알고리즘으로 매직 넘버를 직접 도출하는 C 코드를 제시합니다.

Forth를 모르고 Forth를 만든 이야기 — Lua C API 위에서 MoonForth 구현하기

발행

Forth 구현 경험이 없던 개발자가 Lua의 C API 위에서 C로 작성한 Forth 구현체 MoonForth의 개발 과정을 회고한 글입니다. JonesForth의 소스를 참조하되 어셈블리 대신 Lua 스택을 직접 조작하는 C 함수로 코어 워드를 구성했고, 함수 포인터 테이블로 컴파일을 구현해 일주일 만에 조건문과 루프까지 갖춘 실사용 가능한 Forth를 완성했습니다.

Cloudflare가 Rust 메모리 레이아웃 최적화로 DNS 캐시에서 100TB를 줄인 방법 분석

발행

Cloudflare의 Rust 기반 DNS 리졸버 Big Pineapple이 캐시 엔트리의 메모리 레이아웃을 최적화해 엔트리당 메모리를 56% 줄이고, 전체 플릿에서 약 100TB의 메모리를 절감한 사례를 분석한 글입니다. Vec·String을 Box 슬라이스로 교체하고, enum의 대형 variant를 박싱하며, 레코드를 raw bytes로 저장하는 하이브리드 방식이 핵심입니다.

20달러짜리 4G 무선 핫스팟을 문자 메시지 전용 기기로 개조하기

발행

저자는 AliExpress에서 20달러에 구매한 MF800 4G 핫스팟에 OpenStick 기반 Linux를 올리고, Clicks 키보드와 Sharp Memory LCD, 자체 설계한 PCB를 결합해 문자 전용 '덤폰'을 만들었습니다. 기판을 물리적으로 절단하고, Android 디바이스 트리를 추출해 SPI 디스플레이를 구동하며, DRM 드라이버에 디더링까지 추가한 과정이 상세히 기록되어 있습니다.

Java 27 정식 출시 — G1이 모든 환경의 기본 GC로

발행

OpenJDK가 Java 27의 레퍼런스 구현인 JDK 27을 GA(Generally Available)로 발표했습니다. G1 가비지 컬렉터의 전 환경 기본화, Compact Object Headers 기본 활성화, TLS 1.3용 포스트퀀텀 하이브리드 키 교환 등 9개의 JEP가 포함된 릴리스입니다.

MinIO의 대안 찾기 — 싱글 노드 로컬 S3 대체제 6종 비교

발행

MinIO가 사실상 방치되면서 로컬 데모와 CI 파이프라인에서 S3를 에뮬레이션하던 개발자들이 대안을 찾게 되었습니다. 저자는 Docker Compose 기반 DuckDB+Iceberg 스택을 그대로 유지한 채 S3Proxy, RustFS, SeaweedFS, Zenko CloudServer, Garage, Apache Ozone을 직접 교체해 보며 설정 난이도와 라이선스, 프로젝트 지속 가능성을 비교했습니다.

GNU Coreutils — 거절된 기능 요청 목록

발행

GNU coreutils 프로젝트가 지금까지 받은 기능 제안 중 채택되지 않은 요청들과 그 사유를 정리한 문서입니다. '기존 도구 조합으로 충분하다', '복잡도 대비 효용이 낮다'는 유닉스 철학에 기반한 거절 기준이 드러나며, 유틸리티 설계와 유지보수 관점에서 좋은 참고 자료입니다.

Nix 스토어는 함수 세 개면 충분하다 — GitHub Pages부터 npm까지 바이너리 캐시 만들기

발행

Nix 바이너리 캐시가 되기 위해 필요한 것은 nix-cache-info, narinfo, 압축 아카이브를 내려주는 GET 요청 세 개뿐이라는 글입니다. 서명이 전송 경로가 아니라 콘텐츠 해시를 검증하기 때문에 GitHub Pages, DNS, npm 같은 임의의 정적 매체도 substituter로 쓸 수 있음을 보여주며, 실제로 npm 레지스트리에 Nix 클로저를 발행해 실행까지 시연합니다.

macOS에서 Behringer FCB1010 MIDI 페달보드로 매크로 실행하기 — fcbnerd

발행

MIDI 풋 컨트롤러를 Mac의 보조 키보드처럼 활용할 수 있게 해주는 오픈소스 CLI 도구 fcbnerd가 공개되었습니다. MIDI 메시지를 셸 명령에 바인딩하거나 JSON 스트림으로보내 Hammerspoon 등 다른 도구가 처리하게 할 수 있으며, 테스트 실행·CI 확인·마이크 음소거 같은 개발자 매크로에 활용할 수 있습니다.

스핀락 최적화 — 가장 단순한 락에서 피코초까지 쥐어짜기

발행

atomic exchange 루프로 만든 순진한 스핀락을 acquire/release 메모리 순서, test-and-test-and-set, 지수 백오프 순으로 개선해 4스레드 기준 246ns에서 43.0ns로 5.7배 빠르게 하고 에너지 소비도 64.92J에서 11.92J로 5.4배 줄이는 단계별 최적화 과정을 다룹니다. 캐시 라인 소유권 경쟁과 분기 예측 실패가 성능 저하의 원인임을 perf 수치로 보여주며, 저자는 std::mutex가 여전히 올바른 기본값이라고 강조합니다.

루프를 자동 벡터화시키기 — Rust에서 부동소수점 합산과 SIMD 최적화

발행

Rust로 작성한 단순한 내적(dot product) 루프가 자동 벡터화되지 않는 이유는 IEEE 754 부동소수점 덧셈이 결합법칙을 만족하지 않아 컴파일러가 연산 순서를 바꿀 수 없기 때문입니다. 저자는 수동 청킹과 Rust 1.98에서 안정화된 algebraic 연산자로 벡터화를 유도하는 과정을 어셈블리와 함께 보여주며, 컴파일러가 생성한 코드가 naive한 intrinsics 구현보다 빠르다는 결과를 확인합니다.

Linux From Scratch — 소스 코드만으로 나만의 Linux 시스템을 처음부터 빌드하기

발행

Linux From Scratch(LFS)는 소스 코드만으로 자신만의 Linux 시스템을 단계별로 구축하는 방법을 안내하는 문서 프로젝트입니다. 최근 LFS 13.1 릴리스가 발표되며 다시 주목받았고, 배포판이 자동으로 처리해주는 툴체인·의존성·부팅 구성을 직접 다뤄볼 수 있는 대표적인 학습 경로로 오래 평가받아 왔습니다.

Cloudflare, 오리진 TLS 핸드셰이크 재시도율을 52%에서 3.7%로 — 자동 키 교환(AKE) 도입

발행

Cloudflare가 오리진 서버와의 TLS 1.3 핸드셰이크에서 키 합의 알고리즘을 '추측' 대신 '측정'으로 결정하는 Automatic Key Exchange를 공개했습니다. 각 오리진을 능동 스캔해 지원 알고리즘을 파악한 뒤 첫 ClientHello부터 최적 키쉐어를 보내, HelloRetryRequest 비율을 52%에서 3.7%로 낮추고 p90 지연을 150ms 이상 줄였습니다. 동시에 수십만 도메인이 설정 없이 post-quantum 오리진 연결을 얻게 됐습니다.

Ubuntu 26.10, Rust 기반 coreutils 전환 완료 — 보류됐던 cp·mv·rm까지 마이그레이션

발행

Ubuntu 26.10 'Stonking Stingray'가 ls, cat, chmod, du 등 GNU coreutils를 Rust로 재작성한 uutils로 전면 교체하며 Rust 전환을 완료합니다. 보안 문제로 보류됐던 cp, mv, rm의 TOCTOU 취약점이 업스트림에서 수정되면서 마지막 퍼즐이 맞춰졌지만, 커뮤니티에서는 rm의 세그멘테이션 폴트 재현 사례를 들어 성급한 전환이라는 비판도 나옵니다.

Homebrew 7.0.0 — 더 빠른 설치·업그레이드, 강화된 샌드박싱, 공식 macOS 앱, 내장 취약점 점검, 그리고 Intel Mac의 Tier 3 격하

발행

Homebrew가 7.0.0을 출시하며 설치 속도 향상, 샌드박싱 강화, 공식 네이티브 macOS 앱 BrewUI, 내장 취약점 검사 brew vulns를 선보였습니다. 동시에 macOS 10.15 지원을 종료하고 Intel Mac을 Tier 3로 격하해 2027년 9월 지원 중단을 예고했습니다. 자원봉사자 기반 프로젝트로서 Apple과 GitHub의 Intel 철수를 따라가는 한계를 명시적으로 밝혔습니다.