- ์์ค์ฝ๋ zipํ์ผ ๋ค์ด๋ก๋ ๋ฐ ์์ถ ํ๊ธฐ
- CMD์ฐฝ์์ ์์ถ ํด์ ํ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
- CMD์ฐฝ์์ 'npm install' ๋ช ๋ น์ด ์ ๋ ฅ
- CMD์ฐฝ์์ 'npm run start' ๋ช ๋ น์ด ์ ๋ ฅ
- ์น๋ธ๋ผ์ฐ์ ธ์์ 'http://localhost:3000' ์ผ๋ก ์ด๋
- ์คํ ์์
- ์๋ฌ๊ฐ ์์ ๋
- ํ๊ธ ์ถ๋ ฅ
Node.js์ Python ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ๋ฒ์ ํ์ตํ๊ณ ์ด๋ฅผ ์ ์ฉํ์ฌ, ์น์์ ํ์ด์ฌ ์ฝ๋๋ฅผ ์ ๋ ฅ ๋ฐ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ ๋ค.
์๋ฒ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ Node.js์ Express.js ํ๋ ์ ์ํฌ๋ฅผ ์ฌ์ฉํ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ html, css, javascript ๊ทธ๋ฆฌ๊ณ bootstrap4๋ฅผ ํ์ฉํ์๋ค. Node.js์์ Python ํ์ผ์ ์คํ์ํค๊ธฐ ์ํ์ฌ 'python-shell' npm์ ์ฌ์ฉํ์์ผ๋ฉฐ 'file-system' npm์ ํ์ฉํ์ฌ ํ์ผ์ ์ฝ๊ณ ์ธ ์ ์๊ฒํ์๋ค.
ํ๋ก๊ทธ๋จ ๋์ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค. ๋จผ์ ์คํํ ์ฝ๋๋ฅผ ์
๋ ฅ ๋ฐ์ ๋ค POST ๋ฐฉ์์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ๊ทธ ๋ค์ ์ ์ก ๋ฐ์ ์ฝ๋์ ์คํ ์๊ฐ ์ธก์ ๊ณผ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ๋ง๋๋ ์ฝ๋๋ฅผ ๋ง๋ถ์ธ๋ค. ์์ฑ๋ ์ฝ๋๋ฅผ 'exec.py' ํ์ผ๋ก ๋ง๋ค๊ณ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ณ ์๋ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ค. ๊ทธ ๋ค์ python-shell์ ์ด์ฉํ์ฌ ์ ์ฅ๋ ํ์ด์ฌ ํ์ผ์ ์คํ์ํค๋ค. ํ์ด์ฌ ํ์ผ์ด ์คํ๋ ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ๋ง๋๋ ์ฝ๋์ ์ํด์ ๊ฒฐ๊ณผ๋ฌผ์ด 'output.out'ํ์ผ์ ์ ์ฅ๋๋ค. Node.js์์๋ ์ด ํ์ผ์ ์ฝ์ด์ ์น์ ์ถ๋ ฅ์ํจ๋ค.
ํ์ด์ฌ ์ฝ๋ ์คํ ๊ฒฐ๊ณผ๋ฅผ python-shell runํจ์์ ๋ฐ์ดํฐ๋ก ๋ฐ๋ก ๊ฐ์ ธ์ค์ง ์๊ณ ํ์ผ๋ก ์ ์ฅํ ๋ค ํด๋น ํ์ผ์ ์ฝ์ด์ค๋ ๋ฐฉ์์ ์ฌ์ฉํ์๋๋ฐ ๊ทธ ์ด์ ๋ ํ๊ธ์ ์ธ์ฝ๋ฉ ๋๋ฌธ์ด๋ค. runํจ์๋ก ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ utf-8 ์ธ์ฝ๋ฉ์ด ๋์ง ์์์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์ ํ๊ธ์ด ์๋ ๊ฒฝ์ฐ ๊นจ์ง๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋ ์คํ ๊ฒฐ๊ณผ๋ฅผ utf-8์ผ๋ก ์ธ์ฝ๋ฉํ์ฌ ํ์ผ๋ก ์ ์ฅํ ๋ค, ํด๋น ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ํ์๋ค.
์ด ํ๋ก์ ํธ๋ฅผ ํตํด Node.js์ ํ์ด์ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ๋ฒ์ ์ ์๊ฒ๋์๋ค. ์ด๋ ํ์ด์ฌ์ ์นํฌ๋กค๋ง, ๋ฐ์ดํฐ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ํ๋ก๊ทธ๋จ์ ์น์ ์ ์ฉํ ์ ์์ ๊ฒ์ผ๋ก ๊ธฐ๋๋๋ค. ๋ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ํ๊ธ ์ถ๋ ฅ์ด ๊นจ์ง๋ ํ์์ ๊ณ ์น๋๋ฐ ๋ง์ ์๊ฐ์ ์์ํ์๋๋ฐ ์ด๋ฅผ ํตํด ์ธ์ฝ๋ฉ ๋ฐฉ์์ธ utf-8์ ๋ํด ๋ ๊ณต๋ถํ๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค. ์ต์ข ์ ์ผ๋ก ํ์ด์ฌ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ๋ก ๋ง๋๋ ํจ์์ธ sys.stdout=open์์ encoding='utf8'์ ์จ์ ํ์ผ์ ์ธ์ฝ๋ฉํ๊ณ ์ด ํ์ผ์ node.js์์ ์ฝ๋ ๋ฐฉ์์ ํตํด ํ๊ธ ๊นจ์ง ํ์์ ํด๊ฒฐ ํ ์ ์์๋๋ฐ, ๊ณผ์ ์ ํ๋ค์์ง๋ง ๊ฒฐ๊ณผ๋ฌผ์ด ๋งค์ฐ ๋ง์กฑ์ค๋ฌ์ ๋ค.
- Ajax๋ฅผ ์ด์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์ฝ๋๋ฅผ ์ ๋ ฅํ์ ๋ ํด๋น ํ์ด์ง๋ฅผ ๋ฒ์ด๋์ง ์๊ณ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋ ๋ฉ์ง ํ๋ก๊ทธ๋จ์ผ๋ก ๊ฑฐ๋ญ๋ ์ ์์ ๊ฒ์ด๋ค.
- ํ์ด์ฌ์ Input() ํจ์๋ฅผ ์ด์ฉ ๋ชปํ๋ ์ ์ด ์์ฝ๋ค. ํ์ด์ฌ ์ฝ๋๊ฐ ์คํ ๋ ๋, ์ฝ์ ์ฐฝ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ ์คํ ํ ์ ๋ ฅ ์ฐฝ์ Input ํจ์๋ฅผ ๋ฃ์ผ๋ฉด EOF ์ค๋ฅ๊ฐ ๊ฒฐ๊ณผ๋ก ๋ํ๋๋ค. Node.js์์ python-shell option value๋ก ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ์ธ์๋ฅผ ์ ๋ฌ ํ ์๋ ์์ง๋ง ํ์ด์ฌ ์ฝ๋์์ Input์ด ์๋ sys.argv๋ก ์ธ์๋ฅผ ์ ๋ฌ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ Input ์ค๋ฅ์ ํด๊ฒฐ์ฑ ์ ๋์ง ๋ชปํ๋ค. ๋์์ผ๋ก python-shell์ sendํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์์ผ๋ ํ๊ธ์ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ ๋ฌธ์ ๋ก ์ ๋ฌ์ด ๋ถ๊ฐ๋ฅํ์๋ค.
- C++, Java ๋ฑ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ปดํ์ผ ํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค. 'child-process' npm์ ์ด์ฉํ์ฌ ํ์ด์ฌ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ ์ฐ๊ตฌํด๋ด์ผ๊ฒ ๋ค.