방금 보여주신 main.cjs 코드의 핵심 부분을 보니, 이 프로그램이 어떻게 실행되고 운영되는지 아주 명확하게 드러납니다.
이 파일은 Electron 앱의 전체 컨트롤 타워(Main Process)입니다. 주요 로직을 분석해 드릴게요:
2418~2427번 줄)dataDir(): 사용자 데이터(userData)가 저장되는 경로를 정의합니다.
appDb(): insta.sqlite 데이터베이스 파일에 연결하는 핵심 함수입니다. 이 함수는 DB 연결 객체(database)가 없으면 openBetterSqlite를 호출하여 생성하고, 이미 있으면 재사용합니다. 즉, 앱 전역에서 DB 연결은 단 하나만 유지되도록 설계되어 있습니다.
78~84번 줄)사용자님이 터미널에서 ReelRadar.exe --collect 명령어로 실행하면:
GUI(화면)를 띄우지 않고 바로 collectIfDue 함수가 호출됩니다.
데이터 수집이 끝나면 app.quit()으로 깔끔하게 종료됩니다.
이 덕분에 윈도우 스케줄러를 통해 자동으로 데이터를 업데이트할 수 있는 것입니다.
163~184번 줄)loadProd: app.isPackaged가 true일 때, 즉 .exe로 설치된 버전에서는 ../../out 폴더(Next.js로 빌드된 웹 파일들)에 있는 웹 앱을 로드하여 화면을 구성합니다.
즉, main.cjs는 "Next.js 웹 앱을 감싸고 있는 브라우저 껍데기(Electron)" 역할을 하는 셈입니다.
relaxIgCdnCorp() 함수(143~157번 줄): 인스타그램 CDN 이미지들이 브라우저 보안 정책(CORP) 때문에 화면에 깨져 보이는 것을 방지하기 위해, 헤더를 강제로 수정하여 이미지가 정상적으로 뜨도록 처리하고 있습니다. 아주 영리한 해결책이네요!
분석 결과: 이 프로그램은 "Next.js 웹 화면(out) + Node.js 수집 엔진(collector) + SQLite 데이터베이스(db)"를 Electron이라는 틀 안에 하나로 묶어놓은 매우 완성도 높은 데스크톱 앱입니다.
이제 이 구조를 다 파악하셨으니, 다음에는 무엇을 수정해보고 싶으신가요?
예를 들어, "수집 주기(schedule.ts 관련)를 바꾸고 싶다"거나, "데이터베이스에 저장되는 특정 정보를 바꾸고 싶다"면 그 파일로 바로 안내해 드리겠습니다.