2025-04-07 주간 URL 모음
- Async, Sync, in Between
- 요약
- **함수 색칠 문제(function coloring problem)**는 프로그래밍에서 함수를 "동기식"(블로킹) 및 "비동기식"(논블로킹) 카테고리로 구분하는 것을 의미하며, 이러한 유형을 혼합하면 코드 구조에 복잡성이 발생합니다.
- JavaScript에서 비동기 함수는 동기 및 비동기 함수를 모두 호출할 수 있지만, 동기 함수는 자신이 비동기가 되지 않고는 비동기 함수를 직접 호출할 수 없어 코드베이스 전체에 "비동기 전파(async inflection)" 효과가 발생합니다.
- 색칠 문제는 양방향으로 작용합니다: 비동기 함수는 모든 호출자가 비동기여야 하고, 동기 함수는 모든 의존성이 동기여야 하므로, 개발자들은 종종 두 가지 API 버전을 제공하기 위해 로직을 중복해야 합니다.
- 비동기 훅이 있는 플러그인 시스템은 이 문제를 잘 보여줍니다. 비동기 작업을 지원하려면 메인 함수가 비동기여야 하므로, 동기식 플러그인만 처리하는 경우에도 모든 사용자에게 영향을 미칩니다.
- Quansync는 컨텍스트에 따라 동기 및 비동기로 모두 작동할 수 있는 함수를 만드는 새로운 접근 방식으로, 비동기 전파 문제에서 로직을 탈출시킬 수 있게 합니다.
- Quansync는 두 가지 API 접근 방식을 제공합니다: 별도의 동기/비동기 구현을 제공하는 래퍼 API와
function*
와 yield*
구문을 사용하여 두 컨텍스트를 모두 처리하는 제너레이터 API입니다. - 제너레이터 구문이 불편한 개발자들을 위해, 빌드 타임 매크로
unplugin-quansync
는 일반 async/await 코드를 작성하면 이를 제너레이터 구문으로 변환할 수 있게 합니다. - Quansync는 JavaScript 제너레이터를 활용하여 yield 지점에서 실행을 일시 중지하고, 호출자의 컨텍스트에 따라 동기 또는 비동기 동작을 가능하게 합니다.
- Quansync가 색칠 문제를 완전히 해결하지는 않지만, 필요에 따라 동기 또는 비동기로 전환될 수 있는 "보라색(purple)" 색상을 도입하여 전파 문제를 피할 수 있게 합니다.
- 성능에 민감한 코드는 여전히 Quansync를 피할 수 있습니다. Promise와 yield 모두 작은 오버헤드 비용을 초래하기 때문입니다.
- War story: the hardest bug I ever debugged
- 요약
- Google Docs 엔지니어는 사용자 피드백이 거의 없었음에도 불구하고 갑자기 나타나 최우선 버그 문제가 된 Chrome에서만 발생하는 치명적인 오류를 디버깅하는 임무를 맡았습니다.
- 광범위한 테스트 후, 엔지니어는 50페이지 문서에서 텍스트를 반복적으로 굵게 표시했다가 해제하는 스크립트를 작성하여 버그를 재현했고, 이 버그가 비결정적이며 텍스트 줄바꿈과 관련이 있다는 것을 발견했습니다.
- 이 버그는 비결정적이고, 재현하는 데 시간이 오래 걸리며, Google Docs의 전체 레이아웃 엔진에서 복잡한 뷰 북키핑이 관련되어 있어 특히 해결하기 어려웠습니다.
- 동료와 함께 1.5일 동안 디버깅한 후, 그들은
Math.abs()
함수가 설명할 수 없게 음수 입력값에 대해 음수 값을 반환하고 있다는 사실을 발견했습니다. - 근본 원인은 V8 JavaScript 엔진의 리팩토링 과정에서 실수로
Math.abs()
를 초최적화된 핫 패스에서 항등 함수로 바꿔버린 것이었습니다. - 이 문제는 이미 V8 팀에 의해 알려지고 수정되었지만, Docs 팀은 특정 Chrome 버전을 위한 임시 해결책을 구현했습니다.
- 이 디버깅 경험은
Math.abs()
와 같은 기본적인 함수조차도 추적하기 어려운 구현 버그를 가질 수 있다는 것을 보여줍니다. - 버그 수색에 이틀이 꼬박 걸렸고, 결국 그 문제가 이미 다가오는 V8 릴리스에서 수정되었다는 사실을 발견했습니다.
- V8 엔진에서 기본적인 함수에 대한 기본 단위 테스트가 부족하여 이러한 회귀가 프로덕션에 도달할 수 있었습니다.
- 이 이야기는 신비한 문제를 디버깅하는 것이 때때로 소프트웨어 엔지니어링에서 피할 수 없는, 고된 부분이며, 인내심과 체계적인 조사가 필요하다는 것을 강조합니다.
- Nintendo Switch 2|닌텐도
- 요약
- Nintendo Switch 2 본체는 My Nintendo Store에서 추첨 판매(추첨 응모) 방식으로 판매될 예정입니다.
- 전국 게임 취급점에서는 4월 10일(목) 이후 준비되는대로 추첨 응모를 순차적으로 접수합니다.
- My Nintendo Store 추첨 판매 응모 조건: Nintendo Switch 소프트웨어 플레이 이력이 있어야 함(체험판, 무료 소프트웨어 제외).
- 추가 응모 조건: 응모 시점에 Nintendo Switch Online(유료)에 누적 가입 기간이 1년 이상이며 현재 가입 상태여야 함.
- 대한민국 국적의 성인(19세 이상)의 닌텐도 어카운트만 응모 가능합니다.
- 패밀리 플랜 가입자의 경우, 이용권 구매자만 응모 조건 충족 대상이 됩니다.
- 응모 접수에 대한 자세한 내용은 4월 10일(목)에 My Nintendo Store 사이트에서 안내 예정입니다.
- 2025년 4월 2일에 Nintendo Switch 2 공식 홈페이지가 공개되며, 본체 특징 및 소프트웨어 정보 등이 게재될 예정입니다.
- (번역) Next.js와 훼손된 미들웨어: 인가 아티팩트
- 요약
- Next.js의 모든 버전(11.1.4부터 최신 버전까지)에서 발견된 심각한 보안 취약점으로, 'x-middleware-subrequest' 헤더를 사용하여 미들웨어를 우회할 수 있는 문제가 있었다.
- 이 취약점(CVE-2025-29927)은 인증, 권한 부여, 경로 재작성, CSP 설정 등 미들웨어로 구현된 모든 보안 메커니즘을 무력화할 수 있는 심각한 영향을 미쳤다.
- 취약점 악용은 간단한 HTTP 헤더 추가만으로 가능했으며, 버전에 따라 페이로드가 약간 달랐다(예:
x-middleware-subrequest: middleware
또는 middleware:middleware:middleware:middleware:middleware
). - 취약점의 근본 원인은 미들웨어 실행 제어 로직에 있으며, 특히 Next.js가 미들웨어 재귀 요청을 제한하기 위해 사용하는 코드에서 발견되었다.
- 실제 사례에서 이 취약점은 관리자 페이지 접근 통제 우회, CSP 우회, 그리고 특정 상황에서 캐시 포이즈닝을 통한 DoS 공격도 가능하게 했다.
- Next.js 15.x는 15.2.3에서, 14.x는 14.2.25에서 수정되었으며, 더 이하 버전은 'x-middleware-subrequest' 헤더가 애플리케이션에 도달하지 못하도록 차단하는 것을 권장한다.
- 문제의 심각도는 CVSS 9.1/10(심각)으로 평가되었으며, Vercel, Netlify, Cloudflare 등 주요 호스팅 제공업체들도 이 취약점에 대응했다.
- 취약점은 2025년 2월 27일에 보고되었고, Vercel 팀이 인지한 후 빠르게 대응하여 3월 18일에 패치가 구현되었다.
- 이 연구는 교육 목적으로 공개되었으며, 개발자들이 문제의 근본 원인을 이해하고 보안 연구자들에게 영감을 주기 위함이다.
- Next.js는 주당 약 1천만 번 다운로드되는 인기 프레임워크로, 은행 서비스부터 블록체인까지 중요한 분야에서 널리 사용되기 때문에 이러한 취약점의 영향력이 매우 크다.
- 잠자는 미녀의 동전은 앞면이 나올 확률이 1/3일 수 있다
- 요약
- '몬티 홀 문제'와 유사한 '베르트랑의 상자 역설'은 세 개의 상자(금화 2개, 은화 2개, 금화 1개+은화 1개)에서 금화를 뽑은 후 다른 동전도 금화일 확률이 직관적으로는 1/2이지만 실제로는 2/3이라는 확률 문제이다.
- 확률은 종종 직관과 다르게 작동하며, 특히 특정 사건이 이미 발생했다는 조건이 추가되면 더욱 복잡해진다.
- '잠자는 미녀 문제'는 동전 던지기 실험에서 미녀가 깨어났을 때 "동전이 앞면이 나올 확률"을 묻는 철학적 문제로, 학자들 사이에서도 의견이 분분하다.
- '하퍼(Halfer)'라 불리는 데이비드 루이스 등의 학자들은 동전의 앞면이 나올 확률은 항상 1/2이므로 미녀가 깨어났을 때의 확률도 1/2이라고 주장한다.
- '써더(Thirder)'인 애덤 엘가 등의 학자들은 미녀가 깨어났을 때 가능한 경우의 수가 세 가지((앞면, 월요일), (뒷면, 월요일), (뒷면, 화요일))이므로 앞면이 나올 확률은 1/3이라고 주장한다.
- 흥미롭게도 두 입장 모두 논리적 일관성이 있어, 실험자 입장에서는 1/2이 맞지만 미녀 입장에서는 1/3이 맞는 결론이 나온다.
- 100번의 실험에서 실험자는 앞면이 약 50번 나오는 것을 보지만, 미녀는 150번 깨어나며 그중 50번만 앞면인 상태에서 깨어나므로 확률은 관점에 따라 달라진다.
- 이 문제를 우주적 스케일로 확장하면 우리가 시뮬레이션 우주 속에 살고 있을 가능성에 대한 철학적 질문으로 이어진다.
- 초단거리 이착륙 가능한 하이브리드 항공기 - 90억 달러 선주문
- 요약
- 하이브리드 전기 항공기인 일렉트라 에어로(Electra Aero)의 EL9은 약 90억 달러 규모에 달하는 2,200대의 선주문을 받았습니다.
- 각 항공기의 가격은 약 6천만 달러로, 개인 소유보다는 단거리 노선과 관광용으로 사용될 것으로 보입니다.
- EL9에는 8개의 고성능 로터가 장착되어 강력한 양력을 생성할 수 있어 91미터라는 매우 짧은 활주로에서도 이착륙이 가능합니다.
- 현재 2인승 프로토타입(EL2)의 기록은 이륙 거리 46미터, 착륙 거리 34.7미터입니다.
- 이 하이브리드 항공기는 기존 비행기보다 더 조용하게 작동하여 152미터 고도에서 소음이 55dB에 불과하며, 이는 일반 항공기의 75dB에 비해 현저히 낮습니다.
- 조용한 작동 특성으로 인해 섬이나 산악 지역과 같이 활주로 공간이 제한된 지역의 단거리 노선에 적합합니다.
- 배터리 무게가 과도하면 전체 효율성을 저하시킬 수 있어 배터리 전력만으로 도달할 수 있는 비행 거리에 대한 우려가 있습니다.
- 하이브리드 시스템은 단거리 이륙을 가능하게 하면서 엔진 효율을 최적화하여 전력과 무게의 균형을 효과적으로 유지하는 것을 목표로 합니다.
- 이 설계는 비행 속도를 22노트(40.7km/h)까지 줄일 수 있어 관광 수요에 부합할 수 있습니다.
- 일렉트라 에어로의 혁신적인 접근 방식은 EL9을 단거리 여행을 위한 헬리콥터의 잠재적 대안으로 자리매김하고 있습니다.
- uv overtakes Poetry | Wagtail CMS
- 요약
- uv는 Wagtail 사용자들 사이에서 두 번째로 인기 있는 패키지 설치 도구가 되었으며, Poetry를 넘어섰지만 아직 pip 뒤에 있습니다.
- uv 사용량의 증가는 새로운 사용자들의 도입보다는 기존 Wagtail 사용자들 사이에서 선호도가 변화하고 있음을 나타냅니다.
- 2024년 7월-8월 다운로드 통계에서 몇 가지 이상 현상이 발견되었으며, 이는 CI 문제나 버전 해결 문제 때문일 수 있습니다.
- Wagtail은 다른 패키지 관리 도구들과 함께 uv와의 호환성을 보장하고 문서를 업데이트할 필요가 있습니다.
- 현재 Wagtail의 권장 설치 단계는 pip를 사용하지만, 대안으로 동등한 uv 명령어가 고려되고 있습니다.
- uv 설치 과정은
uvx wagtail@latest start mysite
같은 명령어 뒤에 uv
접두사가 붙은 여러 명령어를 사용합니다. - Wagtail 개발자들은 잠재적인 원라인 "자동실행" 옵션과 같은 더 간소화된 설치 경험을 고려하고 있습니다.
- uv와 같은 새로운 도구의 등장은 개발자 경험의 기본 사항을 재검토하고 개선할 수 있는 기회를 제공합니다.
- Breadcrumbs Are Dead in Web Design
- 요약
- 현대 웹 디자인에서 브레드크럼은 구식이 되었습니다 과거 네비게이션에서 중요했음에도 불구하고, 웹사이트가 엄격한 계층적 구조를 넘어 진화했기 때문입니다.
- 현대 웹사이트는 비선형적 경험을 제공합니다 단일 페이지 애플리케이션(SPA)과 프로그레시브 웹 앱(PWA)을 통해, 정적인 브레드크럼 네비게이션의 관련성이 줄어들었습니다.
- 브레드크럼은 회고적입니다 예측적이기보다는, AI 기반 네비게이션 시스템과 달리 사용자가 다음에 가고 싶은 곳이 아닌 이미 방문한 곳을 보여줍니다.
- 모바일 우선 디자인은 화면 공간과 성능 최적화를 우선시하여, 작은 화면에서 브레드크럼은 중복되고 비생산적이게 됩니다.
- 사용자 기대치가 변화했습니다 즉각적인 만족감과 최소한의 마찰을 추구하며, 대부분의 사용자는 계층적 네비게이션보다 검색 기능을 선호합니다.
- 검색 우선 패러다임이 지배적이 되었으며, 사용자들은 미리 정해진 경로를 통해 이동하기보다 검색창에 직접 입력하는 것을 선호합니다.
- 맥락적이고 동적인 네비게이션이 브레드크럼과 같은 정적 네비게이션 시스템을 대체하고 있으며, 실시간으로 사용자 요구에 적응합니다.
- AI 기반 네비게이션은 개인화된 추천과 콘텐츠 큐레이션을 통해 전통적인 브레드크럼보다 사용자 요구를 더 잘 예측할 수 있습니다.
- 미니멀리스트 디자인은 고정 네비게이션 바, 스마트 메뉴, 그리고 맥락적 페이지 내 네비게이션을 통해 콘텐츠를 통과하는 더 효율적인 경로를 제공합니다.
- 웹 네비게이션의 미래는 브레드크럼 트레일과 같은 구식 관행이 아닌 단순함, 속도, 그리고 맥락 인식에 있습니다.