자바스크립트를 활성화 해주세요

d011 Goormide에 Scratch를 설치해 봤습니다

 ·  ☕ 3 min read

2020년부터 일본에도 프로그래밍 과정이 정규과목으로 편성되어 초등학생들도 scratch를 학교에서 배우게 되었습니다. 일본 yahoo는 아동들에게 hackkids라는 이름의 행사를 통해서 무료로 scratch로 프로그래밍을 알리는 행사를 하고 있었는데, 정규과목으로 편성되는 올해 부터는 학교에서 정식으로 배우게 되니 이 행사를 계속하는 것은 중단하는 결정을 내렸던 것 같습니다.

scratch를 goormide에서 실행해보았습니다.

컨테이너 생성

Node.js 빈 프로젝트 를 선택합니다.

Node.js 버전 12.xx로 업그레이드
체크박스를 하고 컨테이너를 만들면, “커스텀 스크립트를 설치하고 있습니다” 라는 프로세스가 추가가 되는 모양입니다.

ubuntu의 빈 프로젝트를 만들때는 컨테이너가 한국IDC에서 만들어졌던 것 같은데, Node.js 빈 프로젝트는 미국 오리건IDC에서 생성되는 모양입니다.

대쉬보드에서
실행 URL과 포트에 8079 포트를 추가합니다. 도메인은 적당히 서브도메인으로 tkim-scratch 를 입력했습니다.
https://tkim-scratch.run-us-west2.goorm.io 8079

scratch-vm

scratch-vm 프로젝트에는 개발 편의를 위해 웹서비스를 띄우는 nodejs 어플리케이션을 함께 제공하고 있습니다. npm start를 실행하면 8073 포트로 웹 서비스를 실행하므로 우선, 내부에서 http://localhost:8073/ 에 접속을 확인해 보았습니다.

설치, 실행

다음과 같이 설치하고 실행하였습니다.

cd /workspace/scratch
git clone https://github.com/LLK/scratch-vm
cd scratch-vm
npm install
npm start

몇몇 라이브러가 오래되었다는 경고와 함께 빌드까지 시간이 오래걸렸지만, 그래도 서버가 기동되었습니다.

실패

curl 커맨드로localhost로 값을 불러오는 것은 되지만, 외부에서 접속은 허용되지 않았습니다.

root@goorm:/workspace/scratch# curl localhost:8073
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>
root@goorm:/workspace/scratch# curl http://tkim-scratch.run-us-west2.goorm.io:8073/
curl: (7) Failed to connect to tkim-scratch.run-us-west2.goorm.io port 8073: 연결 시간 초과

뭔가 실행할 때 옵션을 빠뜨렸을까?

package.json의 내용을 보니 서버는 webpack-dev-server를 사용하고 있었습니다.
다시 webpack.config.js를 보니, production모드인지 어떤지는 환경변수 NODE_ENV의 값으로, 포트는 환경변수에서 설정되어 있으면 그 값을, 없으면 8073포트를 사용하고 있었습니다.

NODE_ENV=production npm start

환경변수에 production, 3000을 설정하고 실행해 봤습니다.
NODE_ENV=production PORT=3000 npm start

서버사이드에서 실행까지는 잘 되는데, 바깥쪽에서 브라우저로 접속하려고 하면 타임아웃이 발생하고 잘 되지 않습니다.

netstat으로 확인해 봤습니다.

1
2
root@goorm:/workspace/scratch# netstat -na | grep 3000
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN

여기까진 문제가 없는 것 같습니다. OS쪽 firewall을 살펴 봤습니다.

1
2
3
4
root@goorm:/workspace/scratch# ufw status verbose
bash: ufw: 명령어를 찾을 수 없음
root@goorm:/workspace/scratch# iptables -L
bash: iptables: 명령어를 찾을 수 없음

흐음.. 어떻게 알 수 있지?? ufw 를 설치하고 실행해 봤습니다.
apt install ufw

1
2
3
4
5
6
root@goorm:/workspace/scratch# ufw status verbose
ERROR: 문제가 발생했습니다 iptables: iptables v1.6.1: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
root@goorm:/workspace/scratch# iptables -L
iptables v1.6.1: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

잘 안되었습니다.

해결

혹시나 해서, port forwading을 사용해 봤습니다. 내부의 포트 3000번을 넣으니 적당한 포트번호로 선택되어 나왔습니다.

http://34.212.168.136:56615/

아. 이번엔 타임아웃이 나오지 않고 연결이 되었습니다. 하지만

Cannot GET /

으로 나오네요. github에 있는 대로 /playground를 붙여 실행해 봤습니다.

결과화면

실행한 웹 모습은 다음과 같습니다

d011_scratch_playground.png

동작확인은 제가 Scratch를 잘 다룰 줄 몰라서 생략합니다.

레퍼런스

공유하기

tkim
글쓴이
tkim
Software Engineer