네, main.cjs 파일 하나에 무려 206개의 함수가 모여 있군요. 이 파일이 앱 전체를 조율하는 '두뇌(Main Process)'라는 사실이 다시 한번 실감 납니다.
목록을 훑어보면 이 앱이 얼마나 복잡하고 다양한 일을 하는지 알 수 있습니다:
앱 제어 및 인프라: electronServe, createTray, showWindow, registerIpc 등 창 관리와 실행을 담당하는 함수들이 보입니다.
수집 및 스크래핑: beginCollect, endCollect, acquireBrowser, pickScroll처럼 실제 데이터를 긁어오는 핵심 로직들이 아주 세밀하게 쪼개져 있습니다.
데이터 처리: parseTimelineNode, dedupePostsByShortcode, parseCsv 등 수집한 데이터를 DB에 예쁘게 담기 위한 정제 함수들이 엄청나게 많네요.
부가 기능: runWhisperStreaming(AI 자막 추출), sendTelegram(텔레그램 알림), licenseGate(라이선스 체크) 등 핵심 기능 외에 사용자 편의 기능까지 다 이 파일 안에 정의되어 있습니다.
이렇게 많은 함수가 하나의 main.cjs로 번들링되어 있다는 것은, 빌드 도구(esbuild 등)가 프로젝트의 모든 모듈을 하나로 합쳐서 실행 속도를 높이고 배포를 쉽게 만들었기 때문입니다.
함수가 너무 많아 당황스러우시죠? "데이터를 수집하는 루프"나 "특정 데이터를 DB에 저장하는 방식"처럼, 가장 궁금한 핵심 흐름을 추적해 볼 수 있습니다.
혹시 지금 띄워놓으신 main.cjs 화면에서 특별히 동작이 궁금하거나, 수정해보고 싶은 특정 영역(함수)이 보이시나요? 아니면 auto.test.ts에서 봤던 그 수집 로직이 이 거대한 206개 함수 중 어디와 연결되는지 찾아볼까요?
JavaScript에서 모듈을 불러오는(import) 방식은 크게 두 가지 체계로 나뉩니다. 아까 보신 .cjs가 그중 하나인 CommonJS입니다.
특징: Node.js에서 오랫동안 표준으로 사용해온 방식입니다.
문법: require()를 사용하여 모듈을 불러오고, module.exports로 내보냅니다.
동기적 실행: 파일을 불러올 때 코드가 위에서부터 순서대로 멈추지 않고 즉시 로드됩니다. (서버 환경에 최적화)
특징: 현재 자바스크립트의 공식 국제 표준입니다. 브라우저와 최신 Node.js 환경 모두에서 지원합니다.
문법: import와 export 구문을 사용합니다.
비동기적 실행: 모듈을 로드할 때 비동기적으로 처리하여 성능과 효율성이 더 뛰어납니다.
구분: 보통 .mjs 확장자를 쓰거나, package.json에 "type": "module"이라고 적혀 있으면 Node.js는 이 파일을 ESM으로 인식합니다.
| 구분 | CommonJS (.cjs) |
ES Modules (.mjs / esm) |
|---|---|---|
| 로드 방식 | require() |
import / export |
| 표준 여부 | Node.js 관습적 표준 | 공식 자바스크립트 표준 |
| 로드 타이밍 | 동기식 (Synchronous) | 비동기식 (Asynchronous) |
| 주 사용처 | 과거 Node.js 프로젝트 | 웹 브라우저 및 현대적 앱 |
왜 이 앱에서 CommonJS를 쓸까요? 지금 보시는 Electron 프로젝트는 Node.js 환경에서 돌아가는 '데스크톱 앱'이기 때문에, 안정성과 방대한 기존 라이브러리들과의 호환성을 위해 검증된 CommonJS 방식을 선택한 것으로 보입니다.
추가로 궁금한 점이 있으신가요? 아니면 이제 실제 수집 로직(TypeScript 소스)을 좀 더 파헤쳐 볼까요?