코드를 적게 쓰는 것도 책임감이다 — 오픈소스 메인테이너의 이야기
## 코드를 많이 쓰는 게 항상 좋은 걸까? 개발자라면 누구나 한 번쯤 고민해봤을 거예요. 기능을 더 추가하고, 라이브러리를 더 키우고, 더 많은 코드를 작성하는 게 정말 '잘하는' 건지 말이에요. Rust 생태계에서 활발하게 활동하는 오픈소스 ...
공 하나도 못 저글링하면서 세 개를 돌리려 하고 있진 않나요?
## 기본기의 재발견 "Most people can't juggle one ball" — 대부분의 사람들은 공 하나조차 제대로 저글링하지 못한다. LessWrong에 올라온 이 글의 제목이 뜻하는 바가 뭘까요? 저글링을 배울 때, 보통 사람들은 ...
정적 사이트 생성기 Eleventy, 결국 끝을 맞이하다 — 오픈소스 1인 메인테이너의 현실
## 무슨 일이 있었나요? Node.js 기반의 정적 사이트 생성기(SSG) **Eleventy(11ty)**가 사실상 개발 종료를 선언했어요. Eleventy는 2018년부터 개발되어 온 프로젝트로, 심플하면서도 유연한 설계 덕분에 개발자 블로...
PostgreSQL을 메시지 큐로 쓸 때 꼭 알아야 할 것들 — 큐가 병들지 않게 관리하는 법
## RabbitMQ 대신 PostgreSQL? 생각보다 많은 팀이 이렇게 쓰고 있어요 백엔드 개발을 하다 보면 "작업 큐(job queue)"가 필요한 순간이 꼭 와요. 이메일 발송, 이미지 리사이즈, 결제 처리 같은 작업을 바로 처리하지 않고...
테크 뉴스를 읽는 당신,
직접 만들어볼 준비 되셨나요?
17가지 수익 모델 실습 · 144+ 강의 · 자동화 소스코드 제공
PGLite: 브라우저에서 PostgreSQL을 돌린다고요?
## 들어가며 데이터베이스 하면 보통 서버 어딘가에서 돌아가는 무거운 프로그램을 떠올리잖아요. 그런데 PGLite는 PostgreSQL을 WebAssembly로 컴파일해서 브라우저나 Node.js 안에서 바로 실행할 수 있게 만든 프로젝트예요. ...
Let's Encrypt가 '일부러 망가진 웹사이트'를 만드는 이유 — TLS 테스트의 어려움
## 인증서가 잘못됐을 때, 당신의 코드는 제대로 실패하나요? HTTPS를 쓰는 웹사이트에 접속하면 브라우저가 자물쇠 아이콘을 보여주죠. 이건 TLS(Transport Layer Security)라는 프로토콜로 통신이 암호화되어 있다는 뜻인데요,...
LLVM 커뮤니티에서 제안된 JSIR — JavaScript에도 고수준 중간 표현이 필요할까?
## JavaScript 최적화의 새로운 접근법 LLVM 커뮤니티에서 흥미로운 RFC(Request for Comments, 공식 제안서)가 올라왔어요. 바로 **JSIR(JavaScript Intermediate Representation)**...
브라우저 안에서 리눅스를 돌려 옛날 프린터를 살려내는 프로젝트, Printervention
## 집에 굴러다니는 그 프린터, 아직 버리지 마세요 혹시 집이나 사무실 구석에 오래된 프린터가 하나쯤 있지 않나요? 하드웨어는 멀쩡한데, 제조사가 드라이버 지원을 끊어버리는 바람에 최신 운영체제에서 쓸 수 없게 된 그런 프린터요. macOS를 ...
WebRTC를 브라우저 밖으로 꺼내자 — Go로 미디어 서버 만드는 Pion/handoff
## 브라우저 없이 WebRTC를 쓰고 싶을 때 WebRTC라는 기술, 들어보신 분 많으시죠? 브라우저끼리 별도의 서버 없이 영상통화나 화면 공유를 할 수 있게 해주는 기술인데요. 구글 미트, 디스코드 같은 서비스가 이 기술 위에서 돌아가요. 그...
JavaScript Promise, 취소할 수 있을까? — 의외로 가능한 방법들
## Promise는 한번 시작하면 멈출 수 없다? 자바스크립트에서 비동기 작업을 다룰 때 가장 많이 쓰는 게 Promise죠. API 호출, 파일 읽기, 타이머 등 거의 모든 비동기 작업이 Promise로 이루어져요. 그런데 한 가지 불편한 진...
구글의 벡터 양자화 기술, 이제 브라우저에서 바로 돌린다 — TurboQuant-WASM
## 벡터 양자화가 브라우저 안으로 들어왔어요 요즘 AI 모델을 다뤄본 분이라면 '양자화(quantization)'라는 단어를 한 번쯤 들어봤을 거예요. 거대한 모델을 작은 기기에서도 돌릴 수 있게 모델의 숫자 정밀도를 줄이는 기술인데요. 그런데...
루팅 없이 안드로이드에서 리눅스 컨테이너를 돌린다? Podroid 프로젝트
## 안드로이드 폰이 리눅스 서버가 된다 안드로이드 폰에서 리눅스를 돌리고 싶다는 생각, 개발자라면 한 번쯤 해보셨을 거예요. 남는 옛날 폰으로 간단한 서버를 돌린다거나, 외출 중에 리눅스 환경이 급하게 필요할 때라거나요. 그동안에도 Termux...
Excalidraw로 블로그 다이어그램 깔끔하게 관리하는 법
## 기술 블로그 다이어그램, 매번 고민되지 않나요? 기술 블로그를 운영하다 보면 다이어그램이 꼭 필요한 순간이 와요. 아키텍처 구조를 설명하거나, 데이터 흐름을 보여주거나, 시스템 간 관계를 그려야 할 때 말이에요. 그런데 어떤 도구를 쓸지가 ...
파서를 WebAssembly로 컴파일한다고? Ohm의 PEG-to-WASM 컴파일러 이야기
## 파싱 성능의 새로운 가능성 Ohm이라는 도구를 아시나요? JavaScript로 만들어진 파싱 프레임워크인데요, PEG(Parsing Expression Grammar)이라는 문법 정의 방식을 사용해서 프로그래밍 언어나 DSL(Domain-S...
JavaScript를 Erlang 슈퍼비전 트리 안에서 돌린다고? QuickBEAM이 여는 새로운 가능성
## 두 세계의 만남: JavaScript + Erlang/OTP JavaScript와 Erlang, 이 두 언어를 한 문장에 넣으면 뭔가 어색하죠? 하나는 웹 브라우저에서 태어나 세상에서 가장 널리 쓰이는 언어가 됐고, 다른 하나는 통신 장비 ...
Pretext — 터미널에서 텍스트 레이아웃을 제대로 해주는 TypeScript 라이브러리
## 텍스트 레이아웃, 생각보다 어려운 문제예요 터미널이나 텍스트 기반 UI를 만들어본 적 있으신가요? 단순히 `console.log`로 한 줄 찍는 건 쉬운데, 여러 줄의 텍스트를 특정 너비 안에 맞춰서 예쁘게 배치하는 건 은근히 까다로운 문제...
Go 모듈의 go 버전 지시어, 알고 보면 꽤 짜증나는 문제
## 대체 무슨 일이길래 Go 언어로 프로젝트를 하다 보면 `go.mod` 파일에 `go 1.21` 같은 버전이 적혀 있는 걸 보셨을 거예요. 이게 단순히 "이 프로젝트는 Go 1.21로 만들었어요"라는 메모 정도로 생각하기 쉬운데, 사실은 그보다 ...
macOS에서 파일 변경 감지하기 — kqueue의 세계
## 파일이 바뀌었는지, 어떻게 알 수 있을까? 개발하다 보면 "특정 파일이 변경되면 자동으로 뭔가를 실행하고 싶다"는 상황이 꽤 자주 생겨요. 예를 들면 설정 파일이 바뀌면 서버를 다시 시작한다거나, 소스 코드가 수정되면 자동으로 빌드를 돌린다거나...
APK 파일은 사실 ZIP이다 — 단종된 하드웨어를 되살리는 리버스 엔지니어링 이야기
## 우리가 매일 쓰는 APK, 그 정체를 아시나요? 안드로이드 앱을 설치할 때 사용하는 .apk 파일이 있잖아요. 이 파일의 정체가 뭔지 궁금해하신 적 있나요? 사실 APK는 그냥 ZIP 파일이에요. 확장자만 .apk로 바꿔놓은 것뿐이고, 실제...
PyPI 패키지 'telnyx'가 탈취당했습니다 — 또 다시 반복되는 공급망 공격
## 또 터졌습니다, PyPI 공급망 공격 파이썬 패키지를 설치할 때 `pip install` 한 줄이면 되니까 정말 편하죠. 그런데 이 편리함 뒤에는 언제나 "내가 설치하는 이 패키지가 정말 안전한 걸까?"라는 불안이 있어요. 이번에 그 불안이...