11월 초까지 진행했던 오픈소스 컨트리뷰션 활동에서 Masters 기간에 이슈를 하나 더 찾아서 PR을 날려보았다. 물론 중복된 내용이 있어서 Closed 되었긴 하지만, 나름 이슈를 분석하고 어떻게 해결하면 좋은지 찾아보는 좋은 경험이었어서 이렇게 작성하게 되었다.

일단 브라우저에서 친숙한 Web Storage API가 Node.js 환경에서는 다르게 작동한다는 점이 신기했다. 브라우저 중심의 API를 Node.js로 확장한 동작 원리를 분석하면서, 이를 다른 개발자들에게 명확히 전달할 수 있는 문서를 만드는 것은 의미 있는 작업이라고 생각했다.
또한, 웹 애플리케이션이 클라이언트 측에서 데이터를 저장하고 관리할 수 있도록 하는 기능을 제공하는 Web Storage API에 관련된 내용을 명확히 문서화 함으로써 많은 개발자분들에게 도움이 되면 어떨까 해서 이 이슈를 선택하게 되었다.
이 #53871 이슈는 Node.js의 Web Storage API와 관련된 사용 방식과 문서화 문제를 다루고 있다. 브라우저에서 사용되는 localStorage와 sessionStorage와 동일한 API를 Node.js에서 제공하지만, 작동 방식이 달랐으며, 이를 명확히 문서화하지 않아 혼란을 초래할 가능성이 있었다.
브라우저 같은 경우 sessionStorage와 localStorage가 사용자 세션 및 도메인 범위에 한정되지만, Node.js에서는 프로세스 단위로 동작한다. 이와 관련하여 명확한 문서가 없을 경우 SSR이나 멀티 프로세스 환경에서 문제가 발생할 수 있다.
--localstorage-file 플래그를 통해 로컬 스토리지의 저장 위치를 지정하지만, 이 동작이 문서에 충분히 설명되지 않았고, 멀티 프로세스 환경에서의 파일 접근 문제나 충돌 가능성을 고려하지 않았다.
로컬 스토리지의 크기 제한이 브라우저와 동일하게 10MB로 설정되어 있지만, localStorage와 sessionStorage 간의 차이를 이해하지 못하면 비효율적으로 작동할 가능성이 존재한다.
이와 관련된 세부사항은 sessionStorage에만 문서화되어 있고, localStorage에는 명확히 나타나 있지 않았다.

Web Storage API의 활용에서 중요한 요소 중 하나는 --localstorage-file 옵션이다. 이는 localStorage가 데이터를 저장할 파일을 지정하는 역할을 한다. 이러한 내용에 대해 PR을 통해 더 명확히 문서화하려고 하였다.
먼저, 이 옵션이 Node.js에서 어떻게 동작하는지 명확히 작성하였다. --localstorage-file 플래그를 사용하면, localStorage가 데이터를 로컬 파일 시스템의 특정 경로에 저장하도록 설정할 수 있다. 이를 통해 브라우저처럼 데이터를 영구적으로 유지할 수 있는 기반이 마련되어 간격을 줄이고자 하였다.
그러나, --localstorage-file 플래그를 사용할 때 몇 가지 중요한 점을 고려해야 한다. PR에도 적었듯이 예를 들어, 여러 Node.js 프로세스가 동일한 파일에 동시에 접근할 수 있는데, 이로 인해 충돌이나 데이터 손실 문제가 발생할 수 있다. 이를 막기 위해 파일 잠금(lock) 메커니즘을 도입하거나 프로세스마다 별도의 파일을 사용하는 방식이 필요하고, 각 프로세스는 최대 10MB까지 데이터를 저장할 수 있다는 용량 제한이 존재한다.
따라서 이러한 문제를 사전에 방지하기 위해 관련 내용을 CLI 옵션 섹션의 --max-old-space-size 설명 뒤에 배치하고, 예제를 추가하여 사용자가 자연스럽고, 더 쉽게 관련 정보를 접할 수 있도록 했다.
globals.md에 Node.js에서 localStorage와 sessionStorage가 어떻게 동작하는지 설명하는 새로운 섹션을 추가하였다.
Node.js에서 localStorage와 sessionStorage는 모두 현재 실행 중인 프로세스 범위에서 작동한다. 이는 브라우저의 사용자 세션 단위 작동 방식과는 다르다. 특히, sessionStorage는 프로세스가 종료되면 데이터가 사라지고, localStorage는 지정된 파일에 데이터를 기록하여 프로세스 종료 후에도 유지된다. 이때 localStorage에서 사용할 파일 경로는 --localstorage-file 플래그를 통해 설정된다.
또한 저장 용량 제한과 관련하여 브라우저와 마찬가지로, Node.js에서도 각각의 프로세스는 최대 10MB까지 데이터를 저장할 수 있다. 이 제한은 데이터 관리 효율성을 위해 설정된 기본 값이며, 사용자들이 Node.js와 브라우저 간의 일관성을 이해하는 데 도움이 된다.
추가적으로 많은 개발자들이 쉽게 이해할 수 있도록 간단한 예제를 작성하였다다. 이를 통해 초보자와 경험 많은 개발자 모두가 Node.js의 Web Storage API를 적절히 활용할 수 있도록 지원하도록 하였다.
PR은 기존에 유사한 기여가 이미 진행된 것이 존재하였어서 Closed 처리되었지만, 많은 부분을 배울 수 있었다.
일단 중복된 기여 방지를 위해 기존 PR 및 이슈 관련 PR을 더 꼼꼼히 검토해야 한다는 점을 배웠다.
코드 수정 및 문서화 뿐만 아니라 테스트를 통해 개선할 필요를 느꼈다. 왜냐하면 테스트를 통해 검증을 하지 못하면 잘 되는건지 알 수 없기 때문이다.
물론 오픈소스 컨트리뷰션이 끝났다고 하더라도 오픈소스에 대한 재미를 느꼈다. 전 세계 사람들이 의견을 공유하고 더 나은 방향으로 개발하는 그런 문화가 있다는 것이 너무 흥미로웠다. 그래서 한 달에 한 번이라도 이슈를 찾아서 분석 후 PR을 날려서 기여할 예정이다.