파일 CRUD

  1. 파일에 변경이 발생했을 때, 변경과 관련된 내용(line, 변경내용)만을 서버로 전달하여 저장하는 방법이 있을 것이고, 변경된 파일을 통째로 서버로 전달하여 저장하는 방법이 있을 것이다.
    1. 변경 내용만을 서버로 전달하여 저장하는 방법에 대해서
      1. diff2html.js, node-diff3 등을 사용하면 git의 파일 변경 추적과 비슷한 방식으로 파일의 변경사항을 확인할 수 있을 것 같다.
      2. 이 경우 서버는 파일 시스템을 통해 파일을 저장할 때 해당 파일을 세밀하게 조정해야한다.
    2. 변경된 파일을 통째로 서버로 전달하여 저장하는 방법에 대해서
      1. 이 경우 서버는 새로운 파일을 만들어 덮어씌우면 되므로 세밀한 조정이 필요 없어진다.
      2. 이 문제를 미약하게 해결하기 위해서 압축 전*수송 방식을 사용할 수 있을 것으로 보인다.
    3. 결론: 전자가 최적의 방법으로 보이지만 현실적으로는 후자를 선택하는 것이 좋아 보인다.
  2. 프로젝트 생성 시 해당 파일은 반영구적으로 저장되어야 한다. 이를 저장하는 방법에는 여러가지가 있을 것 같다.
    1. 리눅스 파일 시스템에 원본 파일과 디렉터리 구조를 그대로 유지하며 저장
    2. 다른 방법으로 저장
      1. DB?
      2. 압축
    3. 결론: 리눅스 파일 시스템을 통해 저장하는 것이 좋을 것 같다. 일단 파일 시스템에 저장되어 있으면 도커 가상화를 통해 수행시키기에 훨씬 수월하다.
  3. 디렉터리를 어떻게 추상화할 것인가?

프로그램 실행

  1. 프로그램 실행은 도커 가상화 기술을 통해 수행되면 좋을 것 같다. 서버 자체에서 실행되는 경우 malicious 한 코드에 대해 보안 헛점 발생 가능

터미널

  1. 터미널은 어떻게 구현해야하나?
    1. Web IDE의 터미널은 주로 XTermJS 라는 웹 기반 터미널 에뮬레이터 라이브러리와 웹소켓을 통해 구현된다.
    2. 이것은 곧 프로젝트에 사용자가 접속되어있다면 도커 컨테이너도 실행중이어야함을 의미한다.
    3. 프론트
      1. XTermJS를 통해 터미널 뷰를 제공하며, 사용자의 입력을 처리한다.
      2. 사용자의 요청을 백엔드 서버로 넘긴다 - Web Socket 사용
    4. 백엔드
      1. 백엔드 서버는 요청을 받아 해당하는 도커 컨테이너에 명령을 수행시킨다.
      2. 이후 결과가 READ 되는대로 웹소켓을 통해 클라이언트로 전달한다.]
      3. 이때 이벤트 기반 프로그래밍 적용해보면 좋을 듯!