작업공간: 브라우저의 VS Code 호환 편집기와 코딩 에이전트

작업공간마다 작업 환경이 하나씩 있습니다. 브라우저 새 탭에 VS Code 호환 편집기(code-server)가 열리고, 터미널과 코딩 에이전트가 준비되어 있습니다.

지금 설치되는 에이전트는 Claude Code(명령줄 도구와 VS Code 확장)입니다. 버전을 고정하고 자동 업데이트를 꺼 두므로, 결과와 함께 저장한 작업 환경에도 그 버전이 그대로 남습니다.

폴더는 두 개입니다. 내 작업은 ~/project에, 내 데이터는 /data에 읽기 전용으로 있습니다.

탭을 닫아도 터미널에서 돌던 작업은 계속되고, 다시 열면 같은 터미널로 돌아옵니다. 작업 폴더는 작업 환경을 다시 만들어도 남습니다. 파이썬 패키지(pip install --user)는 작업 폴더에 남고, 시스템 패키지(sudo apt-get install)는 기록해 두었다가 작업 환경을 다시 만들 때 다시 설치합니다.

작업공간의 편집기
편집기 탐색기를 옮겨 그린 예시입니다. 편집기의 메뉴와 폴더 이름은 영어입니다. My work는 내 작업 폴더(~/project), My data (read-only)는 읽기만 할 수 있는 내 데이터(/data)입니다.

데이터를 고르는 동안, 결과를 볼 수 있는 사람이 보입니다

결과는 그 작업공간이 본 데이터를 모두 볼 수 있는 사람만 볼 수 있습니다. 그래서 데이터를 넓게 고를수록 볼 수 있는 사람은 줄어듭니다.

고르는 동안 이 작업공간의 결과를 볼 수 있는 사람의 수가 바로 바뀌고, 데이터 위에 포인터를 올리면 더했을 때 볼 수 없게 되는 사람이 빗금으로 보입니다.

이 수는 브라우저가 아니라 서버가 권한을 보고 계산합니다(명령: ws preview). 화면은 받은 수를 그리기만 합니다.

새 작업공간 개발 중인 화면

이 작업공간에서 쓸 데이터

  • (일부 고름)내 데이터 전체
  • (고름)/images/ct_20241,248개
  • (고름)/tables/patients4개
  • (고르지 않음) (미리 보는 중)/tables/labs4개

보이는 파일1,252개

이 작업공간의 결과를 볼 수 있는 사람

4명 (전체 31명 중)

관리자는 항상 볼 수 있습니다

이 데이터를 더하면 4명에서 2명으로 줄어듭니다: /tables/labs

필요한 권한 ct_research또는imaging_all중 하나 그리고 ehr_basic또는ehr_full중 하나

이름 (선택) 목록에서 알아보기 쉬운 이름을 적습니다.
작업공간 만들기

누르면 실행할 명령

ws create kim --data /images/ct_2024 /tables/patients
/tables/labs 위에 포인터를 올린 모습입니다. 더하면 볼 수 없게 될 두 사람이 빗금으로 보입니다. 예시이며, 개발 중인 화면을 옮겨 그렸습니다.

데이터를 더하면 줄어드는 까닭

데이터마다 볼 수 있는 사람이 다릅니다. 작업공간의 결과는 고른 데이터를 모두 볼 수 있는 사람에게만 보입니다. 예시에서 CT 영상은 9명, 환자 표는 14명이 볼 수 있지만, 둘 다 쓴 결과는 둘 다 볼 수 있는 4명만 봅니다. 검사 수치 표까지 더하면 2명으로 줄어듭니다.

이 규칙 덕분에 CT 영상과 진료 기록으로 만든 모델이, 진료 기록만 볼 수 있는 사람에게 보이는 일이 생기지 않습니다.

볼 수 있는 사람은 이렇게 정해집니다

/images/ct_2024만 고르면

9명

/tables/patients만 고르면

14명

둘 다 고르면

4명

/tables/labs도 더하면

2명 (전에는 4명)

예시 데이터와 가상의 31명입니다. 칸 하나가 한 사람이고, 줄마다 같은 자리는 같은 사람입니다. 빗금은 데이터를 하나 더 고르면 볼 수 없게 되는 사람입니다. 관리자는 항상 볼 수 있습니다.

볼 수 없는 데이터는 없는 것과 같습니다

