๋กœ์ผ“๐Ÿพ
article thumbnail

 

 

๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ ํ•ด๋‹น ๊ธ€์—์„œ๋Š” C Compiler ์— ๋Œ€ํ•œ ์ง€์‹์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ „ C Compiler ์— ๋Œ€ํ•ด ์ž์„ธํ•˜๊ฒŒ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ ์€ ์–ธ์ œ๋“ ์ง€ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค :)

 

Github Action Marketplace ์—๋Š” ๋‹ค์–‘ํ•œ ์•ก์…˜๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ Setup Node, Setup Go, Setup Python ์•ก์…˜ ๋“ฑ์„ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ์–ธ์–ด๋‚˜ ํˆด์„ ๋Ÿฌ๋„ˆ์— ์„ค์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๋Ÿฌ๋„ˆ์—์„œ ํŒŒ์ด์ฌ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด,  Setup Python ์•ก์…˜์„ ์‹คํ–‰ํ•ด์„œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Setup Python

 

 

๊ทธ๋Ÿฐ๋ฐ,  ์•„์‰ฝ๊ฒŒ๋„ Setup Python ์•ก์…˜์€ Linux x64, Windows x64, MacOS Apple Silicon(Intel ํฌํ•จ) ์€ ์ง€์›ํ•˜์ง€๋งŒ Linux arm64 ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Setup Python ์ด ์ง€์›ํ•˜๋Š” versions-manifest.json

๋” ๋งŽ์€ ๋ฒ„์ „์„ ๋ณด๊ณ ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ ์ฐธ๊ณ !
MacOS Apple Silicon ๊ฒฝ์šฐ์—๋Š” 3.12.0-alpha.7 ๋ฒ„์ „ ์ดํ›„๋งŒ ์ง€์›ํ•จ
Linux Arm64 ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์—ฌ๊ธฐ ์ฐธ๊ณ ! 

 

๊ทธ๋ž˜์„œ Linux arm64 ํ™˜๊ฒฝ์—์„œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ๋‹ค๋ฉด, Setup Python ์•ก์…˜ ๋ง๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ณ ๋ฏผ ํ•ด๋ณธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ฒซ๋ฒˆ์งธ, Docker Container ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

Python ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํŒŒ์ด์ฌ ๊ด€๋ จ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์ง€์š”. ๊ฐ€์žฅ ์‰ฝ๊ณ  ๊น”๋”ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐ์€ ํ•ฉ๋‹ˆ๋‹ค๋งŒ, ํ•œ๊ณ„์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Container ํ™œ์šฉ

 

์ œ ํ™˜๊ฒฝ ๊ฐ™์€ ๊ฒฝ์šฐ ๋Ÿฌ๋„ˆ๋“ค์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ ARC ๋ฅผ ํ†ตํ•ด ๋™์ž‘ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ด๋ฏธ ํ˜ธ์ŠคํŠธ ์œ„์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

Docker Container ํ™œ์šฉํ•˜๋ ค๋ฉด ๋Ÿฌ๋„ˆ์—  Docker in Docker ๋‚˜ Out of Docker ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ARC ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Docker in Docker ๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜, ๋งŒ์•ฝ Docker ๊ฐ€ ์—†๋Š” ๋‹จ์ˆœ Host ์œ„์— ์‹คํ–‰๋˜๋Š” ๋Ÿฌ๋„ˆ์ผ ๊ฒฝ์šฐ ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Docker ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋˜์ง€๋งŒ, Docker ์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์„ค์น˜ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด?!

 

 

๋‘๋ฒˆ์งธ,  ์บ์‹œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

2vCPU, 8G RAM ์ŠคํŽ™์„ ๊ฐ€์ง„ Host ์œ„์—์„œ ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด make ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋นŒ๋“œ ํ•  ๊ฒฝ์šฐ, 10๋ถ„์ด ๋„˜๊ฒŒ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ์งง๋‹ค๋ฉด ์งง๊ณ , ๊ธธ๋‹ค๋ฉด ๊ธด ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

 

ํ™•์‹คํ•œ ๊ฑด ๋งค๋ฒˆ ์•ก์…˜์„ ์‹คํ–‰ ํ• ๋•Œ๋งˆ๋‹ค ๊ฒช๊ธด์—” ๋„ˆ๋ฌด๋‚˜ ํฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

 

ํ•œํŽธ, ARC ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋Ÿฌ๋„ˆ๋“ค์€ Ephemeral(์ผ์‹œ์ ) ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ด์ „์— ์‹คํ–‰๋œ ์•ก์…˜์ด๋‚˜ Jobs ์— ๋Œ€ํ•ด์„  ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€์•Š๊ณ , ๋งค๋ฒˆ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค. Stateful ํ•˜์ง€ ์•Š๊ณ  Stateless ํ•˜์ฃ !

 

