Projects
Web IDE Backend Architecture - Web IDE ์ง์ ๊ฐ๋ฐํ๊ธฐ
9/27/2024

๊ฐ์
๊ตฌ๋ฆํค ํธ๋ ์ด๋์์ 12์ ์ฝ ํ๋ฌ ๊ฐ ์ํํ๋ ํ๋ก์ ํธ์ธ "ChatGPT์ ํจ๊ปํ๋ Web IDE" ํ๋ก์ ํธ๋ฅผ ์๊ฐํฉ๋๋ค.
์ ๋ ๋ฐฑ์๋ 4๋ช , ํ๋ก ํธ์๋ 3๋ช ์ผ๋ก ๊ตฌ์ฑ๋ ํ์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ด์ ํ์ฅ์ผ๋ก์ ํ๋ก์ ํธ๋ฅผ ๋ฆฌ๋ํ์ต๋๋ค.
์ ๋งํฌ์์ ๋ฐ๋ชจ ์์์ ๋ณผ ์ ์์ด์
์ฃผ์ ๊ธฐ๋ฅ
๊ธฐ๋ณธ์ ์ผ๋ก๋ Goorm IDE์ ๊ธฐ๋ฅ์ ๋ชจ๋ฐฉํ๋, ChatGPT์ ์ํ ํธ์๊ธฐ๋ฅ์ ๋ถ๊ฐ์ ์ผ๋ก ์ ๊ณตํ๋๋ก ํ์ต๋๋ค.
์์ ๋ก๊ทธ์ธ : ์์ ๋ก๊ทธ์ธ์ ํตํด ์ฌ์ฉ์๋ ๋ฒ๊ฑฐ๋ก์ด ํ์๊ฐ์ / ๋ก๊ทธ์ธ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ๋จ์์ ๊ฐ๋ฐ ํ๊ฒฝ ์ ๊ณต : ์ฌ์ฉ์๋ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ , ์์ค์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ ์คํ์ํฌ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ด์ฉ์ ์ ์ฅ๋๋ฉฐ, ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ์ด๋ํด ํจ๊ป ์์ค์ฝ๋๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
๋ค์ํ ์ธ์ด ์ง์ (Python, Java, CPP, ... ) : ํ๋ก์ ํธ ์์ฑ ์์ ์ ์ฌ์ฉํ ์ธ์ด๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
์ฑํ : IDE์ ํ๋ก์ ํธ์ ์ฐธ์ฌํด์๋ ์ฌ์ฉ์๊ฐ์ ํ ์คํธ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
๋ค์ค ์ฌ์ฉ์ ์ค์๊ฐ ํธ์ง : ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ํ๋์ ํ์ผ์ ์ ๊ทผํ์ฌ ์์ค์ฝ๋๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ์ด ๋ด์ฉ๋ค์ ์ค์๊ฐ์ผ๋ก ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋๋ค.
ํฐ๋ฏธ๋ : ํฐ๋ฏธ๋์ ํตํด ํ๋ก์ ํธ ํ์ผ์ ๋ํ ์กฐ์์ ํ ์ ์์ผ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ํ์ํฌ ์ ์์ต๋๋ค.
ChatGPT๋ฅผ ํตํ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ์ง๋ฌธ : ํ์ฌ ์์ฑ์ค์ธ ์์ค์ฝ๋์ ๋ํ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๊ฐํธํ๊ฒ ๋ฐ์ ์ ์์ผ๋ฉฐ, ์ง๋ฌธ์ด ์๋ ๊ฒฝ์ฐ ๋ด์ฅ๋์ด์๋ ChatGPT ๊ธฐ๋ฅ์ ํตํด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋ณผ ์ ์์ต๋๋ค.
์ํคํ ์ฒ