작업공간의 /data에는 내가 볼 수 있고 이 작업공간에 고른 파일만 있고, 읽기만 할 수 있습니다.

원본을 복사하지 않고 그대로 보여 줍니다. 볼 수 없는 데이터는 막혀 있는 것이 아니라 아예 없습니다. 목록에 나오지 않고, 그 경로를 고르거나 요청하면 없는 경로와 똑같은 답이 돌아옵니다. 에이전트도 없는 파일은 읽을 수 없습니다.

관리자가 권한을 바꾸면 켜져 있는 작업공간의 /data에도 바로 반영됩니다. 다시 시작할 필요가 없습니다.

터미널

$ ws create kim --data /images/mr_brainCould not create the workspace. Not found: /images/mr_brainreason: No such path: /images/mr_brain. List your data with: lake ls

사용자 kim의 역할로는 볼 수 없는 경로를 적었을 때의 답입니다: /images/mr_brain. 정말 없는 경로를 적었을 때와 같습니다.

데이터는 더할 수만 있습니다

작업공간은 한 번이라도 볼 수 있었던 데이터를 계속 기억합니다. 나중에 권한이 바뀌어 /data에서 파일이 사라져도, 그 데이터로 만든 중간 파일이 작업 폴더에 남아 있을 수 있기 때문입니다. 그래서 권한을 거둬도 그 작업공간의 결과는 계속 그 데이터를 볼 수 있는 사람에게만 보입니다.

데이터를 빼고 싶으면 새 작업공간을 만듭니다. 화면도 그렇게 안내합니다: 「이미 이 작업공간에 있습니다. 빼려면 새 작업공간을 만드세요.」

에이전트는 요청하고, 연구자가 승인합니다

작업공간 안의 에이전트는 코드를 짜고 실행하고, /data에 있는 데이터를 읽을 수 있습니다. 하지만 데이터를 더하거나 결과를 내보내려면 요청만 할 수 있습니다.

연구자는 에이전트가 알려 준 승인 링크를 열고, 무엇이 바뀌는지(보이는 파일 수, 결과를 볼 수 있는 사람 수)를 본 다음 승인합니다. 승인한 명령은 연구자 이름으로, 요청한 그대로 한 번만 실행됩니다. 요청한 뒤 파일이 바뀌면 실행하지 않습니다.

승인은 서버가 지키므로 에이전트가 건너뛸 수 없습니다. 연구자가 포털에서 직접 누른 데이터 더하기와 결과 내보내기는 바로 실행됩니다.

승인 요청 개발 중인 화면

데이터 더하기 요청 a-0031

Claude가 이 작업공간에 데이터를 더하려고 합니다.

요청한 곳
ws-0012
더할 데이터
/tables/labs (4개)
바뀌는 것
언제보이는 파일볼 수 있는 사람
지금1,252개4명 (전체 31명 중)
승인하면1,256개2명 (전체 31명 중)

실행할 명령

ws add-data ws-0012 /tables/labs

승인하면 위 명령이 kim 이름으로 한 번 실행됩니다.

요청한 뒤 파일이 바뀌거나 더해지면 승인해도 실행하지 않습니다.

승인하고 실행거절
에이전트가 보낸 승인 링크를 열면 나오는 화면입니다. 예시이며, 개발 중인 화면을 옮겨 그렸습니다.

작업공간 터미널 (에이전트는 같은 일을 MCP 도구로 합니다)

$ synapse ws request add-data /tables/labsRequested approval: a-0031Data to add: /tables/labsVisible files: from 1,252 to 1,256Who can see this workspace's results: from 4 to 2 of 31 people. Admins can always see.It runs after the researcher approves it in the portal: https://app.example.org/approve/a-0031

작업공간마다 인터넷 규칙

작업공간은 인터넷에 바로 나갈 수 없습니다. 관리자가 작업공간마다 정한 규칙에 따라 프록시를 거쳐서만 나갑니다. 바꾼 규칙은 켜져 있는 작업공간에 바로 적용되고, 바꾼 기록이 남습니다.

작업공간은 바깥 이름(DNS)을 직접 찾을 수 없습니다. 다른 작업공간과 포털에는 어떤 규칙으로도 닿지 않습니다.

