“메모 내보내기”는 어디로 이어질까요?
이 가이드는 작은 Electron 앱을 사용합니다. 노트 내보내기를 클릭하면 페이지의 API가 호출되고, 메인 프로세스를 거쳐 CSV 파일이 기록됩니다. 이 동작은 여러 파일에 걸쳐 구현되어 있습니다.
Electron 프로세스를 넘나드는 CSV 내보내기
-
렌더러 → 프리로드
notes.exportCsv()renderer.js이preload.js에서 노출한 API를 호출합니다. -
프로세스 간 통신
notes:export프리로드는 메인 프로세스로 보내는 이름 있는 메시지인 IPC 채널을 호출합니다. -
메인 프로세스내보내기 핸들러
main.js이 해당 채널을 처리하고 CSV 저장 함수를 호출합니다.
csv.js이 메모를 변환 → main.js이 downloads/notes.csv 저장.
CSV 내보내기 질문하기
에이전트에 REA를 연결하고 앱 폴더나 ASAR 파일을 전달하세요:
REA로 이 앱에서 메모를 내보내면 어떤 일이 일어나는지 찾아줘. CSV는 어디서 만들어져?
예제 프롬프트입니다. 앱 폴더 또는 app.asar의 절대 경로를 포함하세요.
REA가 앱 파일을 읽어 진입점, 모듈, 프로세스 경계의 연결 지도를 만듭니다. 에이전트는 이를 바탕으로 조사 범위를 내보내기 기능으로 좁힙니다.
내보내기 코드 추적
페이지에서 작은 API를 호출합니다
document.querySelector("#export").addEventListener("click", async () => {
const destination = await window.notes.exportCsv();
document.querySelector("#status").textContent = `Saved to ${destination}`;
});
페이지는 메서드 이름을 알고 있습니다. 실제 구현은 프리로드에 있으며, 프리로드가 이를 렌더러에 노출합니다.
contextBridge.exposeInMainWorld("notes", {
exportCsv: () => ipcRenderer.invoke("notes:export"),
});
REA는 notes.exportCsv과 리터럴 채널 notes:export을 기록합니다. 이 호출을 메인 프로세스에서 유일하게 일치하는 핸들러와 연결합니다.
ipcMain.handle("notes:export", () => {
const destination = path.join(app.getPath("downloads"), "notes.csv");
writeFileSync(destination, toCsv(notes), "utf8");
return destination;
});
핸들러를 읽으면 처음 질문의 답이 나옵니다. csv.js이 메모를 변환하고, 메인 프로세스가 사용자의 다운로드 폴더에 notes.csv을 저장합니다.
{
"literal_channels": 1,
"renderer_transmissions": 1,
"main_handlers": 1,
"paired_renderer_transmissions": 1,
"ambiguous_renderer_transmissions": 0
}
아래 다운로드 예제를 REA 4.1.0으로 분석한 기록입니다. API, 채널, 핸들러 결과에는 소스 위치가 함께 제공됩니다.
예제를 직접 분석해 보세요
예제를 다운로드하고 압축을 푸세요. 압축 파일에는 notes-example 폴더 전체가 들어 있습니다. Node.js와 npm으로 분석하세요. 이 예제에는 Electron이 필요하지 않습니다.
소스 파일 6개 살펴보기
npx -y rea-agents@latest analyze-javascript-application \
/absolute/path/to/notes-example --json
경로를 압축을 푼 폴더로 바꾸세요. normalized_result.summary.ipc에서 IPC 채널 하나와 일치하는 핸들러 하나가 나와야 합니다. 소스 위치는 normalized_result.graph에 있습니다.
직접 고른 앱도 폴더나 ASAR 경로로 같은 명령을 실행하세요. 에이전트는 REA의 기능 추적 도구로 리터럴 문자열, API 이름, IPC 채널을 추적할 수 있습니다.
CSV 저장 코드 살펴보기
notes:export에서 핸들러까지 추적해 줘. CSV 저장 함수에 어떤 입력이 전달되고, 파일 저장에 실패하면 어떻게 돼?
소스 위치를 따라 세부 동작을 살펴보세요. 계산된 채널 이름이나 모호한 핸들러는 확인되지 않을 수 있습니다. 런타임 관찰은 이를 조사하는 또 다른 방법입니다.
- Notion 클립보드 브리지 추적 패키징된 Electron 앱에도 같은 방법을 적용합니다.
- 브라우저 내보내기 관찰실제 클릭을 캡처해 어떤 요청을 보내는지 확인합니다.
- 네이티브 함수 추적기능이 네이티브 코드에 의존한다면 바이너리까지 추적합니다.