๋์ปค ์ปจํ ์ด๋๋ฅผ ํตํ ์ปดํ์ผ๊ณผ ์คํ
Web IDE๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผ ํ ๋ค ์คํ์์ผ์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๊ฑด๋ค์ค์ผํ๋ค๋ ์๊ตฌ์ฌํญ์ด ์์ต๋๋ค.
์ปดํ์ผ
์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ต๋๋ค.
Java์์ ์ง์ํ๋ javax.tools.JavacCompiler๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ class ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ผ๋ก๋ Java ์ฝ๋๋ง์ ์ปดํ์ผ ํ ์ ์์ต๋๋ค. ๋ค์ํ ์ธ์ด๋ฅผ ์ง์ํ๋ ค๋ฉด ๋น์ทํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๋ ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์์ ์ ์ฉ์์ผ์ผ ํ์ต๋๋ค. ํ ๋ฌ์ด๋ผ๋ ์ ํ๋ ์๊ฐ์ ์ด ๋ฐฉ๋ฒ์ ์ ์ฉํ๊ธฐ์๋ ์ด๋ ค์ ๋ณด์์ต๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ฏธ๋ฆฌ ์๋ฒ์ ์ฌ๋ฌ ์ธ์ด ํ๊ฒฝ์ ๊ตฌ์ฑํด๋๊ณ , java.lang.ProcessBuilder๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ์ ์ํํ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ดค์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ ์ฉํ๊ธฐ ์ํด์๋ ์ธ์ด ์ง์์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์ธ์ด ํ๊ฒฝ์ ๊ตฌ์ฑํด์ผํ๊ณ , ํ๋์ ์ธ์ด ๋ด์์๋ ๋ค์ํ ๋ฒ์ ์ ์ธ์ด๋ฅผ ์ค์นํด์ ์ด์ํด์ผํ๋ค๋ ๋ฒ๊ฑฐ๋ก์์ด ์์์ต๋๋ค.
๋ฐ๋ผ์ ์ ํํ ๋ฐฉ๋ฒ์ ๋์ปค ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค. ๋์ปค ์ปจํ ์ด๋์ ์ปดํ์ผ ๋ช ๋ น์ ๋ณด๋ด์ ์ปดํ์ผ์ ์ํํ๋ฉด ๋น๊ต์ ๊ฐ๋จํ๊ฒ ์ํํ ์ ์์ผ๋ฉฐ, ๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ธ์ด๋ฅผ ์ง์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋๋ค.
์คํ
๋์ปค ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฉ์ ์ฝ๋ ์คํํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๋ง์ฝ ๋จ์ํ๊ฒ ProcessBuilder๋ฅผ ํตํด ์ปดํ์ผ์ ์ํํ๊ณ ํด๋น ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ค๋ฉด, ์ฌ์ฉ์์ ์ ์์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ ๋์ ๊ทธ ์ฝ๋๊ฐ ์คํ ์๋ฒ์์ ๊ทธ๋๋ก ๋์๊ฐ๊ฒ ๋ฉ๋๋ค. ๋์ปค ์ปจํ ์ด๋์์ ์ฌ์ฉ์ ์ฝ๋๋ฅผ ์คํ์ํจ๋ค๋ฉด, ์ด๋ ์คํ ์๋ฒ์ ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์์ ์ํ๋๋ฏ๋ก ์ ์์ ์ฝ๋์ ๋ฌธ์ ๊ฐ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ ๋ด์์๋ง ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
ํฐ๋ฏธ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ค๋ฉด
์ฌ์ฉ์๊ฐ ํฐ๋ฏธ๋์ ํตํด ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฝ๋๋ฅผ ์ํํ ์ ์์ผ๋ ค๋ฉด ์ฌ์ฉ์์ ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํฉ๋๋ค. ์ ํฌ ํ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋์ปค ์ปจํ ์ด๋๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ํ์ต๋๋ค.
์ฌ์ฉ์๊ฐ IDE๋ฅผ ํตํด ํ๋ก์ ํธ์ ์ ๊ทผํ๋ ๊ณผ์ ์์ ํด๋น ํ๋ก์ ํธ์ ์ธ์ด์ ๋ง๋ ๋์ปค ์ปจํ ์ด๋๊ฐ ์คํ๋ฉ๋๋ค. ์ด ๋์ปค ์ปจํ ์ด๋๋ ์ฌ์ฉ์์ ์์ค์ฝ๋ ๋๋ ํฐ๋ฆฌ ์์ญ์ ๋ณผ๋ฅจ์ผ๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ก ๋ช ๋ น์ด๋ฅผ ๋ณด๋ด๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ์ด๋ฅผ ์๋ง์ ์ปจํ ์ด๋์ ์ ๋ฌํ์ฌ ์ปจํ ์ด๋๊ฐ ์ง์ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ฒ ํฉ๋๋ค. ์ดํ ๋์ปค ์ปจํ ์ด๋๊ฐ ์ํํ ๊ฒฐ๊ณผ๋ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๊ฑฐ์ณ ์ฌ์ฉ์ ์ธก์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ด๋ ํ ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ฅผ ๋ณด๋ธ๋ค ํ๋๋ผ๋ ๋์ปค ์ปจํ ์ด๋์ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ผ๋ก ์ธํด ๋ค๋ฅธ ์ปจํ ์ด๋ ํน์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์์ค์ฝ๋์ ๊ฐ์ญ๋๋ ์ผ์ ๋ง์ ์ ์์ต๋๋ค. ๋ํ ๋ณผ๋ฅจ ๋ง์ดํ ์ ํตํด ์ฌ์ฉ์๋ ์์ ์ด ์์ฑํ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ cd ๋ช ๋ น์ด๋ก ์์ ๋กญ๊ฒ ์ด๋ํ ์ ์์ผ๋ฉฐ, ์ปดํ์ผ ๋ฐ ์คํ ๋ช ๋ น์ด๋ฅผ ํตํด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
ECS
์์๊ฐ์ ๊ตฌ์กฐ์์๋ ํ๋ก์ ํธ ๋จ์๋ก ๋์ปค ์ปจํ ์ด๋๊ฐ ํ๋์ฉ ๋์์ง๋๋ค. ๋ฐ๋ผ์ ์ปจํ ์ด๋์ ๊ฐ์๋ฅผ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋๋ฆฌ๊ณ ์ค์ด๋ฉฐ, ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๊ณ ์ํด์ผ ํฉ๋๋ค.

