본문으로 건너뛰기
피드

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

Go에서 Rust로 옮길 때 진짜로 바뀌는 것들

이 글은 Go 백엔드 서비스를 Rust로 옮길 때 속도보다 컴파일 타임 보장, 런타임 트레이드오프, 개발자 경험이 더 중요하다고 설명한다. nil 패닉, 데이터 레이스, 에러 처리, 제네릭, 비동기 모델, 마이그레이션 전략까지 실무 관점에서 Go와 Rust를 길게 비교한다.

backend

Python 3.15에서 헤드라인은 못 탔지만 꽤 쓸만한 기능들

Python 3.15에는 lazy imports나 Tachyon profiler 같은 큰 기능 말고도 실무에서 바로 체감될 만한 작은 개선들이 들어가. TaskGroup 취소, 컨텍스트 매니저 데코레이터 개선, 스레드 안전 이터레이터처럼 평소 애매하게 불편했던 지점들이 꽤 깔끔해졌어.

backend

심평원, DUR부터 의료영상 심사까지 클라우드로 갈아엎는다

심평원이 정보시스템 클라우드 전환과 함께 병·의원 업무에 직접 닿는 DUR, 의료영상 AI 심사, 요양급여내역 조회 시스템을 고도화한다. 핵심은 설치형 프로그램 중심이던 연계를 웹과 API 기반으로 넓히고, 진료·청구 과정에서 실시간 확인과 자동 판독을 강화하는 쪽이다.

backend

윈도우 에러 코드 7번 ‘ERROR_ARENA_TRASHED’는 어디서 왔을까

ERROR_ARENA_TRASHED는 Win32에서 실제로 쓰이는 현대적 에러라기보다 MS-DOS 시절 메모리 관리 구조에서 넘어온 잔재야. MS-DOS가 메모리 블록 앞의 arena 시그니처를 훑다가 예상한 값이 아니면 ‘arena가 망가졌다’고 보고 이 에러를 냈다는 이야기야.

backend

C/C++ 컴파일러의 느슨한 메모리 동시성 버그를 자동으로 잡는 박사논문

C와 C++ 컴파일러에서 relaxed memory 동시성 버그를 찾는 자동 테스트 프레임워크를 다룬 박사논문이 공개됐어. Téléchat, Atomic-mixer 같은 도구로 소스 수준 동작과 컴파일된 프로그램 동작을 비교하고, LLVM과 GCC 툴체인에서 실제 버그를 찾아낸 내용이 핵심이야.