상위 폴더를 연결하면 그 안의 Python과 노트북, 자료를 왼쪽에서 모두 찾고 싶다는 요청이 있었다. 탐색기를 접거나 너비를 바꿔도 작업은 이어져야 했다. 나는 이 기록과 실제 구현을 읽으며 파일 이름을 보이게 하는 일과 파일을 열 권한을 정하는 일을 나눠 보았다. 트리를 그리는 화면만 보고 파일 접근의 경계까지 완성됐다고 말할 수는 없었다.

먼저 한 단계의 이름과 상태를 읽는다

원래 목록 함수는 프로젝트에 등록된 루트를 받아 요청한 폴더의 바로 아래 항목을 읽는다. 파일 이름과 상대 경로, 종류와 크기, 접근 불가 여부 같은 정보다. 파일 본문을 미리 모두 가져오거나 Python을 실행하는 코드가 아니다. 숨김 이름도 보일 수 있으므로 메타데이터를 보여 주는 범위 자체는 여전히 권한의 일부다.

화면은 폴더를 펼칠 때 그 목록을 요청하고 하위 폴더도 필요한 때 따로 연다. 전송을 취소하고 응답 세대를 비교하는 코드는 늦게 온 결과를 예전 폴더 상태처럼 붙이지 않기 위한 연결이다. 나는 이 소스를 읽은 것과 실제 지연·폴더 변경을 원래 화면에서 시험한 것을 구분했다. 이번에 기존 서버나 노트북을 실행하지는 않았다.

페이지로 나눈다는 말의 정확한 범위

화면에는 200개씩 더 보기가 있고 서버 입력에는 offset과 limit이 있다. 그렇다고 폴더의 첫 200개 이름만 디스크에서 읽는 구현은 아니다. 소스는 해당 한 단계의 전체 목록을 정렬한 다음 반환할 부분을 고른다. 전체 하위 폴더를 재귀 수집하지 않는다는 장점과 한 폴더가 아주 클 때 드는 비용을 따로 설명해야 한다.

이 차이는 운영 화면의 약속에도 영향을 준다. 페이지가 작아졌다는 것과 탐색 비용이 같은 비율로 줄었다는 것은 다르다. 또 두 페이지 사이에 항목이 생기거나 없어지면 순서가 달라질 수 있다. 나는 목록에 표시한 수량을 모든 파일 내용 검토나 고정 시점의 전체 보존 확인으로 바꾸지 않았다.

화면의 접근 불가 표시 뒤에도 서버 검사가 필요하다

상대 경로에 상위 이동이나 절대 위치가 들어오면 서버가 거절한다. 등록된 루트도 실제 경로가 바뀌지 않았는지 확인하고, 요청 대상을 해석한 뒤 그 루트 안에 있는지 다시 본다. 폴더 안에 놓인 링크나 정션이 바깥을 향할 수 있기 때문이다. 문자열이 루트 이름으로 시작한다는 비교만으로 실제 소속을 정하지 않는다.

원래 목록은 바깥으로 이어지는 항목을 차단 상태로 돌려주고 화면이 이를 표시한다. 하지만 화면 버튼이 비활성이라는 사실만으로 접근 경계가 생기지는 않는다. 직접 파일 정보 API도 같은 해석 함수를 사용한다. 목록에서 보았던 파일이라도 열기 요청에서는 다시 판단하는 구조가 중요했다. 인증과 프로젝트 선택은 별도 호스트 계층의 책임이다.

기존 편집기로 연결하되 현재 프로젝트를 다시 맞춘다

openFile은 파일 정보 요청이 끝난 뒤에도 처음의 프로젝트가 현재 선택과 같은지 확인한다. 그다음 기존 Jupyter 프레임에 상대 경로를 보내고 docmanager:open으로 문서를 연다. 목록을 눌렀다는 이유로 다른 프로젝트의 편집기로 넘어가거나 그 파일을 바로 실행하는 흐름으로 설명하지 않았다. 실제로 열렸다는 응답도 별도로 기다린다.

패널의 접힘과 너비는 화면 설정으로 보관하고, 부모는 실행 중인 프로젝트 프레임을 별도로 유지한다. 접기와 편집기 종료가 같은 상태가 되지 않게 구성한 것이다. 당시 문서와 대화에는 실제 기능 검증을 사용자가 맡았다고 명시되어 있다. 나는 소스와 당시 빌드 보고를 이번 실제 커널 보존·키보드·작은 화면 시험의 성공으로 가져오지 않았다.

허용 폴더는 커널 전체의 감옥이 아니다

탐색 API가 특정 루트 안에서 목록을 읽는다고 Python 커널의 OS 파일 접근까지 그 범위로 제한되는 것은 아니다. 채팅의 파일 수정 권한도 탐색기 연결만으로 자동 확대하지 않는다. 목록 보기, 문서 열기, 수정 저장, 코드 실행은 서로 다른 책임이다. 같은 화면에서 이어진다는 이유로 하나의 권한처럼 합치지 않았다.

이 원리는 홈페이지 관리자에도 적용할 수 있다. 자료 서재에서 파일 이름을 찾는 기능과 서버가 원본을 내려주는 기능은 각각의 현재 권한과 경로를 확인해야 한다. 화면의 편의가 커질수록 실제 요청의 경계를 설명할 말도 구체적이어야 한다. 모든 파일을 볼 수 있다는 표현을 모든 내용을 가져오고 실행한다는 약속으로 바꾸지 않는 것이 제작자의 선택이었다.

공유 예제에서는 메타데이터만 독립시켰다

기존 완료 폴더 반복기는 원본과 작업 사본을 복사·이동하는 용도여서 탐색기에 그대로 실행할 부품은 아니었다. 새 독립 모듈은 한 단계 목록과 일반 파일 정보만 반환한다. 설명을 좁히려고 내부로 이어지는 링크까지 모두 거절하며, 내부 링크를 허용할 수 있는 원래 소스와 다른 정책임을 문서에 남겼다.

소유한 합성 폴더와 실제 Windows 정션으로 20개 시험을 실행하고 ZIP 추출·공개 파일의 바이트와 해시까지 확인한다. 이 검증은 고객 자료, 원래 컨트롤러나 Jupyter에서 한 것이 아니다. 경로 검사 사이의 적대적인 변경을 완전히 막는 OS 샌드박스도 아니다. 독자가 재사용할 코드와 호스트가 더 맡아야 할 인증·열기·저장·실행의 경계를 함께 공유한다.