์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์ ํฌ๋ Amazon ECS๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. Amazon Elastic Container Service๋ ์ปจํ ์ด๋๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ๊ท๋ชจ๋ฅผ ์กฐ์ ํ๋๋ฐ ํนํ๋์ด์๋ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค์ ๋๋ค. ECS ์ฌ์ฉ์๊ฐ IDE์ ์ ๊ทผํ ๋๋ง๋ค ํ๋ก์ ํธ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ํ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉ์์ ๋์๋ค์ ์ํํ๊ฒ ๋ง๋ค์์ต๋๋ค.
ECS๋ ์์ ์ ํ์ผ๋ก Fargate, EC2, External ์ค ์ ํํ ์ ์์ต๋๋ค. ์ ํฌ๋ ๊ฐ ์ปจํ ์ด๋๊ฐ ๋ณ๋์ ์ด์์ฒด์ ์์ด Serverless Container๋ก๋ง ๋์ํด๋ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํฌ ์ ์์ผ๋ฏ๋ก Fargate ์ ํ์ ์ฑํํ๊ธฐ๋ก ํ์ต๋๋ค.
EFS
์ฌ์ฉ์๊ฐ ์์ฑํ ํ์ผ์ ์ด๋ป๊ฒ ์ ์ฅํ๊ณ ๊ด๋ฆฌํด์ผํ ์ง๋ ๊ณ ๋ฏผ์ด์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ์ฅ ๋ฐฉ๋ฒ๋ค์ ๋ํด ๊ณ ๋ฏผํ์๊ณ ์ต์ข ์ ์ผ๋ก๋ EFS๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ํ์ผ ์์คํ ์ ์ ์ฅ
์ฌ์ฉ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ํ์ผ ํํ๋ก ์ ์ฅํ๋ ๊ฒ๋ ์ ํจํ ๋ฐฉ๋ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ ๊ท๋ชจ ํ์ฅ์ด ๋๊ณ ์ค์ผ์ผ ์์์ ํด์ผํ๋ ๊ฒฝ์ฐ ์ ์ ์น ๋ชปํ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
RDB, S3์ ์ ์ฅ
์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ์ ์ฅ ๊ณต๊ฐ์ ๋ผ์ด๋ธ๋ค๋ ์ ์์๋ ์๋ฏธ๊ฐ ์์ด ๋ณด์์ต๋๋ค. ํ์ง๋ง ๊ฒฐ๊ตญ ์ฌ์ฉ์์ ์ฝ๋๋ฅผ ์ํํ๊ธฐ ์ํด์๋ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ํ์ผ ์์คํ ์ผ๋ก ๋ณํํ๋ ๋ก์ง์ด ํ์ํ ๊ฒ์ผ๋ก ๋ณด์์ต๋๋ค. ๋ฐ๋ผ์ RDB๋ S3์ ์ ์ฅํ๋ ๊ฒ์ ์ถ๊ฐ์ ์ธ ๋น์ฉ์ ๊ฐ์ ธ์ฌ ๊ฒ์ผ๋ก ํ์ ํ์ต๋๋ค.
EFS์ ์ ์ฅ
Amazon Elastic File System์ ๊ณต์ ํ์ผ ์์คํ ์ ์ง์ํ๋ ์๋ง์กด์ ์๋น์ค์ ๋๋ค. ์ด๋ ๋ง์ดํธ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฏ๋ก ๋์ปค ์ปจํ ์ด๋์ ํจ๊ป ์ฌ์ฉํ๊ธฐ์๋ ํจ๊ณผ์ ์ด์์ต๋๋ค. EFS์๋ ํ์ผ ์์คํ ์ ํน์ ์์น๋ฅผ ๋ง์ดํธํ ์ ์๋ Access Point ๋ผ๋ ๊ฒ์ ์ ๊ณตํ๋๋ฐ, ์ด๊ฒ์ ํตํด ๊ฐ๊ฐ์ ์ปจํ ์ด๋๊ฐ ์๋ก ๋ถ๋ฆฌ๋ ํ์ผ ์์ญ์ ๋ณผ๋ฅจ์ผ๋ก ๊ฐ์ ธ๊ฐ ์ ์์์ต๋๋ค.
์ปจํ ์ด๋์ ์คํ ์ถ๋ ฅ
์ปจํ ์ด๋์์ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ฉด ๊ทธ ๊ฒฐ๊ณผ ์ถ๋ ฅ์ ์ปจํ ์ด๋์์ ๋ฐํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์์์ฐจ๋ฆด ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํด์ผํ์ต๋๋ค.

์ฒซ๋ฒ์งธ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ CloudWatch์ Lambda๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ก ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋๋ค. CloudWatch์ ๋ก๊ทธ ์์ฑ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด Lambda๊ฐ ์ํ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ๋ฅผ ์ ์กํฉ๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋๋ฌด ๋ง์ ์๋น์ค๋ฅผ ๊ฑฐ์ณ์ผํด์ ๋ช ๋ น์ด์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ฐ์ ์ฝ 5์ด ์ ๋๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.

