Ryan Dahl의 JavaScript Containers에 대한 생각
(tinyclouds.org)- Docker는 리눅스 컨테이너를 대중화 : OS 수준 가상화로 소프트웨어 배포를 쉽게 해줌
- Cloudflare Workers 나 Deno Deploy 는 JS Container 개념을 구현한 것(서로 다른 환경에서)
- JS 컨테이너는 향후 몇 년간 어떻게 진행될까 ?
Universal Scripting Language
- 점점 더 많은 것들이 웹을 기반으로 연동중 : The web is eating the world
- 웹은 인류 정보의 기본 매체이고, JS는 웹 인프라에 깊게 연동되어 있어서 다른 언어들과 다름
- 스크립팅 언어는 많은 서버쪽 문제들을 해결해주며, 비즈니스 로직을 더 빠르고 저렴하게 작성 가능
- 스크립트 언어는 유용하고, 서로 많이들 비슷하며, JavaScript가 가장 광범위하게 이용중이고 미래에도 사용 가능
- 즉 JavaScript는 유니버설 스크립팅 언어라고 생각할 수 있음
Shell : Executables :: JavaScript : WebAssembly
-
서버를 위한 새로운 상위레벨 컨테이너인 JavaScript Sandbox가 등장
-
Linux 컨테이너가 타겟하는 문제를 해결하기 위한 것은 아님
-
단순화의 결과로 출현한 것
→ 웹 서비스 비즈니스 로직의 Boilerplate를 최소화
→ 브라우저와 개념을 공유하며, 프로그래머가 알아야 할 개념들을 최소화 -
모든 웹 엔지니어들은 JavaScript 브라우저 API를 이미 알고 있음
→ JS 컨테이너 추상화는 같은 브라우저 API 기반으로 만들어졌기 때문에 알아야 할 내용이 줄어듦
→ JS의 Universality가 복잡도를 줄임 -
Shell 은 Unix 프로그램을 실행하기 위한 인터프리팅 스크립트 언어
→ 조건식, 루프, 변수가 있지만 제한적이어서 프로그래밍 하기는 어려움. 실제 기능은 실행파일들이 수행 -
이 새로운 서버 추상화 레이어에서는 JS가 Shell의 위치를 차지함
→ Bash/Zsh 보다는 스크립팅에 적합하지만, Shell 이 실행파일을 호출하는 것처럼 JS Sandbox는 WASM을 호출함
→ 이미지 리사이징 처럼 복잡한 작업이 필요하다면 JS에서 작성하는 것보다 WASM을 이용하는 것이 좋음
→ bash에서 이미지 리사이징을 하지 않고 Imagemagick을 호출하듯이
The North Star
- 스크립트의 미래는 브라우저 JavaScript임
- Node.js 의 가장 근본적인 실수는 새로운 API가 표준화되면서 브라우저에서 벗어나 너무 많은 것을 발명해 버렸다는 것
→ 2010년엔 우리는 ES 모듈도 없었지만, 표준화 되고나서 Node로 가져와야 했음
→ Promise, Async/Await, Fetch, Streams 등 많은 것이 그랬음
→ 비표준인 CommonJS require, package.json, node_modules, npm, 글로벌 process 객체가 궁극적으로는 표준화 되어서 브라우저에 추가되거나, 웹기반의 다른것으로 교체됨 - 고수준의 컨테이너는 아직 표준화되지 않았고, 이 모든 것이 어떻게 전개될지 아직 잘 모름
- 현재 Cloudflare Workers 와 Deno Deploy는 FetchEvent API를 사용하지만, 더 나은 인터페이스를 찾을 수도 있음
결론
- JavaScript 는 범용 스크립팅 언어임
- JavaScript 의 보편성으로 인해 서버를 단순화 하는 새로운 컨테이너 같은 추상화가 등장하고 있음
- Linux 컨테이너가 사라진다는 얘기는 아님. 그 수준의 추상화는 계속 유용할 것
→ 사람들이 작성하는 많은 "비즈니스 로직"에 대해서는 다소 로우 레벨의 추상화 라는 것
→ 웹사이트를 구축할 때 systemd 설정 같은 것은 boilerplate 임 - 아마도 많은 "웹 서비스"들은 Linux 컨테이너가 아닌 JavaScript 컨테이너 관점에서 생각하면 단순화 할 수 있음
- 우린 Deno에서 이 아이디어를 탐구 하는 중임
→ 서버 추상화를 근본적으로 단순화하려고 노력중
제 나름대로 요약해보면
- 요즘 WASM을 이용한 샌드박스 기술들이 많이 나오고 있다
- JavaScript는 WASM을 구동하는 스크립트 처럼 사용한다.
- WASM 샌드박스는 OS부터 컨테이너및 프레임워크까지 모든게 올라가는게 가능하다
- 그러면 이런 식의 JS Container로 비즈니스 로직만 신경쓰는 새로운 고수준 컨테이너 표준이 나올 수도 있다.
라고 정리되지 않을까 합니다.
이해를 돕기 위한 다른 링크들