본문으로 건너뛰기
피드

Python 3.14 브레이킹 체인지를 둘러싼 HN 격론 — "왜 또 깨뜨리냐" vs "원래 이래야 했다"

backend 약 4분
vote
0
댓글
북마크

Python 3.14의 multiprocessing 기본값 변경(fork→forkserver)을 둘러싼 HN 토론. 2→3 전환의 트라우마, venv/pip 논쟁, pyproject.toml vs Maven 비교까지 파이썬 생태계의 고질적 갈등이 총출동.

  • 1

    multiprocessing 기본 시작 메서드 fork→forkserver 변경

  • 2

    fork의 1% 랜덤 크래시 문제가 2020년부터 논의됨

  • 3

    Python 2→3 전환 재평가: UnicodeDecodeError 해결만으로도 충분한 가치

  • 4

    venv 불만의 99%는 pip 탓

  • 5

    PyPI 톱10 Requests도 빌드 설정이 엉망인 현실

불이 붙은 주제: multiprocessing 기본값 변경

  • Python 3.14에서 multiprocessing의 기본 시작 메서드가 POSIX에서 fork에서 forkserver로 변경
  • fork는 99%는 되다가 1% 확률로 "미스터리하게 깨지는" 문제가 있었음 — 모듈 레벨 전역변수 복사, 로깅 꼬임, 스레드가 fork를 못 살아남는 등. 이 논의가 2020년부터 있었음
  • 반발하는 쪽은 "30년 된 C/bash 코드는 아직도 돌아가는데 파이썬은 왜 계속 깨뜨리냐"는 입장
  • 옹호하는 쪽은 "기본값은 대다수 사용자가 원하는 것을 반영해야 하고, 그게 바뀌면 기본값도 바뀌는 게 맞다. multiprocessing.set_start_method('fork') 한 줄이면 되는 거 아니냐"는 반론

2→3 전환의 상처가 아직도

  • "Python 2→3 대전환 때 더 많은 문제를 고쳤어야 했다"는 의견에 대해, 반대편은 "오히려 2.x를 다른 사람에게 맡기고 완전히 갈라섰어야 했다. 결국 2.7을 만들고, 2.8 안 만들겠다고 구걸하고, 연장 지원까지 해줘야 했다"고 함
  • Python 2→3 전환이 대규모 재작성이 필요했다는 통념에 대해 "마이너한 수정이었고 CPython이 제공한 도구로 자동화 가능했다"면서, UnicodeDecodeError가 인코딩 시 발생하는 미친 상황이 사라진 것만으로도 "논쟁의 여지 없이, 압도적으로 더 나은 파이썬이 됐다"고 반박

패키징 생태계에 대한 뼈 있는 지적

  • venv에 대한 불만의 99%는 pip 탓이지 venv 탓이 아니라는 주장. venv는 그냥 패키지 놓는 장소 + Python이 그 장소를 인식하는 스킴일 뿐임
  • pyproject.toml이 늦게 나왔다는 비판에 대해, Java의 Maven과 비교하는 건 불공평함 — Maven은 Java만 걱정하면 되지만 Python 패키징은 C, C++, FORTRAN, Rust까지 다뤄야 함
  • 아직도 Flit으로 충분한 순수 Python 프로젝트가 레거시 setup.py 빌드를 쓰고 있는 현실. PyPI 톱10인 Requests조차 pyproject.toml이 있으면서도 빌드 설정은 setup.cfg에 넣어두고, 올해 소스 빌드가 깨진 적이 있음
  • "사람들은 deprecation 경고를 안 읽고, 셋업을 깨뜨려야 비로소 움직인다. 그러면 움직이는 대신 불평하고 원래대로 되돌려 달라고 한다"는 Setuptools 메인테이너의 한탄이 와닿음

ℹ️참고

> "C/bash는 30년간 안 깨지는데?"에 대한 반박이 인상적임: "그건 거의 자기 완결적(self-contained)이니까. 파이썬 표준 라이브러리의 비핵심 부분(sys, os 등)은 서드파티처럼 취급하는 게 정신건강에 이롭다"는 거임.

하위 호환성 vs 발전의 영원한 갈등을 파이썬 생태계에서 보여주는 전형적 토론. 기본값 변경이 왜 가장 논란이 되는 종류의 변경인지 잘 드러남.

댓글

댓글

댓글을 불러오는 중...

backend

클릭하우스가 PgBouncer 처리량을 4배로 끌어올린 방법

ClickHouse Managed Postgres 팀은 단일 스레드인 PgBouncer를 여러 프로세스로 띄우고 `so_reuseport`와 피어링(peering)을 조합해 16 vCPU 머신을 제대로 쓰게 만들었다. 동일한 AWS 환경에서 단일 프로세스는 약 8.7만 TPS 근처에서 막혔지만, 16개 프로세스 구성은 약 33.6만 TPS까지 올라갔다.

backend

SQLite 쓸 거면 STRICT 테이블을 기본값으로 보자는 주장

SQLite의 STRICT 테이블은 INTEGER 컬럼에 문자열이 들어가는 식의 타입 실수를 막아주는 기능이다. 글쓴이는 SQLite 특유의 유연한 타입 시스템보다, 실수는 빨리 터뜨리는 쪽이 실무에서 낫다고 주장한다. 다만 기존 테이블을 바로 STRICT로 바꾸기 어렵고, SQLite 3.37.0 이상에서만 쓸 수 있다는 제약도 있다.

backend

왜 아직도 Lisp를 배워볼 만한가

Lisp는 괄호가 많은 이상한 언어처럼 보이지만, 핵심은 문법이 아니라 언어 자체를 확장할 수 있다는 점에 있음. 매크로, 코드-데이터 동일성, REPL 중심 개발이 합쳐지면 프로그램을 '작성'한다기보다 살아 있는 시스템을 계속 진화시키는 방식으로 개발하게 됨.

backend

EDB 포스트그레스 AI, 포레스터 멀티모델 데이터 플랫폼 리더 선정

EDB의 AI 데이터 플랫폼 EDB 포스트그레스 AI가 2026년 2분기 포레스터 웨이브 멀티모델 데이터 플랫폼 보고서에서 리더로 선정됐음. 트랜잭션, 분석, AI 워크로드를 하나의 플랫폼에서 다루는 흐름이 강해지는 가운데, EDB는 전략과 현재 제공 기능 모두에서 높은 평가를 받았다고 밝힘.

backend

Bun, Zig에서 Rust로 갈아탔다: 11일짜리 초대형 런타임 포팅 실험

Bun 팀이 53만 줄이 넘는 Zig 코드베이스를 Rust로 기계적으로 포팅했고, Bun v1.4.0부터 Rust 기반으로 전환될 예정임. 핵심 이유는 성능보다 안정성이었고, use-after-free, double-free, 메모리 누수 같은 문제를 컴파일러와 타입 시스템으로 더 빨리 잡기 위해서였음. Claude Code 워크플로 64개를 병렬로 돌려 11일 만에 전 플랫폼 테스트 통과까지 밀어붙인 사례라, LLM 기반 대규모 코드 마이그레이션의 꽤 강한 신호탄임.