์ดํ ๋ฐฉ๋ฒ์ ์์ ํ์ฌ์ ๋์ปค ์ปจํ ์ด๋์์ curl์ ์ํํ์ฌ ๋ก๊ทธ๋ฅผ ์ง์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ก ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ปจํ ์ด๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ์๋ต์๊ฐ์ด 5sec ์ ๋์์ 1sec ์ดํ๋ก ๋จ์ถ๋์์ต๋๋ค.
๊ตฌํ ํฌ์ธํธ
ํ๋ก์ ํธ
์ ํฌ๊ฐ ๋ค๋ฃจ๋ 'ํ๋ก์ ํธ'๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉ์์ ์์ ๋จ์์ด๋ฉฐ ํ์ผ ๋๋ ํฐ๋ฆฌ, ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ํฌํจํฉ๋๋ค
ํ๋ก์ ํธ ์์ฑ
์ฌ์ฉ์๊ฐ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ์์ ์ AWS์ ์์๋ค์ด ๋ง๋ค์ด์ง๋๋ค.
์ฒซ๋ฒ์งธ ์์์ EFS AccessPoint ์ ๋๋ค. EFS AccessPoint๋ EFS ์ ์ฅ๊ณต๊ฐ์ ํน์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฐ๋ผ๋ณด๋ ํฌ์ธํฐ์ ์ญํ ์ ์ ๊ณตํ๋ฉฐ, AccessPoint๊ฐ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์์ฑ์ ๋ณผ๋ฅจ ๋ง์ดํธ์ ๊ธฐ์ค์ด ๋ฉ๋๋ค. Access Point๋ฅผ ๋ง๋ค๊ณ ์ด์ํ๊ธฐ ์ํด์๋ ํด๋น ๋๋ ํฐ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ง๋ค์ด์ ธ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์, AccessPoint๋ฅผ ๋ง๋ค๊ธฐ ์ ์ EFS ๋๋ ํฐ๋ฆฌ์์ ํด๋น ํ๋ก์ ํธ๊ฐ ์ฌ์ฉํ ๋๋ ํฐ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋ค๊ณ , ์ต์ด ํ๋ก์ ํธ ์์ฑ ์ ๋ฃ์ด์ค ๊ธฐ๋ณธ ํ์ผ๋ค์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
๋๋ฒ์งธ ์์์ ECS์ TaskDefinition์ ๋๋ค. TaskDefinition์ ํ๋์ ECS ์ธ์คํด์ค์ ์ฒญ์ฌ์ง์ด๋ฉฐ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ ์์ฑ ์์ ์ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ ์ธ์ด์ ๋ณด์์ ๊ฐ์ ธ์จ ์ด๋ฏธ์ง, AccessPoint ๋ฑ์ ์กฐํฉํ์ฌ TaskDefinition์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
AccesPoint์ TaskDefinition์ ์๋ณ์๋ ์ดํ RDB์ ํ๋ก์ ํธ ๋ฉํ ๋ฐ์ดํฐ์ ํจ๊ป ์ ์ฅ๋์ด, ์ปจํ ์ด๋๋ฅผ ์คํ์ํฌ๋์ ์ฌ์ฉ๋ฉ๋๋ค.
ํ๋ก์ ํธ์ ์ปจํ ์ด๋
ํ๋ก์ ํธ์ ํด๋น ํ๋ก์ ํธ์ ์ปจํ ์ด๋๋ 1๋1 ๋งค์นญ์ด ๋๋ ๊ฐ๋ ์ด์ง๋ง, ๋ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ ๋ค๋ฆ ๋๋ค. ์ฌ์ฉ์๊ฐ IDE๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ปจํ ์ด๋๋ ์คํ๋ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ํจ๊ณผ์ ์ธ ๊ณผ๊ธ๊ด๋ฆฌ๋ฅผ ํ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ IDE๋ฅผ ํตํด ํ๋ก์ ํธ์ ์ ๊ทผํ ๋์๋ง ํด๋น ์ปจํ ์ด๋๊ฐ ์คํ๋๊ฒ ๋ง๋ค๊ณ , ์ด๋ค ์ฌ์ฉ์๋ ์์ ์ค์ด์ง ์์ ๊ฒฝ์ฐ ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํด์ผํฉ๋๋ค.
ํ๋ก์ ํธ ์ ์ฅ ๋ก์ง
ํ๋ก์ ํธ ์ ์ฅ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ projectId๋ฅผ ํตํด ์๋ฒ์ ์ฐ๊ฒฐ๊ณผ์ ์ ์ํํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ต์ด๋ก ํด์ผํ ์ผ์ ํด๋น ํ๋ก์ ํธ์ ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค.
/api/projects/{projectId}/run ์ '์ง๊ธ ์ด project๋ฅผ ์์ ํ๊ธฐ ์ํด IDE๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ ์ปจํ ์ด๋๋ฅผ ์คํ์์ผ' ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ๋ API์ ๋๋ค. ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ์์ฒญ์ ๋ฐ์ผ๋ฉด ์ปจํ ์ด๋๋ฅผ ์คํ์ํค๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํด์ผํฉ๋๋ค.
ํ์ง๋ง ์ปจํ ์ด๋๋ฅผ ๊ตฌ๋ํ๋ ๊ฒ์ ๊ต์ฅํ ์ค๋๊ฑธ๋ฆฌ๋ ์ผ์ ๋๋ค. ๋ฐ๋ผ์ ๊ตฌ๋์ด ์๋ฃ๋ ๋๊น์ง HTTP ์์ฒญ์ ๋ถ๋ค๊ณ ์๋ ๊ฒ ๋ณด๋ค๋, ์ดํ์ ์ฌ์ฉ์์๊ฒ ์น์์ผ์ ํตํด ๊ตฌ๋์ด ์๋ฃ๋์๋ค๋ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ํ๋จํ์ต๋๋ค. run api๋ ์ปจํ ์ด๋๊ฐ ์คํ์ค์ด ์๋๋ผ๋ฉด ์ปจํ ์ด๋๋ฅผ ์คํ์ํค๊ณ , ์ปจํ ์ด๋์ ๊ตฌ๋ ์ํ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํฉ๋๋ค.
Run API์์๋ ํด๋น ํ๋ก์ ํธ์ ์ปจํ ์ด๋๊ฐ ์คํ์ค์ธ์ง ์์์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ContainerStore ๋ผ๋ ํด๋์ค๋ฅผ ๊ฐ๋ฐํ์ฌ, ์ปจํ ์ด๋์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋ง๋ค์์ต๋๋ค. ContainerStore์๋ ํ๋ก์ ํธ์ ์ปจํ ์ด๋๊ฐ PENDING ์ํ์ธ์ง, RUNNING ์ํ์ธ์ง, ์๋๋ฉด ์์๋์ง ์์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค. Run API๋ ContainerStore ๋ก๋ถํฐ ์ปจํ ์ด๋์ ์ ๋ณด๋ฅผ ์ป๊ณ ์ปจํ ์ด๋๋ฅผ ์คํ์ํฌ์ง ์๋๋ฉด ๋จ์ํ ์ปจํ ์ด๋ ์ ๋ณด๋ฅผ ๋ฐํํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด PENDING ์ํ๋ฅผ ๋ฐ๋ ๊ฒ์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ํด๋นํ ๊ฒ์ ๋๋ค.
ํ๋ก์ ํธ์ ์ต์ด ์คํ
๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋๋ฅผ ๊ตฌ๋ํ๊ณ PENDING์ ๋ฐํ
๋๊ตฐ๊ฐ ํ๋ก์ ํธ๋ฅผ ์คํ์์ผฐ์ง๋ง, ์์ง ์ปจํ ์ด๋๊ฐ RUNNING ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ
๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ContainerStore๋ก๋ถํฐ ์ํ ๊ฐ(PENDING)์ ๊บผ๋ด์ด ๋ฐํ
๋ ๊ฒฝ์ฐ ๋ชจ๋ IDE๋ฅผ ์ฌ์ฉํ ํ๊ฒฝ์ด ๊ฐ์ถฐ์ง์ง ์์ ๊ฒฝ์ฐ์ด๋ฏ๋ก, ์น์์ผ ์ฐ๊ฒฐ์ ํ ๋ค ์ปจํ ์ด๋ ์ํ๋ฅผ ์ ๋ฌ๋ฐ๋ ๊ตฌ์น์์ผ ๊ตฌ๋ ์ ๋ณด๋ธ ํ ์ปจํ ์ด๋์ ์คํ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.

