JavaScript의 놀라운 자기 수정 능력: 실행 중인 코드 파일 직접 수정하기
🤖 AI 추천
이 콘텐츠는 JavaScript의 런타임 유연성을 탐구하고 싶은 개발자, 메타 프로그래밍 실험에 관심 있는 개발자, 그리고 창의적인 CLI 도구나 코드 아트를 구현하려는 개발자에게 특히 유용합니다. 코드 자체를 통해 상태를 추적하고 변경하는 독특한 접근 방식은 코드의 생명력과 예술적 가능성에 대한 새로운 시각을 제공할 것입니다.
🔖 주요 키워드
핵심 기술: 이 글은 Node.js 환경에서 JavaScript 코드가 실행 중에 자신의 소스 파일 내용을 읽고, 수정하고, 다시 쓰는 '자기 수정 코드(self-modifying code)'라는 혁신적인 기법을 소개합니다. 함수 호출 횟수를 자동으로 추적하기 위해 코드 스스로를 업데이트하는 방식으로 구현되었습니다.
기술적 세부사항:
* 핵심 아이디어: 코드 자체 내에서 실행 횟수와 같은 상태를 추적하고 기록합니다.
* 구현 요구사항:
1. 실행 중인 스크립트 파일 자체를 찾을 수 있어야 합니다.
2. 파일 내용을 읽고 파싱하는 기능이 필요합니다.
3. 원하는 부분만 안전하게 덮어쓰고, 전체 파일을 파괴하지 않아야 합니다.
* 구현 방식 (Node.js):
* fs
(File System) 모듈과 path
모듈, url
모듈을 사용하여 현재 스크립트 파일의 경로를 얻습니다 (fileURLToPath
, import.meta.url
).
* fs.readFileSync
를 사용하여 자신의 소스 코드를 문자열로 읽어옵니다.
* 정규 표현식(/// timesRun: (d+)/
)을 사용하여 특정 주석(예: // timesRun: 3
)에서 실행 횟수를 추출하고 파싱합니다.
* String.prototype.replace
메서드를 사용하여 추출된 실행 횟수를 증가시킨 새 문자열로 주석 부분을 업데이트합니다.
* fs.writeFileSync
를 사용하여 수정된 코드를 원래 파일에 다시 씁니다.
* 호출: 이러한 코드 수정 로직은 추적하려는 함수 호출 전에 배치됩니다.
개발 임팩트: 이 기법은 생산성 향상보다는 메타 프로그래밍 실험, 창의적인 CLI 도구, 코드 아트 설치, 그리고 JavaScript 런타임의 유연성을 보여주는 교육적인 목적으로 활용될 수 있습니다. '프로그래밍의 네 번째 벽을 부수는' 경험을 제공하며, 코드에 생명력을 불어넣는 예술적인 접근을 가능하게 합니다.
커뮤니티 반응: 글쓴이는 이 과정에서 기술적인 저항감과 경이로움을 동시에 느꼈다고 표현하며, 이 기법이 주는 비실용적이지만 강력한 실험 정신을 강조합니다. 이 아이디어는 '함수가 자기 자신을 기록하는' 직관적인 사고 실험에서 시작되었습니다.