Skip to content

Latest commit

ย 

History

History
117 lines (83 loc) ยท 5.13 KB

File metadata and controls

117 lines (83 loc) ยท 5.13 KB

License OS CI Frontend Tests via Docker Deploy Expo Web to GitHub Pages

React Native TypeScript Jest Expo

๐Ÿ‡บ๐Ÿ‡ธ English | ๐Ÿ‡ฏ๐Ÿ‡ต ๆ—ฅๆœฌ่ชž | ๐Ÿ‡จ๐Ÿ‡ณ ็ฎ€ไฝ“ไธญๆ–‡ | ๐Ÿ‡ช๐Ÿ‡ธ Espaรฑol | ๐Ÿ‡ง๐Ÿ‡ท Portuguรชs (Brasil) | ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด | ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch | ๐Ÿ‡ซ๐Ÿ‡ท Franรงais

"web_ui"

PlayGround

๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ธฐ๋ฐ˜ Python ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ.


๊ฐœ์š”

Client Side Python์€ Pyodide๋กœ ๊ตฌ๋™๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ Python ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ์ด๋‹ค.
๋ชจ๋“  Python ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ € ํƒญ ๋‚ด๋ถ€์—์„œ ์™„์ „ํžˆ ์‹คํ–‰๋˜๋ฉฐ(WebAssembly, ๋ฐฑ์—”๋“œ ์—†์Œ), ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

์ด ๋„๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„์— ์ ํ•ฉํ•˜๋‹ค.

  • ์ž‘์€ Python ์Šค๋‹ˆํŽซ์„ ๋น ๋ฅด๊ฒŒ ์‹œํ—˜ํ•ด ๋ณด๊ธฐ
  • ์ˆ˜์—…์ด๋‚˜ ์›Œํฌ์ˆ์—์„œ Python ๊ธฐ์ดˆ๋ฅผ ์‹œ์—ฐํ•˜๊ธฐ
  • ์•ˆ์ „ํ•œ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ๊ฐ„๋‹จํ•œ ์ˆ˜์น˜ ๊ณ„์‚ฐ์ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์—…์„ ์‹คํ—˜ํ•˜๊ธฐ
  • WebAssembly + Pyodide๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— โ€œ์ง„์งœโ€ Python์„ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

๊ธฐ๋Šฅ

  • ์™„์ „ํ•œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์‹คํ–‰

    • Pyodide๋ฅผ ์‚ฌ์šฉํ•ด WebAssembly์—์„œ CPython์„ ์‹คํ–‰ํ•œ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ธ์ฆ์ด ํ•„์š” ์—†๋‹ค.
  • ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์—๋””ํ„ฐ + ์ฝ˜์†”

    • Python ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ํ…์ŠคํŠธ ์˜์—ญ.
    • stdout ๋ฐ stderr๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ฝ˜์†” ์˜์—ญ.
    • ๋ฒ„ํŠผ: Run, Stop, Clear, Load Sample, Copy Output.
  • ๋ถ€๋“œ๋Ÿฌ์šด โ€œStopโ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜

    • ์‹คํ–‰์€ ์†Œํ”„ํŠธ ์ทจ์†Œ ํ† ํฐ์œผ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ๋‹ค.
    • Stop์„ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ์‹คํ–‰์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ทจ์†Œ๋˜๋ฉฐ, ๋Šฆ๊ฒŒ ๋„์ฐฉํ•œ ๊ฒฐ๊ณผ๋Š” UI๋ฅผ ๋ง๊ฐ€๋œจ๋ฆฌ๋Š” ๋Œ€์‹  ๋ฌด์‹œ๋œ๋‹ค.
  • ๋ฐ˜์‘ํ˜• ์›น UI

    • Expo / React Native Web๊ณผ Material UI ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์ถ•๋˜์—ˆ๋‹ค.
    • ๋ ˆ์ด์•„์›ƒ์€ ๋‹ค์–‘ํ•œ ๋ทฐํฌํŠธ ํฌ๊ธฐ(๋ฐ์Šคํฌํ†ฑ / ํƒœ๋ธ”๋ฆฟ)์— ๋งž๊ฒŒ ์กฐ์ •๋œ๋‹ค.
  • Docker๋ฅผ ํ†ตํ•œ ๊ฒฐ์ •์  CI

    • Jest ํ…Œ์ŠคํŠธ๋Š” docker-compose.test.yml์„ ์‚ฌ์šฉํ•ด Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋œ๋‹ค.
    • CI ๋ฐ Docker ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ GitHub Actions ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ œ๊ณต๋œ๋‹ค.
  • GitHub Pages๋กœ ์ž๋™ ๋ฐฐํฌ

    • GitHub Actions ์›Œํฌํ”Œ๋กœ๊ฐ€ Expo ์›น ๋ฒˆ๋“ค์„ ๋นŒ๋“œํ•˜๊ณ  main ๋ธŒ๋žœ์น˜์šฉ GitHub Pages์— ๊ฒŒ์‹œํ•œ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹

์•ฑ์ด ์ฒ˜์Œ ๋กœ๋“œ๋˜๋ฉด ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. CDN์—์„œ Pyodide๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  2. Pyodide ๋Ÿฐํƒ€์ž„์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  runPythonAsync๋ฅผ ๋…ธ์ถœํ•œ๋‹ค.
  3. Python ์ถœ๋ ฅ์ด ํŽ˜์ด์ง€ ๋‚ด ์ฝ˜์†”๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ๋˜๋„๋ก stdout ๋ฐ stderr์šฉ ์ปค์Šคํ…€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  4. ๊ฐ„๋‹จํ•œ ์‹คํ–‰ ํ† ํฐ์„ ์‚ฌ์šฉํ•ด soft Stop์„ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ๊ฐ ์‹คํ–‰๋งˆ๋‹ค ๋‚ด๋ถ€ execId๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.
    • ์˜ค๋ž˜๋œ execId๋ฅผ ๊ฐ€์ง„ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ํ•ด๋‹น ์ถœ๋ ฅ์€ ๋ฒ„๋ ค์ง„๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์ด์ „ ์‹คํ–‰์˜ ์˜ค๋ž˜๋œ ๊ฒฐ๊ณผ๊ฐ€ ์ฝ˜์†”์„ ์˜ค์—ผ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.

์ด ๋ชจ๋“  ๊ณผ์ •์€ ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๋ฐฑ์—”๋“œ API ํ˜ธ์ถœ์€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.


๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

1. ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

2. ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ:

# set environment variables:
export REACT_NATIVE_PACKAGER_HOSTNAME=${YOUR_HOST}

# Build the image
docker compose build

# Run the container
docker compose up

3. ํ…Œ์ŠคํŠธ:

docker compose -f docker-compose.test.yml up --build --exit-code-from frontend_test 

License

  • Apache License 2.0