์ดํ ์ปจํ ์ด๋๊ฐ ์คํ๋๋ฉด AWS์์ ์ปจํ ์ด๋ ์ํ ๋ณ๊ฒฝ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ , ์ด ์ด๋ฒคํธ๋ Lambda๋ฅผ ์คํ์์ผ์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ ๋ณด๋ฅผ ์๋ฆฝ๋๋ค. ์ดํ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ContainerStore์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ ๋ค ํด๋น ํ๋ก์ ํธ์ ์ปจํ ์ด๋ ์ํ๋ฅผ ๊ตฌ๋ ํ ์ฌ์ฉ์์๊ฒ ๊ทธ ์ ๋ณด๋ฅผ ์๋ฆฝ๋๋ค. ์ด๋ฅผ ํตํด PENDING์ ๋ฐ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ์ฉ์๋ค์ ๋ค์ ํ์คํฌ๋ก ์ด์ด๊ฐ ์ ์์ต๋๋ค. ๋ํ ContainerStore์ ํด๋น ์ปจํ ์ด๋ ์ํ๋RUNNING์ผ๋ก ์ ๋ฐ์ดํธ ๋์์ผ๋ฏ๋ก, ํ๋ก์ ํธ์ ์ ๊ทผํ๊ณ ์ ํ๋ ์ฌ์ฉ์๋ ์ฒซ ์์ฒญ์ ๋ฐ๋ก RUNNING ์ํ๋ฅผ ์๋ต์ผ๋ก ๋ฐ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ํ์คํฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.

ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋์ ์ํ๊ฐ RUNNING์ด๋ผ๋ฉด IDE ๋ ๋๋ง์ ํ์ํ ์ ๋ณด๋ค์ ๋ฐ๊ณ ์ค์๊ฐ ์์ ๋ด์ฉ ๋๊ธฐํ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ฐ๋ ์น์์ผ์ ๊ตฌ๋ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ์ฌ์ฉ์๋ IDE๋ฅผ ํตํด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋์ ์ข ๋ฃ
์น์์ผ ์ธ์ ์๋ ํด๋น ์ฐ๊ฒฐ์ด ์ด๋ค ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ํ๊ณ ์ด๋ค project์ ๋ํ ๊ฒ์ธ์ง์ ๋ํด ์ ์ฅ๋์ด์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ํตํด ํน์ ํ๋ก์ ํธ IDE์ ์ ์ํด ์๋ ์ธ์์ด ๋ช๋ช ์ธ์ง ํ์ ํ ์ ์๊ณ , ์ด ์ธ์์ด 0๋ช ์ด ๋๋ ์๊ฐ ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋ฒฝํ๊ฒ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์์ฒญ flow๋ง ๋ฐ์ํ๋ฉด ์ ๋์ํ๋, ์ธ๋ถ์์ Run API๋ง ํธ์ถํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ฉด ์น์์ผ ์ฐ๊ฒฐ๊ณผ๋ ๊ด๋ จ์ด ์์ด์ง๋ฏ๋ก ์ฌ์ฉ์ ์์ด๋ ์ปจํ ์ด๋๊ฐ ๋์๊ฐ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ์๋ฏธ์์ด ๋์๊ฐ๊ณ ์๋ ์ปจํ ์ด๋๋ฅผ ๊ฐ์งํ๊ณ ์ด๋ฅผ ์ข ๋ฃ์ํค๋ ๋ฐฐ์น ์์คํ ์ ๋์ ํด์ผํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์ด๋ ์ ํ๋ ์๊ฐ์์ ๊ตฌํํ ์๋ ์์์ง๋ง, ์ถํ์ ๊ณผ์ ๋ก ๋ฏธ๋ค๋๊ณ ์ถ์ต๋๋ค.
ํฐ๋ฏธ๋
์ฌ์ฉ์๋ IDE์ ์ ์ํ ์ดํ ํฐ๋ฏธ๋์ ํตํด ํ๋ก์ ํธ๋ฅผ ์กฐ์ํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๋ ์ง์์ ์ผ๋ก ๋์ ํฐ๋ฏธ๋์ด ์ด๋ค ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋์ง ํ์ ํ ์ ์์ด์ผํ๋ฉฐ, cd, ls์ ๊ฐ์ ๋ฆฌ๋ ์ค ๋ช ๋ น์ด๋ถํฐ python main.py์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ํ์ํค๋ ๋ช ๋ น์ด๋ ์ํํ ์ ์์ด์ผ ํฉ๋๋ค.
ํฐ๋ฏธ๋ ์ฒ๋ผ ๋์ํ๋ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ
ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ์์ ์ค์ ๋ก ๋์ปค ์ปจํ ์ด๋์ ์ฐ๊ฒฐ๋์ด์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ณด์์ ์ธ ์ธก๋ฉด์์ ๋งค์ฐ ์ข์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ก ํธ์๋ ์ปดํฌ๋ํธ๋ ํฐ๋ฏธ๋์ ์ธ๊ด๋ง์ ์ ๊ณตํ๊ณ , ์ค์ง์ ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์ ์กํ๋ ๊ฒ์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์ฌํ๋๋ก ํ์ต๋๋ค.
ECS Exec
ECS๊ฐ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ ECS Exec์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ECS Exec์ ์ฌ์ฉํ๋ฉด ๋์ปค ์ปจํ ์ด๋์ ์ธ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด, ๋ช ๋ น์ด๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๋ช ๋ น์ด์ ๊ฐ๊ณต
์ฌ์ฉ์๊ฐ ์์ฑํ๋ ๋ช ๋ น์ด๋ ๊ทธ๋๋ก ๋์ปค ์ปจํ ์ด๋์ ์ ๋ฌํ ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํฐ๋ฏธ๋์ ํ์ฌ ๋๋ ํฐ๋ฆฌ ์์น
์ผ๋ฐ์ ์ผ๋ก ํฐ๋ฏธ๋์ ์ด์ฉํ ๋์๋ cd์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ํํ ๋๋ ํฐ๋ฆฌ๋ก ์์น๋ฅผ ์ฎ๊ธด ๋ค ๋ช ๋ น์ด๋ฅผ ์ํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ช ๋ น์ด๋ง ๋ฐ์์ ๋์ปค ์ปจํ ์ด๋์ ์ ๋ฌํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์๋๋ฅผ ๋ฐ์ํ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
๋ณผ๋ฅจ์ ์กด์ฌ
๋์ปค ์ปจํ ์ด๋๋ ํ๋ก์ ํธ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ ๋ง์ดํ ์ ํตํด ๊ฐ๊ณ ์์ง๋ง, ์ฌ์ฉ์์ ์ ์ฅ์์ ์ด๋ ์จ๊ฒจ์ ธ์ผ ํ ์ ๋ณด์ ๋๋ค. ์ฌ์ฉ์๊ฐ ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๊ณ ์ ํ๋ค๋ฉด (cd /) ๋์ปค์ ์ ์ฅ์์๋ ๋ง์ดํ ๋ ๋ณผ๋ฅจ์ ๋ฃจํธ (cd /{volume-path})๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ๋ฌํ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์ด ์ปจํ ์ด๋์ ์ ๋ฌ๋ฉ๋๋ค.
์ฌ์ฉ์ ์
๋ ฅ : {
command : ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ช
๋ น์ด, ex) python main.py
path : ์ฌ์ฉ์ ํฐ๋ฏธ๋์ด ํ์ฌ ๊ฐ๋ฆฌํค๊ณ ์๋ ์์น ex) /src
}
์ปจํ
์ด๋ ์ ๋ฌ : bash -c '(cd /{volume-path} ; cd .{path} ; {command} ; echo -e {separator} ; pwd)
ex) bash -c 'cd /app ; cd ./src ; python main.py ; echo -e "===XYZ===" ; pwd'์ ๋ฌ๋๋ ๋ช ๋ น์ด๊ฐ ์์ ๊ฐ์ด ๋ฐ๋๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. cd /{volume-path} : ์ฌ์ฉ์์ ๋ช ๋ น์ ์ํํ ์์น๋ฅผ ๋ณผ๋ฅจ ํ์๋ก ์ฎ๊น๋๋ค.
2. cd .{path} : ์ฌ์ฉ์์ ๋๋ ํฐ๋ฆฌ ์์น๋ฅผ ๋ฐ์ ํด๋น ์์น๋ก ์ด๋ํฉ๋๋ค
3. {command} : ๋ช ๋ น์ด๋ฅผ ์ํํฉ๋๋ค.
4. echo -e {separator} : ์ฌ์ฉ์์ ๋ช ๋ น์ด์ pwd์ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
5. pwd : ์ฌ์ฉ์์ ๋ช ๋ น์ด ์ดํ ๋ณ๊ฒฝ๋ ๋๋ ํฐ๋ฆฌ ์์น๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํ๋ค๋ฉด ์ฌ์ฉ์์ ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ด ํต์ ํ ์ ์์ต๋๋ค.


