이번 단계에서는 Dock 화면에 실제 로컬 문서 폴더를 연결했다.
사용자는 폴더를 선택하고, Markdown 파일 목록을 확인하고, 문서를 열어 편집한 뒤 저장할 수 있다. 다만 파일 시스템을 Renderer에 직접 열어 주지는 않았다. 파일 권한은 Main 프로세스가 가지고, 화면은 필요한 기능만 좁은 API로 요청한다.
Renderer는 화면을 그리는 영역이다. 여기에 절대 경로와 파일 시스템 객체를 그대로 노출하면 화면 코드의 실수나 악성 입력이 곧바로 로컬 파일 접근으로 이어질 수 있다.
그래서 폴더를 선택하면 Main이 임의의 workspaceId를 만들고 실제 경로와 연결한다. Renderer는 이 ID와 notes/today.md 같은 상대 경로만 보낸다. 실제 폴더 경로는 Renderer에 전달하지 않는다.
요청이 Main에 도착하면 다음을 차례로 확인한다.
.., null byte를 거부한다..md와 .markdown만 허용한다.이 검사를 통과한 뒤에만 파일을 읽거나 저장한다.
기존 파일을 바로 덮어쓰면 저장 도중 오류가 났을 때 문서가 깨질 수 있다. 그래서 새 임시 파일에 먼저 내용을 기록하고 flush한 다음, 같은 폴더 안에서 교체한다.
이 방식은 저장에 실패해도 기존 파일을 남겨 둔다는 장점이 있다. M2에서는 외부 프로그램이 동시에 파일을 수정했는지 감지하는 기능까지 넣지 않았다. 그 문제는 충돌 표시와 복구 UX를 함께 설계하는 별도 단계로 남겼다.
전체 검증을 통과한 뒤 M2 핵심 흐름을 커밋했다. 다음 단계에서는 새 문서 생성 UX, 저장 상태와 오류 안내를 다듬고, 외부 파일 변경 감지 여부를 별도 설계한다.