Claude만
Claude API만
패키지 저장소 (기본)
Claude API, PyPI, VS Code 확장(Open VSX), Ubuntu apt
인터넷
인터넷 전체, 모든 포트 (사내망 제외)
완전 개방
인터넷과 사내망 전체, 모든 포트
추가 규칙
작업공간마다 도메인, 포트, 주소나 대역을 더 엽니다. 사내 모델 서버가 한 예입니다. 기관 템플릿도 만들 수 있습니다.

관리자 터미널

$ ws net set ws-0012 --allow huggingface.coInternet rules: Packages (packages)Extra rules:    huggingface.coAllowed:        api.anthropic.com, pypi.org, files.pythonhosted.org, open-vsx.org, openvsx.eclipsecontent.org, ports.ubuntu.com, archive.ubuntu.com, security.ubuntu.com, huggingface.coApplied to the running workspace now.

모든 작업공간에 같은 규칙

모든 작업공간의 에이전트는 같은 규칙 파일을 받습니다. 연구자도 에이전트도 이 파일을 고칠 수 없습니다. 작업공간 안에서 sudo로 root가 되어도 마찬가지입니다.

  • 데이터는 /data에서 읽고, 원본을 다른 곳에 복사하지 않습니다.
  • 표는 같은 폴더의 설명 파일(table.yaml)을 먼저 읽습니다.
  • 코드는 ~/project에, 결과는 ~/project/outputs에 둡니다.
  • 랜덤 시드를 고정합니다.
  • 결과를 다시 만드는 명령을 ~/project/reproduce.sh에 적습니다.
  • 막힌 곳은 우회하지 않고 연구자에게 알립니다.
  • 데이터 더하기와 결과 내보내기는 요청으로만 합니다.

규칙은 에이전트에게 주는 지시입니다. 시스템이 지키는 것은 이 파일을 고칠 수 없다는 것과, 결과를 내보낼 때 재현 명령 파일이 있는지 확인하는 것입니다. 에이전트가 규칙대로 했는지는 결과를 내보내기 전에 재현 명령 파일(reproduce.sh)을 열어 확인하세요.

결과를 내보내면, 다시 만들 재료가 함께 남습니다

결과 내보내기에는 내보낼 파일과 재현 명령 파일을 적습니다. 그러면 작업 환경을 잠깐 멈추고 그 순간을 함께 저장합니다.
내보낸 파일
결과 폴더에 복사하고, 파일마다 크기와 SHA-256 해시를 기록합니다. 볼 수 있는 사람만 열고 내려받습니다.
작업 폴더
코드, 중간 파일, 체크포인트, 에이전트와 나눈 대화 기록(~/.claude)까지 그 순간 그대로입니다. 작업공간 주인과 관리자만 볼 수 있습니다.
작업 환경
직접 설치한 시스템 패키지까지 그 순간의 작업 환경 그대로입니다. 작업공간 주인과 관리자만 볼 수 있습니다.
쓴 데이터
그 작업공간이 지금까지 볼 수 있던 데이터와, 거쳐 온 데이터 버전입니다. 복사하지 않고, 지울 수 없게 붙잡아 둡니다.
재현 명령
결과를 다시 만드는 명령을 적은 파일입니다. 지금은 파일이 있는지만 확인하고 실행하지 않습니다.
다시 실행해 확인준비 중
재현 명령으로 다시 실행해 같은 결과가 나오는지 확인하는 기능은 계획되어 있습니다. 지금은 모든 결과에 「아직 다시 실행해 확인하지 않았습니다」가 표시됩니다.

남지 않는 것: 실행 중이던 프로세스의 메모리와 터미널 화면 내용. 한 번도 시작하지 않은 작업공간은 작업 환경을 저장하지 않습니다.

명령 콘솔 개발 중인 화면
release create --workspace ws-0012 --outputs project/outputs/gradcam_017.png project/outputs/roc_curve.png project/outputs/model.pt project/outputs/metrics.json --reproduce project/reproduce.sh
... Recording the input data... Saving the work folder and environment... Working out who can see it... Registering the outputsReleased: r-0137Who can see this release: 4 of 31 people. Admins can always see.Condition: one of ct_research or imaging_all and one of ehr_basic or ehr_full
결과 내보내기를 누른 뒤의 명령 콘솔입니다. 진행 상황이 흐린 줄로 나오고, 끝나면 결과 ID와 볼 수 있는 사람이 나옵니다. 작업공간이 멈춘 시간을 알리는 줄은 뺐습니다. 예시이며, 개발 중인 화면을 옮겨 그렸습니다.

화면, 터미널, API가 같은 명령을 씁니다

