개발자 홍창기

Software Developer

V8 블로그의 async/await 설명을 보완한 과정

작성 · 수정

실행 순서에 대한 질문이 명세 변경의 배경을 이해하고 V8 블로그에 안내 문구를 추가하는 기여로 이어진 과정입니다.

실행 결과의 차이를 질문으로 정리하다

앞선 글에서 V8 블로그의 async/await 예제를 Node.js 버전별로 실행한 결과를 정리했다. 문서가 올바르다고 설명한 출력 순서와 당시 사용하던 Node.js 20의 결과가 달랐기 때문이다.

처음에는 원문의 오류라고 생각했지만, 그 판단을 확인하려면 작성 당시의 맥락이 필요했다. 그래서 v8.dev의 이슈 #735에 예제 코드, 버전별 실행 결과, 내가 이해한 실행 흐름을 남겼다.

답변에서 알게 된 명세 변경

유지보수자인 Leszek Swirski의 답변을 통해 원문 작성 이후 JavaScript 명세가 변경됐다는 사실을 알게 됐다.

당시 Node.js 8의 동작은 이전 명세를 따르지 않는 버그였고, Node.js 10에서는 명세에 맞도록 수정됐다. 한편 V8 팀은 기존 동작을 허용하도록 명세 변경도 제안했다. 제안이 받아들여진 뒤 Node.js 12에서는 이전과 같은 출력 순서가 다시 올바른 동작이 됐다.

따라서 원문은 작성 당시의 명세를 설명하고 있었다. 내가 겪은 혼란은 오래된 설명과 이후 명세에 따른 실행 결과를 같은 기준으로 비교하면서 생겼다.

답변에는 이 변화를 알리는 안내를 원문에 추가할 수 있겠다는 제안도 있었다. 같은 자료를 읽는 다른 학습자에게 도움이 될 것 같아, 안내 문구를 추가하는 PR을 작성해도 되는지 물었다.

짧은 안내 문구를 제안하고 리뷰받다

기여를 환영한다는 답변을 받은 뒤 PR #737을 열었다. 변경 범위는 V8 엔진 코드가 아닌, 기술 블로그의 예제 앞에 안내 문구를 추가하는 것이었다.

첫 초안에는 답변에서 알게 된 명세 변경의 배경을 요약했다. 리뷰에서는 그 설명이 본문 뒤쪽과 겹친다는 지적을 받았다. 그래서 배경을 길게 반복하는 대신, 예제를 읽는 데 필요한 시간적 맥락만 짧게 안내하도록 수정했다.

최종 안내는 원문 작성 당시의 명세와 이후 채택된 명세 변경을 구분해, 앞에서 버그로 소개하는 동작이 현재는 올바른 동작임을 알린다. PR은 2024년 2월 28일에 머지됐다. 실제 변경 내용에서 추가된 안내를 확인할 수 있다.

작은 기여에서 배운 점

변경은 짧았지만, 문제를 발견하고 다른 사람에게 설명하는 과정에서 배운 점이 있었다.

  • 질문에는 판단만 적기보다 재현 코드와 실행 환경, 관찰한 결과를 함께 남기는 편이 논의에 도움이 된다.
  • 현재의 실행 결과를 이해하는 것과 과거 문서의 설명이 맞았는지 판단하는 것은 구분해야 한다.
  • 문서 보완은 알고 있는 내용을 모두 적는 일보다, 독자가 해당 위치에서 필요로 하는 정보를 고르는 일에 가깝다.

공부하다 생긴 의문이 문서를 보완하는 기여로 이어져 기뻤다. 특히 설명을 짧게 줄이는 리뷰를 통해, 정확한 정보를 전달하면서도 원문의 흐름을 유지하는 방법을 배울 수 있었다.