피드로 돌아가기
Weekly Update - Apr 3rd, 2015
Node.js BlogNode.js Blog
Backend

io.js v1.6.3이 fs.writeFileSync() 부패 버그와 타이머 이중 실행 문제를 수정해 안정성 향상

Weekly Update - Apr 3rd, 2015

2015년 4월 3일3intermediate

Context

io.js에서 fs.writeFileSync()와 append-mode fs.writeFile()이 특정 상황에서 파일 부패를 일으키는 버그가 존재했다. 또한 타이머 코드에서 unref() 호출 후 콜백이 중복 실행되고 Timer#close()의 멱등성이 보장되지 않는 문제가 있었다. Windows 사용자들은 컴파일된 add-on 호환성 문제를 겪고 있었다.

Technical Solution

  • fs 모듈 버그 해결: fs.writeFileSync()와 append-mode fs.writeFile()의 파일 부패 문제를 #1063에서 수정 (Olov Lassus)
  • 타이머 멱등성 개선: Timer#close()를 멱등 연산으로 변경해 중복 호출 시에도 안전하게 동작 (#1288, Petka Antonov)
  • 타이머 콜백 중복 실행 방지: unref() 호출 중에 setTimeout() 콜백이 한 번만 실행되도록 수정 (#1231, Roman Reiss)
  • 내부 모듈 API 도입: 핵심 코드가 공개 API 노출 없이 JavaScript 모듈을 내부적으로만 공유할 수 있는 메커니즘 추가 (#848, Vladimir Kurchatkin)
  • Windows add-on 호환성 개선: 컴파일된 add-on을 위한 "delay-load hook" 추가 (#1251, Bert Belder)
  • V8 업그레이드: V8을 4.1.0.27로 마이너 버그픽스 업데이트
  • npm 업그레이드: npm을 2.7.4로 업그레이드

Key Takeaway

파일 시스템 연산의 데이터 무결성과 타이머의 신뢰성은 런타임의 기본 기능이므로 이들 버그 수정이 핵심 안정성 보장의 출발점이 된다. 특히 add-on 호환성 문제는 플랫폼별 세부 구현(Windows delay-load)이 사용자 경험에 직결되는 사례를 보여준다.


Node.js/io.js 기반 서비스를 운영할 때 append-mode 파일 쓰기와 unref() 타이머를 함께 사용하는 경우 v

1.

6.3 이상으로 업그레이드하면 예상치 못한 데이터 손상과 콜백 중복 실행으로 인한 버그를 방지할 수 있다.

원문 읽기