노트북 안에서 브라우저를 다룰 수 있다는 말은 어느 PC의 어느 커널에서도 바로 연결된다는 뜻으로 받아들여질 수 있다. 하지만 북극성 내부 작업실의 SDK는 앱이 만든 실행 연결을 사용한다. 나는 이미 동작하는 내부 경로와 별도 개발이 필요한 외부 PC 연결을 나눠 설명하고 확인하지 않은 호환성을 완료라고 부르지 않기로 했다.
이 글의 NotebookBrowser는 내부 실행용 SDK다
northstar_notebook의 NotebookBrowser는 앱이 환경으로 전달한 연결 위치와 자격을 읽는다. 없으면 북극성의 왼쪽 작업실에서 실행하라는 오류를 낸다. 파일을 다른 폴더에 복사했다고 브라우저 연결을 스스로 발견하거나 로그인 프로필을 만드는 코드가 아니다.
Studio 환경에서 쓰는 별도 NotebookBrowser 이름과도 같은 구현이라고 추정하지 않는다. 인터페이스 이름이 같아도 연결 주체와 권한 수명, 실행 환경이 다를 수 있다. 나는 이름의 친숙함보다 코드가 어떤 호스트에 요청하는지 먼저 확인했다. 설치 파일이 있다는 것과 연결된 실행이 있다는 것은 다른 상태다.
앱이 만든 커널과 실행 셀의 관계를 확인한다
앱은 작업실 커널을 시작할 때 로컬 연결과 전용 실행 환경을 준비한다. 호스트는 요청 자격뿐 아니라 현재 kernel이 맞고 실행 셀이 있는지도 확인한다. 지원하는 browser 도구와 프로그램 호출만 통과시키고 일반 임의 명령을 무조건 브라우저 작업으로 받지 않는다.
이것이 로컬 Python의 운영체제 접근 전체를 막는 샌드박스라는 뜻은 아니다. SDK를 통과하는 브라우저 요청의 계약이다. 외부 커널을 연결하려면 이 소유와 실행 상태를 어떻게 확인할지 새로 설계해야 한다. 환경변수 값을 복사하는 일을 공식 연결 기능처럼 안내하지 않는다.
로컬 연결을 네트워크 호환성으로 바꾸지 않는다
Windows의 로컬 실행은 Named Pipe를 사용하고 그 밖의 코드 분기에는 로컬 소켓 경로가 있다. 원격 PC가 이 위치를 그대로 열 수 있다는 보장은 없다. 연결 방식이 같아 보이는 Python 코드가 있다고 네트워크 전달과 인증, 종료 처리까지 해결된 것은 아니다.
외부 연결에는 어느 프로젝트와 탭을 쓰는지, 이미 열린 글과 다른 작업을 어떻게 지키는지, 끊긴 뒤 결과를 어떻게 확인하는지 검증이 필요하다. 단순 요청 성공만으로 충분하지 않다. 나는 연결을 편하게 만든다는 목표와 현재 구현한 전송 범위를 별개로 설명한다. 경계를 알려야 사용자가 가능한 일과 후속 작업을 구분할 수 있다.
기존 노트북은 보존하고 새 연결은 따로 다룬다
현재 지침은 기존 Jupyter와 Chrome 연결 코드, 환경과 예약 작업을 보존한다. 새 브라우저 자동화 노트북이나 사용자가 전환을 요청한 노트북에서 기존 북극성 프로젝트·탭·로그인 세션을 쓰는 방향을 적용한다. 일반 분석 문서에 불필요한 브라우저 연결을 넣는 요청은 아니다.
공통 외부 Jupyter 연결기 개발은 별도 후속 요청까지 보류 상태다. 이 제작기를 계속 발행하는 목표가 그 개발을 자동 재개하는 승인은 아니다. 나는 프로그램 사용법을 설명할 때도 무엇이 허용된 작업인지 구분한다. 사용자 자료를 지키는 보존 범위가 새 기능 소개에 묻히지 않게 했다.
실제 내부 시험과 외부 미검증을 함께 적는다
기존 업무 노트북 시험은 앱 안에서 실제 커널을 열고 두 항목을 처리한 뒤 커널 재시작으로 완료 기록을 재사용한다. 보관함의 전용 노트북 실행도 별도로 확인한다. 시험은 소유한 HTTPS fixture를 사용하며 외부 PC와 모든 네트워크 조건을 대상으로 한 것은 아니다.
이번 콘텐츠 작업은 그 시험 코드를 읽었고 사용자 커널을 전환하거나 재연결하지 않았다. 공개 모듈의 노트북 코드 셀을 Python으로 비교한 시험도 내부 앱 커널의 실행 시험과 다르다. 나는 각각의 결과를 제자리에서 설명한다. 작은 예제의 성공을 새 연결기의 완료 근거로 옮겨 쓰지 않는다.
확장 가능한 구조와 완료된 연결을 구분한다
SDK의 공통 함수와 도구 계약이 있으면 확장을 시작하기 좋다. 그러나 확장할 수 있다는 설계와 다른 컴퓨터에서 안정적으로 쓸 수 있다는 결과는 다르다. 나는 이 차이를 숨기지 않는 편이 실제로 함께 작업할 사람이 판단하기 쉽다고 생각한다.
회사 맞춤 프로그램에서도 API가 있다는 말만으로 모든 외부 시스템이 연결된 것은 아니다. 대상의 권한과 자료, 끊김과 복구까지 확인해야 한다. 내부 SDK를 정확하게 설명하고 외부 연결의 남은 일을 명시하는 것은 기능을 작게 보이게 하는 일이 아니라 다음 제작 범위를 정확하게 정하는 일이었다.