์ถ๋ ฅ๊ฐ ์ ๋ฌ
ํ์ง๋ง ๋์ปค ์ปจํ ์ด๋์ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํค๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ๋ช ๋ น์ด์ ์ถ๋ ฅ์ ์ฐ๊ฒฐ ์ธ์ ์์ ๋ฐ์ํ๋ฏ๋ก, ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ํ์ธํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๊ธฐ์๋ ์ถ๊ฐ์ ์ธ ์ฅ์น๊ฐ ํ์ํฉ๋๋ค.
์ถ๋ ฅ ๋ด์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด์ ์ถ๋ ฅ ๊ฐ์ ๋ฐ์์ฌ ์ ์๋ API๋ฅผ ๊ฐ๋ฐํ๊ณ , ๋์ปค ์ปจํ ์ด๋์์ curl์ ํตํด API๋ฅผ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ ์ ์๋๋ก ๋ง๋ค์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ถ๊ฐ์ ์ธ ๋ช ๋ น์ด์ ๊ฐ๊ณต์ด ํ์ํฉ๋๋ค.
(๊ฐ๊ณต๋ ๋ช
๋ น์ด) 2>&1 | curl -d @- {API_URL}?
secretKey={secretKey}
&userId={userId}
&projectId={projectId}2>&1 : ์ฌ์ฉ์ ๋ช ๋ น์ด์์ ์๋ฌ ์ถ๋ ฅ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ํ์ค์ถ๋ ฅ์ผ๋ก ๋ฐ๊พธ์ด curl์ body๋ก ์ ๋ฌํฉ๋๋ค.
secretKey : ์๋ฌด๋ API๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด์ ๋ช ๋ น์ด ์์ฑ ์์ ์ ๋น๋ฐํค๋ฅผ curl ์์ฒญ์ ํ๋ผ๋ฏธํฐ์ ๋ด์ต๋๋ค. ์ด ๋น๋ฐํค๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์ ์์ ์ธ ๋ก์ง์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
userId, projectId : ์ด ๋ช ๋ น์ด์ ์ํ์ด ์ด๋ค ์ฌ์ฉ์๊ฐ ์ด๋ค ํ๋ก์ ํธ์์ ์ํํ ๋ช ๋ น์ด์ธ์ง ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฐ๋ค์ ํตํด ๊ฒฐ๊ณผ๋ฅผ ์ ์กํด์ผํ ์น์์ผ ์ธ์ ์ ์ฐพ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ฒญ
client (projectId = abc, userId = 123) {
path: /src
command : python hello.py
}๋์ปค ์ปจํ
์ด๋์ ์ ๋ฌ๋๋ ๋ช
๋ น์ด :
bash -c '(cd /app ; cd ./src ; python hello.py ; echo -e "===XYZ===" ; pwd) 2>&1 |
curl -d @- "<https://host/api/execute/output?secretKey=qwe!@#&userId=123&projectId=abc>"'์ํ์ ๊ฒฐ๊ณผ๋ API ํธ์ถ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ก ๋ค์ด์ค๋ฉฐ ์ด๋ ๋ค์ ์ ์ ๋์ด ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ฉ๋๋ค.
ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ ๊ด๋ฆฌ
EFS
EFS ์ ์ฅ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
(root)/{projectId}/{project-directories-and-files
์ฌ์ฉ์์ ์์ ๊ณต๊ฐ ๋๋ ํฐ๋ฆฌ๋ EFS์ {projectId} ํด๋์ ํ์์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.

๊ฐ๊ฐ์ ํ๋ก์ ํธ ๋์ปค ์ปจํ ์ด๋๋ /{projectId} ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ๊ฐ๋ EFS AccessPoint๋ฅผ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ ๋์ปค ์ปจํ ์ด๋ ๋ด๋ถ์์๋ ํ๋ก์ ํธ์ ํ์ผ๋ค์ ๋ชจ๋ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ํ๋ก์ ํธ์ ํ์ผ๋ก์ ์ ๊ทผ์ ์ ํ๋ฉ๋๋ค.
์ฌ์ฉ์์ ํ์ผ ์กฐ์
์ฌ์ฉ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ฒ์ ๋ฐ์ํด์ผํฉ๋๋ค. ์ฌ์ฉ์๋ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ํ์ผ์ ์์ ํ๊ณ , ์ญ์ ํ๋ฉฐ, ํ์ผ์ ๋๋ ํฐ๋ฆฌ ์์น๋ฅผ ์ฎ๊ธธ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ํฐ๋ฏธ๋์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ํด ์๋ง์ ๋ช ๋ น์ด๋ก ๋ณํํ ๋ค ์ปจํ ์ด๋์ ๋ช ๋ น์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ดํ ์ปจํ ์ด๋๋ ์ฌ์ฉ์์ ์กฐ์์ ๋ํ ๋ช ๋ น์ด๋ฅผ ์ํํ์ฌ EFS ์ ์ฅ์์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฐ์ํ ๊ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ผ๋ก ์ธํด ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ด๋ ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ํฅ์ ๋ผ์น์ง ๋ชปํ๋ฏ๋ก ๋ณด์ ์ธก๋ฉด์์ ํจ๊ณผ์ ์ ๋๋ค.
ํ์ง๋ง ์ด๋ ๊ตฌํ์ ์์ด์ ์ด๋ ค์ด ๋ถ๋ถ์ด ์์์ต๋๋ค. ํ์ผ์ ์กฐ์ API๋ ์กฐ์์ ์ฑ๊ณตํ๋์ง ์คํจํ๋์ง, ์คํจํ๋ค๋ฉด ์ ์คํจํ๋์ง ์์ธํ๊ฒ ์๋ ค์ค ํ์๊ฐ ์๋ค๊ณ ํ๋จํ์ฌ HTTP API๋ก ๊ฐ๋ฐํ๊ธฐ๋ก ํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํฐ๋ฏธ๋์ ํตํ ํ์ผ ์กฐ์ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ์ฌ์ฉ์๋ ํ์ผ์ ์์ฑํ๋ผ๋ HTTP ์์ฒญ ๋ณด๋
2. ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ์์ฒญ์ ํด๋นํ๋ ๋ช ๋ น์ด๋ฅผ ๋ง๋ค์ด ์๋ง์ ํ๋ก์ ํธ ์ปจํ ์ด๋์ ์ ๋ฌ
3. ์์ฒญ ์ฐ๋ ๋๋ ์ปจํ ์ด๋๋ก๋ถํฐ ์๋ต์ด ์ฌ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผํจ
4. ์ปจํ ์ด๋๊ฐ ๋ช ๋ น์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฐ์ ์์ฒญ์ผ๋ก ์ ์ก
5. ์๋ต๊ฐ์ด ์ค๋ฉด ์์ฒญ ์ฐ๋ ๋๋ ์ํ์ ์ด์ด๊ฐ
์ด๋ฌํ ๊ณผ์ ์ ํ๋์ ์์ฒญ์ด ๋๋ฌด ์ค๋ ์ฐ๋ ๋๋ฅผ ๋ถ์ก๊ณ ์๊ฒ ๋๊ณ , ๊ฒฝ์ฐ์ ๋ฐ๋ผ๋ ๋๋ฒ๊น ์ด ์ด๋ ค์์ง ๊ฒ์ด๋ผ ํ๋จํ์ต๋๋ค. ๋ฐ๋ผ์ ํ์ผ ์กฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ EFS ์ ์ฅ์๋ฅผ ๋ง์ดํ ํ์ฌ ์ํํ๊ธฐ๋ก ํ์ต๋๋ค.

์ด๋ฌํ ๊ตฌ์กฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ๋ก์ปฌ์ ํ์ผ์ ์์ฑํ๊ณ ์ญ์ ํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ๋ง์ดํ ๊ณต๊ฐ์ ํ์ผ์ ์์ฑํ๊ณ ์ญ์ ํ๋ฉฐ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ง์ดํ ๊ณต๊ฐ์ ์ปจํ ์ด๋์ ๊ณต์ ํ๊ณ ์๋ ๊ณต๊ฐ์ด๋ฏ๋ก ์ด ๊ณณ์ ์์ฑํ ํ์ผ์ ๋ํด ์ปจํ ์ด๋๊ฐ ์ค์๊ฐ์ผ๋ก ์ธ์งํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ฌ์ฉ์ ๊ฐ ๋๋ ํฐ๋ฆฌ ๋๊ธฐํ
์ฌ์ฉ์๋ ๊ฐ์ ํ๋ก์ ํธ์ ์ ์ํ ์ฌ์ฉ์๊ฐ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ์ ๋, ๊ทธ ๋ณ๊ฒฝ๋ด์ญ์ ์ค์๊ฐ์ผ๋ก ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์ ํ๋ก์ ํธ์ ๋๋ ํฐ๋ฆฌ ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฌํ๋ ์น์์ผ ๊ธฐ๋ฅ์ ๋ง๋ค์ด, ๊ตฌ๋ ์๋ค์ด ๋ค๋ฅธ ๊ณณ์์ ๋ณ๊ฒฝ๋ ํ์ผ ๊ตฌ์กฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๊ฒ ๋ง๋ค์์ต๋๋ค.
์ฒ์์๋ HTTP File CRUD API๊ฐ ํธ์ถ๋์์ ๋, ๋ณ๊ฒฝ์ฌํญ์ ํด๋น ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ ํ๊ณ ์๋ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ ๋ก์ง์ผ๋ก ๊ตฌํํ ์๊ฐ์ด์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ File CRUD API๊ฐ ๋จ์ํ ํ์ผ์ ๋ณ๊ฒฝํ๋ ์ฑ ์๊ณผ ๋๋ถ์ด ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฌํ๋ ์ฑ ์์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ๋ํ ์ฌ์ฉ์๊ฐ API๋ฅผ ๊ฑฐ์น์ง ์๊ณ ํฐ๋ฏธ๋์ ํตํด ๋๋ ํฐ๋ฆฌ๋ ํ์ผ์ ์์ฑํ๋ ๊ฒฝ์ฐ์ ๋ํด์๋ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค.

๋ฐ๋ผ์ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ๋๋ ํฐ๋ฆฌ ๋ณ๊ฒฝ ๊ฐ์ง ๋ชจ๋์ ๋์ ํ์ต๋๋ค. Apache Commons IO์ FileAlterationObserver์ FileAlterationMonitor๋ฅผ ํตํด EFS ๋๋ ํฐ๋ฆฌ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ์งํ๊ณ ํด๋น ํ๋ก์ ํธ์ ๊ตฌ๋ ์์๊ฒ ๋ณ๊ฒฝ์ฌํญ์ ์ ๋ฌํ๋๋ก ํ์ต๋๋ค. ์ด๋ฅผ ํตํด CRUD API์์ ์ฑ ์์ ๋ถ๋ฆฌํด๋ด๊ณ ํฐ๋ฏธ๋์ ํตํ ๋๋ ํฐ๋ฆฌ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ ์ ์๊ฒ ๋์์ต๋๋ค.