๊ทธ๋ž˜์„œ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ ค๋ฉด ๊นƒํ—™ ์•ก์…˜์—์„œ ์ œ๊ณต๋˜๋Š” ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ AWS EFS ์™€ ๊ฐ™์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด์„œ Stateful ํ•˜๊ฒŒ ์œ ์ง€์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊นƒํ—™ ์•ก์…˜์—์„œ ์ œ๊ณต๋˜๋Š” ์บ์‹œ ๊ธฐ๋Šฅ์˜ ์ €์žฅ ์ตœ๋Œ€ ์‹œ๊ฐ„์€ 7์ผ
AWS EFS ์™€ ๊ฐ™์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด์„œ ARC ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋Ÿฌ๋„ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Stateful ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ ์ฐธ๊ณ !

 

๋‹ค์‹œ ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€, ๊ฒฐ๊ตญ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ccache, conan ๋“ฑ๊ณผ ๊ฐ™์€ ํˆด์„ ์ด์šฉํ•ด์„œ ์บ์‹ฑ์„ ์ง„ํ–‰ํ•˜๊ณ , ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋Š” ARC ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋Ÿฌ๋„ˆ๋“ค๊ณผ ๋งˆ์šดํŠธ๋œ AWS EFS ์—์„œ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

cache

 

์‹ค์ œ๋กœ ๋ช‡๋ช‡ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋Ÿฐ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ด ๋ฐฉ๋ฒ•์€ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด ๊ด€๋ฆฌ ํฌ์ธํŠธ๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

์„ธ๋ฒˆ์งธ, Pyenv ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Pyenv๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Python์„ ์„ค์น˜ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒŒ์ด์ฌ ๋ฒ„์ „์ด ์žˆ์–ด๋„ ์„œ๋กœ ์ถฉ๋Œ ๋‚  ๊ฐ€๋Šฅ์„ฑ์„ ํ˜„์ €ํžˆ ์ค„์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ Pyenv ๋ฅผ ์จ๋„ ํŒŒ์ด์ฌ์„ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ณ , ๋นŒ๋“œ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ฑฐ๋‚˜ ์—†์• ๊ณ ์ž ํ•˜๋ ค๋ฉด AWS EFS ๋ฅผ ๋งˆ์šดํŠธํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€์‹œ์ผœ ์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

pyenv

 

๊ทธ๋ฆฌ๊ณ  Pyenv ์ž์ฒด๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋‹ˆ AWS EFS ์•ก์„ธ์Šค ํฌ์ธํŠธ๋ผ๋Š” ๊ด€๋ฆฌ ํฌ์ธํŠธ ํ•˜๋‚˜, Pyenv ๊ด€๋ฆฌ ํฌ์ธํŠธ ํ•˜๋‚˜ ์ด 2๊ฐœ์˜ ๊ด€๋ฆฌํฌ์ธํŠธ๊ฐ€ ๋” ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ 100% ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. 

 

์‚ฌ์‹ค ์ด ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค. Setup Python ์•ก์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋๊ฑฐ๋“ ์š”!

 

Setup Python ์•ก์…˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๊ฒฐ๊ตญ python ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์„ ์„ค์น˜(install-python.ts, setup-python.ts)ํ•˜๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ์ฝ”๋“œ(find-python.ts)๊ฐ€ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

Setup Python ์ฝ”๋“œ

 

install-python.ts ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด, make ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด๋ฏธ ๋นŒ๋“œ๋œ Artifact ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
install-python.ts - InstallCpythonFromRelease
find-python.ts - useCpythonVersion

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ํ•˜๋‚˜๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋ณด์•„ํ•˜๋‹ˆ MANIFEST_URL ์—์„œ ๋ฏธ๋ฆฌ ๋นŒ๋“œํ•˜๊ณ  ์••์ถ•ํ•œ ํŒŒ์ด์ฌ Artifact ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์••์ถ•์„ ํ•ด์ œํ•œ ํ›„ find-python.ts ๋ฅผ ํ†ตํ•ด ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋Ÿฌ๋„ˆ์— ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์•„ํ•˜! Setup Python ์•ก์…˜์„ ๋ฒค์น˜๋งˆํ‚นํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค!

์ตœ๋Œ€ํ•œ ๋˜‘๊ฐ™์ด ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ฃ .

 

์ƒ๊ฐํ•ด๋ณธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š”,

์‹œ๋‚˜๋ฆฌ์˜ค ๋„์‹ํ™”

 

๋กœ์ปฌ์—์„ 

  1. Docker Buildx ๋ฅผ ํ™œ์šฉํ•˜์—ฌ Linux arm64 ํ™˜๊ฒฝ์—์„œ Python ์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. ๋นŒ๋“œํ•œ Python Artifact ๋ฅผ Nexus ์™€ ๊ฐ™์€ ์ €์žฅ์†Œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. versions-manifest.json ์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ Python Artifact ๋ฅผ Following ํ•ฉ๋‹ˆ๋‹ค.

 

์•ก์…˜ ๋ถ€๋ถ„์—์„ 

  1. ์›ํ•˜๋Š” ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
  2. versions-manifest.json ์„ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” Python Artifact ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  3. ์••์ถ•์„ ํ•ด์ œํ•œ ํ›„์—, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋ฐ”๋กœ ํ•˜ํŽธ์—์„œ๋Š” ์œ„ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

ํ•˜ํŽธ์—์„œ ๋ฐ”๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

profile on loading

Loading...