화면의 단추는 모두 명령 하나를 실행합니다. 화면 아래 명령 콘솔에 그 명령과 출력이 그대로 나오고, 복사해 터미널에서 다시 실행할 수 있습니다.

예외는 로그인, IDE 열기, 올리고 내려받는 파일 내용입니다.

API 토큰으로 부르는 프로그램, 작업공간 안의 synapse 명령, 에이전트의 도구도 같은 명령을 같은 권한 확인을 거쳐 실행합니다. 그래서 화면이 하는 일은 모두 자동화하고, 감사하고, 가르칠 수 있습니다.

화면은 한국어와 영어를 지원하고, 명령과 콘솔은 영어입니다.

명령 콘솔 개발 중인 화면
ws start ws-0012
... Preparing the workspace network... Checking the internet proxy and gateway... Starting the environmentStarted workspace: ws-0012IDE: https://app.example.org/ws/ws-0012/open
ws add-data ws-0012 /tables/labs
Added data: /tables/labs (1,256 visible files)Who can see this workspace's results: 2 of 31 people. Admins can always see.Condition: ehr_full and one of ct_research or imaging_all
ws start ws-0009
Could not start the workspace. The running workspace limit is reached.reason: 2 workspaces are running or were left running: ws-0007, ws-0012 (limit 2). Stop one (an ended one counts too), then try again.
명령 콘솔의 예시입니다. 시작과 데이터 더하기를 누른 뒤이고, 세 번째는 실행 중인 작업공간 상한에 걸려 실패한 명령입니다. 예시이며, 개발 중인 화면을 옮겨 그렸습니다.

관리자 화면

관리자는 데이터 레이크(폴더 트리, 올리기, 역할 체크), 계정과 역할, 작업공간 현황, 인터넷 규칙과 접속 기록, 결과 관리, 감사 기록을 다룹니다.

관리자 화면은 지금 만들고 있습니다. 화면이 실행할 명령은 지금 동작합니다.

화면: 개발 중실행하는 명령: 지금 동작함

화면실행하는 명령
데이터 레이크 lake lslake addlake grantlake revokelake rm
계정과 역할 synapse user addsynapse user add-rolesynapse user disablesynapse role add
작업공간 현황 ws lsws stopsynapse storage
인터넷 규칙 ws net setws net showws net log
결과 관리 release relaxrelease access grantrelease access deny
감사 기록 synapse audit
데이터 레이크 개발 중인 화면

데이터 레이크올리기

  • images
  • ct_20241,248개
  • mr_brain
  • tables
  • patients4개
  • labs4개

/images/mr_brain의 역할

  • (주지 않음) ct_research
  • (주지 않음) ehr_basic
  • (주지 않음) ehr_full
  • (상위 폴더에서 받음) imaging_all 상위 폴더에서 받음: /images
  • (줌) mr_research 더할 예정
  • (주지 않음) pathology

적용할 명령 1개

lake grant /images/mr_brain mr_research
적용
역할을 체크하면 명령이 쌓이고, 적용을 누르면 실행됩니다. 상위 폴더에서 받은 역할은 회색이고 여기서 뺄 수 없습니다. 예시이며, 개발 중인 화면을 옮겨 그렸습니다.

널리 쓰이는 오픈소스 위에

직접 만든 것은 권한과 기록, 명령, 그리고 이들을 잇는 부분입니다. 나머지는 널리 쓰이는 오픈소스가 맡고, 코딩 에이전트는 상용 제품을 씁니다.
작업 환경
Docker, NVIDIA Container Toolkit
브라우저 편집기
code-server (확장은 Open VSX에서)
데이터와 버전
OpenZFS
인터넷 출입
squid 프록시
SSH
OpenSSH (관리자가 사람마다 허용한 경우)
표 데이터
Parquet 파일, DuckDB

코딩 에이전트: Claude Code: Anthropic의 상용 제품이고, 오픈소스가 아닙니다. 작업공간마다 버전을 고정해 설치합니다.

설치 방식

  • 기관 서버에 설치NVIDIA DGX Spark (GB10, arm64, GPU 1개) 지금 동작함
  • 기관 서버에 설치x86 서버 준비 중
  • 기관 전용 인스턴스 (SaaS)기관 하나만을 위해 Praesidion에서 운영 준비 중

아직 출시 전입니다. 지금은 첫 설치를 준비하고 있습니다.