๋๋ Inventos "Docker + Gitlab CI๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๋ก์ธ์ค"์์ Alexander Sigachev์ ๋ณด๊ณ ์ ์ฌ๋ณธ์ ์ฝ์ ๊ฒ์ ์ ์ํฉ๋๋ค.
Docker + Gitlab CI๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๋ง ๊ตฌํํ๊ธฐ ์์ํ ์ฌ๋๋ค์ ์ข ์ข ๊ธฐ๋ณธ์ ์ธ ์ง๋ฌธ์ ํฉ๋๋ค. ์ด๋์๋ถํฐ ์์ํด์ผ ํ ๊น์? ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ? ํ ์คํธํ๋ ๋ฐฉ๋ฒ?
์ด ๋ณด๊ณ ์๋ Docker ๋ฐ Gitlab CI๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๋ก์ธ์ค์ ๋ํด ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์ค๋ช ํ๊ธฐ ๋๋ฌธ์ ์ข์ต๋๋ค. ๋ณด๊ณ ์ ์์ฒด๋ 2017๋ ์ ๊ฒ์ ๋๋ค. ์ด ๋ณด๊ณ ์์์ ๊ธฐ๋ณธ, ๋ฐฉ๋ฒ๋ก , ์์ด๋์ด, ์ฌ์ฉ ๊ฒฝํ์ ๋ฐฐ์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๊ฐ ์ ๊ฒฝ ์ฐ๋์, ๊ณ ์์ด ๋ฐ์์ ์ฃผ์ธ์.
์ ์ด๋ฆ์ Alexander Sigachev์ ๋๋ค. ์ ๋ ์ธ๋ฒคํ ์ค์์ ์ผํฉ๋๋ค. Docker๋ฅผ ์ฌ์ฉํ ๊ฒฝํ๊ณผ ํ์ฌ์ ํ๋ก์ ํธ์์ ์ด๋ฅผ ์ ์ง์ ์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฐํ ์ฃผ์ : Docker์ Gitlab CI๋ฅผ ์ด์ฉํ ๊ฐ๋ฐ ํ๋ก์ธ์ค.
์ด๊ฒ์ Docker์ ๋ํ ๋ ๋ฒ์งธ ์ด์ผ๊ธฐ์
๋๋ค. ์ฒซ ๋ฒ์งธ ๋ณด๊ณ ๋น์ ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ์ปดํจํฐ์ ๊ฐ๋ฐ์ Docker๋ง ์ฌ์ฉํ์ต๋๋ค. Docker๋ฅผ ์ฌ์ฉํ๋ ์ง์์ 2~3๋ช
์ ๋์์ต๋๋ค. ์ ์ฐจ ๊ฒฝํ์ด ์์ด๊ณ ์กฐ๊ธ ๋ ๋์๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ํ ๋งํฌ
์ด ๋ณด๊ณ ์์๋ ๋ฌด์์ด ํฌํจ๋ฉ๋๊น? ์ด๋ค ๊ฐํด๋ฅผ ๋ชจ์๋์ง, ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง์ ๋ํ ๊ฒฝํ์ ๊ณต์ ํ๊ฒ ์ต๋๋ค. ๋ชจ๋ ๊ณณ์ด ์๋ฆ๋ต์ง๋ ์์์ง๋ง ๊ณ์ ๋์๊ฐ ์์์์ต๋๋ค.
์ฐ๋ฆฌ์ ๋ชจํ ๋ ์ฐ๋ฆฌ๊ฐ ์์ ๋ฃ์ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ํนํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์์ต๋๊น?
ํ์ฌ์ ์ฌ๋ฌ ํ์ด ์์ ๋ ํ๋ก๊ทธ๋๋จธ๋ ๊ณต์ ๋ฆฌ์์ค์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ํ๋ก์ ํธ์์ ๋น ์ ธ๋์ ์ ์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋งก๊ฒจ์ง๋ ๋จ๊ณ๊ฐ ์์ต๋๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ ๋นจ๋ฆฌ ์ดํดํ๋ ค๋ฉด ํ๋ก์ ํธ์ ์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ํ๊ฒฝ์ ์์ํด์ผ ์ด ํ๋ก์ ํธ์ ๋ฌธ์ ๋ฅผ ๋ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฒ์๋ถํฐ ์์ํ๋ฉด ํ๋ก์ ํธ์ ๋ฌธ์๊ฐ ๊ฑฐ์ ์์ต๋๋ค. ์ค์ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ ๊ณ ์ฐธ์๊ฒ๋ง ์ ๊ณต๋ฉ๋๋ค. ์ง์๋ค์ ํ๋ฃจ๋ ์ดํ ๋ง์ ์ง์ฅ์ ์ค์ค๋ก ๋ง๋ จํฉ๋๋ค. ์๋๋ฅผ ๋์ด๊ธฐ ์ํด Docker๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋ค์ ์ด์ ๋ Development์ ์ค์ ํ์คํ์ ๋๋ค. ๋ด ๊ฒฝํ์ ๊ฐ๋ฐ์๋ ํญ์ ์ฃผ๋๊ถ์ ์ก์ต๋๋ค. ๋ค์ฏ ๋ฒ์งธ ๊ฒฝ์ฐ๋ง๋ค ๋ง์ถค ๋๋ฉ์ธ์ด ์ ๋ ฅ๋ฉ๋๋ค(์: vasya.dev). ๊ทธ์ ์์๋ ๋๋ฉ์ธ์ด petya.dev์ธ ์ด์ Petya๊ฐ ์์ ์์ต๋๋ค. ๊ทธ๋ค์ ์ด ๋๋ฉ์ธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์น ์ฌ์ดํธ ๋๋ ์์คํ ์ ์ผ๋ถ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
์์คํ ์ด ์ปค์ง๊ณ ์ด๋ฌํ ๋๋ฉ์ธ ์ด๋ฆ์ด ๊ตฌ์ฑ๋๊ธฐ ์์ํ๋ฉด ๊ฐ๋ฐ ํ๊ฒฝ ์ถฉ๋์ด ๋ฐ์ํ๊ณ ์ฌ์ดํธ ๊ฒฝ๋ก๊ฐ ๋ค์ ์์ฑ๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋๊ตฐ๊ฐ๋ ๋ณด์์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๋น ๋ฃจํธ ์ํธ๋ก ์์
ํฉ๋๋ค. ์ค์น ๋จ๊ณ์์ MySQL์ ๋๊ตฐ๊ฐ์๊ฒ ์ํธ๋ฅผ ๋ฌผ์๊ณ ์ํธ๋ 123์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ๊ฐ๋ฐ์์ ์ปค๋ฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ์ด ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์์ต๋๋ค. ๋๊ตฐ๊ฐ ์์ ํ๊ณ ๋๊ตฐ๊ฐ ๊ตฌ์ฑ์ ์์ ํ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ข
๋ฅ์ ํ
์คํธ ๊ตฌ์ฑ์ ๊บผ๋์ ๋ ํธ๋ฆญ์ด ์์์ต๋๋ค. .gitignore
๊ฐ ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํด์ผ ํ์ต๋๋ค. ์ด๋ก ์ธํด ์์ํ๊ธฐ๊ฐ ์ด๋ ค์ ์ต๋๋ค. ๋ฌด์๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ๊ธฐ์ตํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๊ธฐํํ๊ณ , ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๊ณ , ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํ๊ณ , ํ
์ด๋ธ์ ์์ฑํด์ผ ํฉ๋๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋ค๋ฅธ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ค๋ฅธ ํ๋ก์ ํธ๋ก ์์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. 2017๋ ์ (5.5๋ ๋ถํฐ - ed. note) ์์๋ Legacy ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ์ถ์ ๋น์์๋ MySQL 5.7๋ก ์์ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด 2017 ์ด์ ๋ฒ์ (XNUMX๋ - ed. note)๊ณผ ๊ฐ์ด ๋ณด๋ค ์ต์ ๋ฒ์ ์ MySQL์ ๊ตฌํํ๋ ค๋ ์ต์ ํ๋ก์ ํธ๋ ์์ต๋๋ค.
MySQL๋ก ์์ ํ๋ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ข ์์ฑ์ ๊ฐ์ ธ์จ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. 2๊ฐ์ ๊ธฐ์ง๋ฅผ ํจ๊ป ์ด์ํ๋ ๊ฒ์ ๋ค์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ ์ด๋ ์ด์ ํด๋ผ์ด์ธํธ๋ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ ์ฐจ๋ก๋ก ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค.
๋ค์ ๋ฌธ์ ๋ ๊ฐ๋ฐ์๊ฐ ๋ก์ปฌ ์ปดํจํฐ์์ ์์ ํ ๋ ๋ก์ปฌ ๋ฆฌ์์ค, ๋ก์ปฌ ํ์ผ, ๋ก์ปฌ RAM์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ ๊ฐ๋ฐํ ๋์ ๋ชจ๋ ์ํธ ์์ฉ์ ํ๋์ ์์คํ ์์ ์๋ํ๋ค๋ ์ฌ์ค์ ํ ๋ด์์ ์ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ก๋์ 3์ ๋ฐฑ์๋ ์๋ฒ๊ฐ ์๊ณ ๊ฐ๋ฐ์๊ฐ ํ์ผ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ๊ณ ์ฌ๊ธฐ์์ nginx๊ฐ ์์ฒญ์ ์๋ตํ๊ธฐ ์ํด ํ์ผ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ฌํ ์ฝ๋๊ฐ ํ๋ก๋์ ์ ๋ค์ด๊ฐ๋ฉด ํ์ผ์ด 3๊ฐ ์๋ฒ ์ค ํ๋์ ์กด์ฌํ๋ ๊ฒ์ผ๋ก ๋ฐํ์ง๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค์ ๋ฐฉํฅ์ ํ์ฌ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ๋๊ท๋ชจ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ก ์ํธ ์์ฉํ๋ ์์ ๊ตฌ์ฑ ์์๋ก ๋๋ ๋. ์ด๋ฅผ ํตํด ํน์ ์์ ์คํ์ ๋ํ ๊ธฐ์ ์ ์ ํํ ์ ์์ต๋๋ค. ๋ํ ๊ฐ๋ฐ์ ๊ฐ์ ์์ ๊ณผ ์ฑ ์์ ๊ณต์ ํ ์ ์์ต๋๋ค.
JS์์ ๊ฐ๋ฐํ๋ Frondend ๊ฐ๋ฐ์๋ Backend์ ๊ฑฐ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ Ruby on Rails๋ฅผ ๊ฐ๋ฐํ๊ณ Frondend๋ฅผ ๋ฐฉํดํ์ง ์์ต๋๋ค. ์ํธ ์์ฉ์ API๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
๋ณด๋์ค๋ก Docker์ ๋์์ผ๋ก Staging์์ ๋ฆฌ์์ค๋ฅผ ์ฌํ์ฉํ ์ ์์์ต๋๋ค. ๊ฐ ํ๋ก์ ํธ๋ ํน์ฑ์ ํน์ ์ค์ ์ด ํ์ํ์ต๋๋ค. ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ ์๋ฒ๋ฅผ ํ ๋นํ๊ณ ๋ณ๋๋ก ๊ตฌ์ฑํ๊ฑฐ๋ ์ผ์ข ์ ๋ณ์ ํ๊ฒฝ์ ๊ณต์ ํด์ผ ํ๋ฉฐ ํ๋ก์ ํธ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ๋ฐ๋ผ ์๋ก ์ํฅ์ ์ค ์ ์์ต๋๋ค.
๋๊ตฌ. ์ฐ๋ฆฌ๋ ๋ฌด์์ ์ฌ์ฉํฉ๋๊น?
- ๋์ปค ์์ฒด. Dockerfile์ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์์ฑ์ ์ค๋ช ํฉ๋๋ค.
- Docker-compose๋ ๋ช ๊ฐ์ง Docker ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ๊ป ์ ๊ณตํ๋ ๋ฒ๋ค์ ๋๋ค.
- GitLab์ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ฐ๋ฆฌ๋ ์์คํ ํตํฉ์ ์ํด GitLab-CI๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณด๊ณ ์๋ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ถ๋ถ์์๋ Docker๊ฐ ๊ฐ๋ฐ์์ ์ปดํจํฐ์์ ์คํ๋๋ ๋ฐฉ์์ ๋ํด ์ค๋ช ํฉ๋๋ค.
๋ ๋ฒ์งธ ๋ถ๋ถ์์๋ GitLab๊ณผ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ, ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ ๋ฐ Staging์ผ๋ก ๋กค์์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
Docker๋ (์ ์ธ์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ) ํ์ํ ๊ตฌ์ฑ ์์๋ฅผ ์ค๋ช
ํ ์ ์๋ ๊ธฐ์ ์
๋๋ค. ์ด๊ฒ์ Dockerfile์ ์์
๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๊ณต์ Ruby:2.3.0 Docker ์ด๋ฏธ์ง์์ ์์ํจ์ ์ ์ธํฉ๋๋ค. Ruby ๋ฒ์ 2.3์ด ์ค์น๋์ด ์์ต๋๋ค. ํ์ํ ๋น๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ NodeJS๋ฅผ ์ค์นํฉ๋๋ค. ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค๊ณ ์ค๋ช
ํฉ๋๋ค. /app
. ์ฑ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์
๋๋ ํฐ๋ฆฌ๋ก ์ค์ ํฉ๋๋ค. ์ด ๋๋ ํ ๋ฆฌ์ ํ์ํ ์ต์ํ์ Gemfile๊ณผ Gemfile.lock์ ๋ฐฐ์นํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ข
์์ฑ ์ด๋ฏธ์ง๋ฅผ ์ค์นํ๋ ํ๋ก์ ํธ๋ฅผ ๋น๋ํฉ๋๋ค. ์ปจํ
์ด๋๊ฐ ์ธ๋ถ ํฌํธ 3000์์ ์์ ํ ์ค๋น๊ฐ ๋์์์ ๋ํ๋
๋๋ค. ๋ง์ง๋ง ๋ช
๋ น์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์ ์์ํ๋ ๋ช
๋ น์
๋๋ค. ํ๋ก์ ํธ ์์ ๋ช
๋ น์ ์คํํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ง์ ๋ ๋ช
๋ น์ ์คํํ๋ ค๊ณ ์๋ํฉ๋๋ค.
์ด๊ฒ์ docker-compose ํ์ผ์ ์ต์ ์์ ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ ์ปจํ ์ด๋ ๊ฐ์ ์ฐ๊ฒฐ์ด ์์์ ๋ณด์ฌ์ค๋๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค์ ์น ์๋น์ค์ ์ง์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ๋ฐฑ์๋๋ก ์ผ์ข ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ MySQL์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ ๋ MySQL์ด์ง๋ง ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค(PostgreSQL, Redis)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉํดํ๋ ๊ฒ์ ์์ต๋๋ค.
Docker ํ๋ธ์ ๊ณต์ ์์ค์์ MySQL 5.7.14์ ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝ ์์ด ๊ฐ์ ธ์ต๋๋ค. ํ์ฌ ๋๋ ํ ๋ฆฌ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋นํ๋ ์ด๋ฏธ์ง๋ฅผ ์์งํฉ๋๋ค. ์ฒ์ ์คํํ๋ ๋์ ์ด๋ฏธ์ง๋ฅผ ์์งํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ๊ธฐ์์ ์คํ ์ค์ธ ๋ช ๋ น์ ์คํํฉ๋๋ค. ๋์๊ฐ๋ฉด Puma๋ฅผ ํตํ ์คํ ๋ช ๋ น์ด ์ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. Puma๋ Ruby๋ก ์์ฑ๋ ์๋น์ค์ ๋๋ค. ๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ์ฌ์ ์ํฉ๋๋ค. ์ด ๋ช ๋ น์ ํ์ ๋๋ ์์ ์ ๋ฐ๋ผ ์์๋ก ์ง์ ํ ์ ์์ต๋๋ค.
๋ํ ๊ฐ๋ฐ์ ํธ์คํธ ์์คํ ์ ํฌํธ๋ฅผ ์ปจํ ์ด๋ ํฌํธ์ 3000์์ 3000์ผ๋ก ์ ๋ฌํด์ผ ํ๋ค๊ณ ์ค๋ช ํฉ๋๋ค. ์ด๋ Docker์ ์ง์ ๋ด์ฅ๋ iptables ๋ฐ ํด๋น ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ํ๋ฉ๋๋ค.
์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฐ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ IP ์ฃผ์์ ์ก์ธ์คํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด 127.0.0.1์ ์์คํ ์ ๋ก์ปฌ ๋๋ ์ธ๋ถ IP ์ฃผ์์ ๋๋ค.
๋ง์ง๋ง ์ค์ ์น ์ปจํ ์ด๋๊ฐ db ์ปจํ ์ด๋์ ์์กดํ๋ค๊ณ ๋งํฉ๋๋ค. ์น ์ปจํ ์ด๋์ ์์์ ํธ์ถํ๋ฉด docker-compose๊ฐ ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ํฉ๋๋ค. ์ด๋ฏธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์(์ค์ ๋ก ์ปจํ ์ด๋ ์คํ ํ! ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋น ์ํ๋ฅผ ๋ณด์ฅํ์ง ์์) ๋ฐฑ์๋์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์คํ๋์ง ์์ ๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ ์ด๋๋ฅผ ์ค์งํ ๋ ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ์ฌ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์ํ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ ์ ํ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํด MySQL ๋ฒ์ ์ ์์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฒ์ ์ด ๋ค๋ฅผ ๋, ๊ตฌ๋ฌธ, ๊ตฌ์ฑ, ๊ธฐ๋ณธ ์ค์ ์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ํ ์ ์๋ ์ผ๋ถ ์ค๋ฅ๋ฅผ ํผํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ก๊ทธ์ธ, ์ํธ์ ๋ํ ๊ณตํต ํธ์คํธ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ ๊ตฌ์ฑ ํ์ผ์ ์ด๋ฆ๊ณผ ์ถฉ๋์ ๋๋ฌผ์์์ ๋ฉ์ด์ง๊ณ ์์ต๋๋ค.
๊ธฐ๋ณธ๊ฐ๊ณผ ๋ค๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ํด ๋ณด๋ค ์ต์ ์ ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ ์๋ ๊ธฐํ๊ฐ ์์ต๋๋ค. MySQL์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ทจ์ฝํ ์์คํ ์ฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๋ฅ์ด ๋งค์ฐ ๋ฎ์ต๋๋ค.
Docker๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ๋ ๋ฒ์ ์ Python, Ruby, NodeJS, PHP ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ์ข ์ ๋ฒ์ ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ์ด์ ์ Ruby๋ ํ๋ก์ ํธ์ ๋ฐ๋ผ ๋ฒ์ ์ ๋ณ๊ฒฝํ ์ ์๋ rpm ํจํค์ง๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋ํ Docker ์ปจํ ์ด๋ ๋๋ถ์ ์ฝ๋๋ฅผ ์ํํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ์ข ์์ฑ๊ณผ ํจ๊ป ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ธํฐํ๋ฆฌํฐ์ ์ฝ๋์ ๋ฒ์ ์ ์ดํดํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ด์ ์ปจํ ์ด๋๋ฅผ ๋ด๋ฆฌ๊ณ ์ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฆฝ๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ปจํ ์ด๋๋ฅผ ๋ด๋ฆฌ๊ณ ์ด์ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฆด ์ ์์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ํ ๊ฐ๋ฐ ๋ฐ ํ๋ก๋์ ์ ์ปจํ ์ด๋๋ ๋ชจ๋ ๋์ผํฉ๋๋ค. ์ด๊ฒ์ ํนํ ๋๊ท๋ชจ ์ค์น์ ํด๋น๋ฉ๋๋ค.
Frontend์์๋ JavaScipt์ NodeJS๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด์ ReacJS์ ๋ํ ๋ง์ง๋ง ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ปจํ ์ด๋์ ๋ชจ๋ ๊ฒ์ ์คํํ๊ณ ํซ ๋ฆฌ๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ์ต๋๋ค.
๋ค์์ผ๋ก JavaScipt ์ด์ ๋ธ๋ฆฌ ์์ ์ด ์์๋๊ณ ์ ์ ์ผ๋ก ์ปดํ์ผ๋ ์ฝ๋๊ฐ nginx ์ ์ฅ ๋ฆฌ์์ค๋ฅผ ํตํด ์ ๊ณต๋ฉ๋๋ค.
์ฌ๊ธฐ์์ ๋๋ ์ฐ๋ฆฌ์ ๋ง์ง๋ง ํ๋ก์ ํธ์ ๊ณํ์ ์ ์ํ์ต๋๋ค.
์ด๋ค ์์ ์ด ํด๊ฒฐ๋์์ต๋๊น? ์ฐ๋ฆฌ๋ ๋ชจ๋ฐ์ผ ์ฅ์น๊ฐ ์ํธ ์์ฉํ๋ ์์คํ ์ ๊ตฌ์ถํ ํ์๊ฐ ์์์ต๋๋ค. ๊ทธ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค. ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ์ด ์ฅ์น์ ํธ์ ์๋ฆผ์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๋ฌด์์ ํ์ต๋๊น?
JS์ ๊ด๋ฆฌ ๋ถ๋ถ, Ruby on Rails์ REST ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋ํ๋ ๋ฐฑ์๋์ ๊ฐ์ ๊ตฌ์ฑ ์์๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋์์ต๋๋ค. ๋ฐฑ์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํฉ๋๋ค. ์์ฑ๋ ๊ฒฐ๊ณผ๋ ํด๋ผ์ด์ธํธ์ ์ ๊ณต๋ฉ๋๋ค. ๊ด๋ฆฌ์ ํจ๋์ REST ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐฑ์๋ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํฉ๋๋ค.
ํธ์ ์๋ฆผ์ ๋ณด๋ผ ํ์๋ ์์์ต๋๋ค. ๊ทธ ์ ์๋ ๋ชจ๋ฐ์ผ ํ๋ซํผ์ ์๋ฆผ์ ์ ๋ฌํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ๋ ํ๋ก์ ํธ๊ฐ ์์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ค์ ์ฒด๊ณ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ ์ด์์๋ ๊ด๋ฆฌ์ ํจ๋๊ณผ ์ํธ ์์ฉํ๊ณ , ๊ด๋ฆฌ์ ํจ๋์ ๋ฐฑ์๋์ ์ํธ ์์ฉํ๋ฉฐ, ์์ ์ ํธ์ ์๋ฆผ์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
ํธ์ ์๋ฆผ์ NodeJS์ ๊ตฌํ๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์ ์ํธ ์์ฉํฉ๋๋ค.
๋๊ธฐ์ด์ด ๊ตฌ์ถ๋ ๋ค์ ํด๋น ๋ฉ์ปค๋์ฆ์ ๋ฐ๋ผ ์๋ฆผ์ด ์ ์ก๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ทธ๋ ค์ ธ ์์ต๋๋ค. ํ์ฌ Docker์ ๋์์ผ๋ก ์๋ก ๊ด๋ จ์ด ์๋ 2๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ํ ๊ณตํต ๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ผ๋ฉฐ ๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ๋ ๊ฐ๋ฐ์ ์ปดํจํฐ์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
๋์ผํ์ง๋ง ์ซ์์ ๋๋ค. ์ฌ๊ธฐ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ค์ํฉ๋๋ค.
์ด์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋ํด ์ด์ผ๊ธฐํ๋ค๋ฉด ์ด ์์ ์์๋ ํธ์ ์๋ฆผ์ ์๋ตํ๋ ์๋น์ค๊ฐ ์์ ํ ์๋ฒ๋ก ์ฌ์ฌ์ฉ๋ฉ๋๋ค. API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์ ์๋ก์ด ๊ฐ๋ฐ์ ์ด๋ฏธ ๊ทธ๊ฒ๊ณผ ์ํธ์์ฉํ๊ณ ์์ต๋๋ค.
๋น์ ์ฐ๋ฆฌ๋ NodeJS ๋ฒ์ 4๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ํ์ฌ(2017๋ - ed. note) ์ต๊ทผ ๊ฐ๋ฐ์์๋ NodeJS ๋ฒ์ 7์ ์ฌ์ฉํฉ๋๋ค. ์๋ก์ด ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ ์๋ก์ด ๊ตฌ์ฑ ์์์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ํธ์ ์๋ฆผ ์๋น์ค์์ NodeJS ๋ฒ์ ์ ๋ฆฌํฉํฐ๋งํ๊ณ ์ฌ๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ API ํธํ์ฑ์ ์ ์งํ ์ ์๋ค๋ฉด ์ด์ ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ก ๊ต์ฒดํ๋ ๊ฒ๋ ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
Docker๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ฌด์์ด ํ์ํฉ๋๊น? ํ์ํ ์ข ์์ฑ์ ์ค๋ช ํ๋ Dockerfile์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์์์ ๊ตฌ์ฑ ์์๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ์ต์ ์งํฉ์ ๋๋ค.
์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋ ์ํ๋ ์ํ๊ณ(Python, Ruby, NodeJS)๋ฅผ ์ค๋ช ํ๋ Dockerfile์ ๋ง๋ญ๋๋ค. docker-compose์์๋ ํ์ํ ์ข ์์ฑ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํ๊ณ ๊ฑฐ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๊ณ ์ค๋ช ํฉ๋๋ค.
์ ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด nginx์ ํจ๊ป ๋ณ๋์ ์ธ ๋ฒ์งธ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฌ์ง ์ ๋ก๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ฐฑ์๋๋ ์ ์ ์ ์ ๊ณตํ๋ nginx๊ฐ ์๋ ์ปจํ ์ด๋์๋ ๋ง์ดํธ๋๋ ๋ฏธ๋ฆฌ ์ค๋น๋ ๋ณผ๋ฅจ์ ๋ฃ์ต๋๋ค.
nginx, mysql ๊ตฌ์ฑ์ ์ ์ฅํ๊ธฐ ์ํด ํ์ํ ๊ตฌ์ฑ์ ์ ์ฅํ๋ Docker ํด๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ์์ ์ ์ปดํจํฐ์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ git ๋ณต์ ๋ฅผ ์ํํ๋ฉด ์ด๋ฏธ ๋ก์ปฌ ๊ฐ๋ฐ์ ์ํ ํ๋ก์ ํธ๊ฐ ์ค๋น๋ ๊ฒ์ ๋๋ค. ์ด๋ค ํฌํธ๋ ์ด๋ค ์ค์ ์ ์ ์ฉํ ์ง ์ง๋ฌธํ ํ์๊ฐ ์์ต๋๋ค.
๋ค์์ผ๋ก admin, inform-API, ํธ์ ์๋ฆผ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ์์ํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ dockerized-app์ด๋ผ๋ ๋ ๋ค๋ฅธ ์ ์ฅ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๋ ๊ฐ ๊ตฌ์ฑ ์์ ์ ์ ์ฌ๋ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ค์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค. GitLab์์๋ ํด๋์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ฐ๋ฐ์ ์ปดํจํฐ์์๋ ํน์ ํ๋ก์ ํธ์ ํด๋์ ๋๋ค. ํ ์์ค ์๋๋ ๊ฒฐํฉ๋ ๊ตฌ์ฑ ์์์ ๋๋ค.
์ด๊ฒ์ dockerized-app์ ๋ด์ฉ์ ๋ํ ์์์ ๋๋ค. ๋ํ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์ํธ ์์ฉ์ ํ์ํ ๊ตฌ์ฑ์ ์ฑ์ฐ๋ Docker ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ๊ธฐ๋ก ๊ฐ์ ธ์ต๋๋ค. ํ๋ก์ ํธ ์คํ ๋ฐฉ๋ฒ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๋ README.md๊ฐ ์์ต๋๋ค.
์ฌ๊ธฐ์๋ ๋ ๊ฐ์ docker-compose ํ์ผ์ ์ ์ฉํ์ต๋๋ค. ์ด๋ ๋จ๊ณ์ ์ผ๋ก ์คํํ ์ ์๋๋ก ์ํ๋ฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ฝ์ด๋ก ์์ ํ ๋ ํธ์ ์๋ฆผ์ด ํ์ํ์ง ์๊ณ ๋จ์ํ docker-compose ํ์ผ์ ์์ํ๋ฏ๋ก ๋ฆฌ์์ค๊ฐ ์ ์ฅ๋ฉ๋๋ค.
ํธ์ ์๋ฆผ๊ณผ ํตํฉํด์ผ ํ๋ ๊ฒฝ์ฐ docker-compose.yaml ๋ฐ docker-compose-push.yaml์ด ์์๋ฉ๋๋ค.
docker-compose.yaml๊ณผ docker-compose-push.yaml์ด ํ ํด๋์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ๊ฐ์ ๋คํธ์ํฌ๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
๊ตฌ์ฑํ ์ค๋ช . ๊ตฌ์ฑ ์์ ์์ง์ ๋ด๋นํ๋ ๊ณ ๊ธ ํ์ผ์ ๋๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ๋งํ ๊ฒ์ ๋ฌด์์ ๋๊น? ์ฌ๊ธฐ์์ ๋ฐธ๋ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ nginx๋ฅผ ์คํํ๋ ๊ธฐ์ฑํ Docker ์ด๋ฏธ์ง์ Docker ์์ผ์์ ์์ ๋๊ธฐํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๋์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์ผ๊ณ ๋ ๋ nginx ๊ตฌ์ฑ์ ์ฌ์์ฑํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ธ ๋ฒ์งธ ์์ค์ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๊ตฌ์ฑ ์์ ์ฒ๋ฆฌ๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฒฝ์ฐ .dev ๋๋ฉ์ธ์ธ api.informer.dev๋ฅผ ์ฌ์ฉํฉ๋๋ค. .dev ๋๋ฉ์ธ์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ์์ ๋ก์ปฌ ์ปดํจํฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ํ ๊ตฌ์ฑ์ด ๊ฐ ํ๋ก์ ํธ๋ก ์ ์ก๋๊ณ ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ๋์์ ํจ๊ป ์์๋ฉ๋๋ค.
๊ทธ๋ํฝ์ผ๋ก ๋ณผ ๋ ํด๋ผ์ด์ธํธ๋ ๋ธ๋ผ์ฐ์ ๋๋ ๋ฐธ๋ฐ์์ ์์ฒญํ๋ ๋๊ตฌ์ธ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๋๋ฉ์ธ ์ด๋ฆ ๋ฐธ๋ฐ์๋ ์ฐ๊ฒฐํ ์ปจํ ์ด๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๊ด๋ฆฌ์ JS๋ฅผ ์ ๊ณตํ๋ nginx์ผ ์ ์์ต๋๋ค. ์ด๊ฒ์ API๋ฅผ ์ ๊ณตํ๋ nginx์ด๊ฑฐ๋ ์ด๋ฏธ์ง ์ ๋ก๋์ ํํ๋ก nginx์ ์ ๊ณต๋๋ ์ ์ ํ์ผ์ผ ์ ์์ต๋๋ค.
๋ค์ด์ด๊ทธ๋จ์ ์ปจํ ์ด๋๊ฐ ๊ฐ์ ๋คํธ์ํฌ์ ์ํด ์ฐ๊ฒฐ๋๊ณ ํ๋ก์ ๋ค์ ์จ๊ฒจ์ ธ ์์์ ๋ณด์ฌ์ค๋๋ค.
๊ฐ๋ฐ์์ ๋จธ์ ์์๋ IP๋ฅผ ์๊ณ ์๋ ์ปจํ ์ด๋์ ์ ๊ทผํ ์ ์์ง๋ง ์์น์ ์ผ๋ก ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ง์ ์ก์ธ์คํ ํ์๊ฐ ๊ฑฐ์ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ปคํํ๊ธฐ ์ํด ์ด๋ค ์๋ฅผ ์ดํด๋ด์ผ ํ ๊น์? ์ ์๊ฐ์๋ ์ข์ ์๊ฐ MySQL์ ๊ณต์ ๋์ปค ์ด๋ฏธ์ง์ ๋๋ค.
๊ฝค ๋์ ์ ์ ๋๋ค. ๋ง์ ๋ฒ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ๊ธฐ๋ฅ์ ํตํด ์ถ๊ฐ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ง์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค. ์๊ฐ์ ๋ณด๋ด๊ณ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง ํ์ ํ๋ฉด ์์ฒด ๊ตฌํ์ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Hub.docker.com์๋ ์ผ๋ฐ์ ์ผ๋ก ์ง์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์๋ ์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ github.com์ ๋ํ ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๋ํ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์ด๊ธฐ ์ด๊ธฐํ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์์ ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ docker-endpoint.sh ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค.
๋ํ ์ด ์์์๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋จ์ผ ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ๋๋ docker-compose๋ฅผ ํตํด ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ docker๊ฐ MySQL ๋๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ชจ๋ ๋ฃจํธ์ ๋ํ ๋น ์ํธ๋ฅผ ์ค์ ํด์ผ ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
์์์ ์ํธ๋ฅผ ์์ฑํ๋ ์ต์ ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ํ์ํ๊ณ ์ฌ์ฉ์์ ๋ํ ์ํธ๋ฅผ ์ค์ ํด์ผ ํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ๋งํฉ๋๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ์ด๊ธฐํ๋ฅผ ๋ด๋นํ๋ Dockerfile์ ์ฝ๊ฐ ํตํฉํ์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ์ฐ๋ฆฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ์ฌ์ฉ์ ๊ถํ์ ํ์ฅ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ํ์์ ๋ง๊ฒ ์์ ํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ์์์ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ ์ ์์์ต๋๋ค. Ruby ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑ, ์์ ๋ฐ ์ญ์ ํ๋ ๋ช ๋ น์ด ์์ต๋๋ค.
์ด๊ฒ์ github.com์์ MySQL์ ํน์ ๋ฒ์ ์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ๋ํ ์์ ๋๋ค. Dockerfile์ ์ด๊ณ ์ค์น๊ฐ ์ด๋ป๊ฒ ์งํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
docker-endpoint.sh๋ ์ง์ ์ ์ ๋ด๋นํ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ด๊ธฐ ์ด๊ธฐํ ์ค์ ๋ช ๊ฐ์ง ์ค๋น ๋จ๊ณ๊ฐ ํ์ํ๋ฉฐ ์ด๋ฌํ ๋ชจ๋ ์์ ์ ์ด๊ธฐํ ์คํฌ๋ฆฝํธ์์๋ง ์ํ๋ฉ๋๋ค.
๋ ๋ฒ์งธ ๋ถ๋ถ์ผ๋ก ๋์ด ๊ฐ์๋ค.
์์ค ์ฝ๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํด gitlab์ผ๋ก ์ ํํ์ต๋๋ค. ์ด๊ฒ์ ์๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์๋ ์๋นํ ๊ฐ๋ ฅํ ์์คํ ์ ๋๋ค.
Gitlab์ ๊ตฌ์ฑ ์์ ์ค ํ๋๋ Gitlab CI์ ๋๋ค. ๋์ค์ ์ฝ๋ ์ ๋ฌ ์์คํ ์ ๊ตฌ์ฑํ๊ฑฐ๋ ์๋ ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉํ ์ผ๋ จ์ ๋ช ๋ น์ ์ค๋ช ํ ์ ์์ต๋๋ค.
Gitlab CI 2 ํ ํฌ
์ด์ Gitlab CI๋ฅผ ํ์ฑํํ๊ธฐ ์ํด ํ์ํ ์ฌํญ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. Gitlab CI๋ฅผ ์์ํ๋ ค๋ฉด ํ๋ก์ ํธ์ ๋ฃจํธ์ .gitlab-ci.yml ํ์ผ์ ๋ฃ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ํ ์คํธ, ๋ฐฐํฌ์ ๊ฐ์ ์ผ๋ จ์ ์ํ๋ฅผ ์คํํ๋ ค๊ณ ํ๋ค๊ณ ์ค๋ช ํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ธฐ ์ํด docker-compose๋ฅผ ์ง์ ํธ์ถํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. ์ด๊ฒ์ ๋จ์ง ๋ฐฑ์๋ ์์์ผ ๋ฟ์ ๋๋ค.
๋ค์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๊ณ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํด ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํด์ผ ํ๋ค๊ณ ๋งํฉ๋๋ค.
์คํฌ๋ฆฝํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๊ณ ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ์ง ์์ผ๋ฉด ์์คํ ์ ๋ฐฐํฌ์ ๋ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ์งํํฉ๋๋ค.
๋ฐฐํฌ ๋จ๊ณ๋ ํ์ฌ ์คํ ์ด์ง์ ์ํด ๊ตฌํ๋ฉ๋๋ค. ๊ฐ๋ ์ค์ง ์๊ฐ์ด ์๋ ์ฌ์์์ ๊ตฌ์ฑํ์ง ์์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฉ๊ธฐ๋ฅผ ๊ฐ์ ๋ก ๋ ๋ค์ ํ ์คํธ ์ค ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์์งํ ๋ชจ๋ ์ฉ๊ธฐ๋ฅผ ๋ค์ ๋ค์ด ์ฌ๋ฆฝ๋๋ค.
์ฐ๋ฆฌ๋ ํ์ฌ ํ๊ฒฝ ๋ณ์์ ๋ํด ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ง์คํฐ ๋ถ๊ธฐ์๋ง ์ ์ฉ๋๋ค๋ ์ฐธ๊ณ ์ฌํญ์ด ์์ต๋๋ค.
๋ค๋ฅธ ๋ถ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ๋ ์คํ๋์ง ์์ต๋๋ค.
๋ถ๊ธฐ๋ณ๋ก ๋กค์์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ด๋ฅผ ๋ ์ฒด๊ณํํ๋ ค๋ฉด Gitlab Runner๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
์ด ์ ํธ๋ฆฌํฐ๋ Golang์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์ข ์์ฑ์ด ํ์ํ์ง ์์ Golang ์ธ๊ณ์์ ํํ ๋ณผ ์ ์๋ ๋จ์ผ ํ์ผ์ ๋๋ค.
์์ํ ๋ Gitlab Runner๋ฅผ ๋ฑ๋กํฉ๋๋ค.
Gitlab ์น ์ธํฐํ์ด์ค์์ ํค๋ฅผ ์ป์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ช ๋ น์ค์์ ์ด๊ธฐํ ๋ช ๋ น์ ํธ์ถํฉ๋๋ค.
๋ํ์์ผ๋ก Gitlab Runner ์ค์ (Shell, Docker, VirtualBox, SSH)
Gitlab Runner์ ์ฝ๋๋ .gitlab-ci.yml ์ค์ ์ ๋ฐ๋ผ ๋ชจ๋ ์ปค๋ฐ์์ ์คํ๋ฉ๋๋ค.
์น ์ธํฐํ์ด์ค์ Gitlab์์ ์๊ฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๋ณด์ด๋์ง. GItlab CI๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋๋ฉด ํ์ฌ ๋น๋ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ๊ฐ ์์ต๋๋ค.
์ปค๋ฐ์ด 4๋ถ ์ ์ ๋ง๋ค์ด์ก๊ณ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ์ผ๋ฉฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์์ ์ ์ ์์ต๋๋ค.
๋น๋๋ฅผ ์์ธํ ์ดํด๋ณผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋ ์ํ๊ฐ ์ด๋ฏธ ํต๊ณผ๋์์์ ์ ์ ์์ต๋๋ค. ์คํ ์ด์ง์์ ์ํ ๋ฐ ๋ฐฐํฌ ์ํ๋ฅผ ํ ์คํธํฉ๋๋ค.
ํน์ ๋น๋๋ฅผ ํด๋ฆญํ๋ฉด .gitlab-ci.yml์ ๋ฐ๋ผ ํ๋ก์ธ์ค์์ ์คํ๋ ๋ช ๋ น์ ์ฝ์ ์ถ๋ ฅ์ด ๋ํ๋ฉ๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ ์ ํ ํ์คํ ๋ฆฌ์ ๋ชจ์ต์ ๋๋ค. ์ฑ๊ณต์ ์ธ ์๋๊ฐ ์์์์ ์ ์ ์์ต๋๋ค. ํ ์คํธ๊ฐ ์ ์ถ๋๋ฉด ๋ค์ ๋จ๊ณ๋ก ์งํ๋์ง ์๊ณ ์คํ ์ด์ง ์ฝ๋๊ฐ ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
๋์ปค๋ฅผ ๊ตฌํํ ๋ ์คํ ์ด์ง์์ ์ด๋ค ์์ ์ ํด๊ฒฐํ์ต๋๊น? ์ฐ๋ฆฌ ์์คํ ์ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ์ ์ฒด ์์คํ ์ด ์๋๋ผ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ ๋ฐ์ดํธ๋ ๊ตฌ์ฑ ์์ ์ค ์ผ๋ถ๋ง ๋ค์ ์์ํด์ผ ํ์ต๋๋ค.
์ด๋ฅผ ์ํด ๋ชจ๋ ๊ฒ์ ๋ณ๋์ ํด๋๋ก ๋ถ์ํด์ผ ํ์ต๋๋ค.
์ด ์์ ์ ์ํํ ํ Docker-compose๊ฐ ๊ฐ ์๋น ์ ๋ํ ์์ฒด ๋คํธ์ํฌ ๊ณต๊ฐ์ ์์ฑํ๊ณ ์ด์์ ๊ตฌ์ฑ ์์๋ฅผ ๋ณด์ง ๋ชปํ๋ค๋ ์ฌ์ค์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์ฐํํ๊ธฐ ์ํด Docker์์ ์๋์ผ๋ก ๋คํธ์ํฌ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด ํ๋ก์ ํธ์ ์ด๋ฌํ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ Docker-compose๋ก ์์ฑ๋์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ๋ฉ์๋ก ์์ํ๋ ๊ฐ ๊ตฌ์ฑ ์์๋ ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ด ๋๋ค.
๋ค์ ๋ฌธ์ ๋ ์คํ ์ด์ง์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ก ๋ถํ ํ๋ ๊ฒ์ ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด ์๋ฆ๋ต๊ณ ์์ฐ์ ์ต๋ํ ๊ฐ๊น๊ฒ ๋ณด์ด๋ ค๋ฉด WEB์ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ ํฌํธ 80 ๋๋ 443์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ป๊ฒ ํด๊ฒฐํ์ต๋๊น? ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฃผ์ ํ๋ก์ ํธ์ ํ๋์ Gitlab Runner๋ฅผ ํ ๋นํ์ต๋๋ค.
Gitlab์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๋ถ์ฐํ Gitlab Runner๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด Runner๋ ํผ๋์ค๋ฌ์ด ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์์ ์ ์ฐจ๋ก๋ก ์ํํ๊ณ ์คํํฉ๋๋ค.
์ง์ด ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ ๊ทธ๋ฃน์ ๋ณผ๋ฅจ ๋ฌธ์ ์์ด ๋์ฒํ ์ ์๋ Gitlab Runner ํ๋๋ก ์ ํํ์ต๋๋ค.
์ฐ๋ฆฌ๋ nginx-proxy๋ฅผ ๋ณ๋์ ์์ ์คํฌ๋ฆฝํธ๋ก ์ฎ๊ธฐ๊ณ ๊ทธ ์์ ๋ชจ๋ ํ๋ก์ ํธ์ ๋ํ ๊ทธ๋ฆฌ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ์๋ ํ๋์ ๊ทธ๋ฆฌ๋๊ฐ ์๊ณ ๋ฐธ๋ฐ์์๋ ํ๋ก์ ํธ ์ด๋ฆ๋ณ๋ก ์ฌ๋ฌ ๊ฐ์ ๊ทธ๋ฆฌ๋๊ฐ ์์ต๋๋ค. ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ ํ๋ก์ํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ์์ฒญ์ ํฌํธ 80์ ๋๋ฉ์ธ์ ํตํด ๋ค์ด์ค๊ณ ์ด ๋๋ฉ์ธ์ ์ ๊ณตํ๋ ์ปจํ ์ด๋ ๊ทธ๋ฃน์ผ๋ก ํ์ธ๋ฉ๋๋ค.
๋ ์ด๋ค ๋ฌธ์ ๊ฐ ์์๋์? ์ด๊ฒ์ ๋ชจ๋ ์ปจํ ์ด๋๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฃจํธ๋ก ์คํ๋๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์์คํ ์ ๋ฃจํธ ํธ์คํธ์ ๋ค๋ฅธ ๋ฃจํธ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ปจํ ์ด๋์ ๋ค์ด๊ฐ๋ฉด ๋ฃจํธ๊ฐ ๋๋ฉฐ ์ด ์ปจํ ์ด๋์์ ์์ฑํ๋ ํ์ผ์ ๋ฃจํธ ๊ถํ์ ๊ฐ์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ ์ปจํ ์ด๋์ ๋ค์ด๊ฐ ํ์ผ์ ์์ฑํ๋ ๋ช ๊ฐ์ง ๋ช ๋ น์ ์ํํ ๋ค์ ์ปจํ ์ด๋๋ฅผ ๋ ๋ ๊ฒฝ์ฐ ์ก์ธ์ค ๊ถํ์ด ์๋ ์์ ๋๋ ํฐ๋ฆฌ์ ํ์ผ์ด ์๋ ๊ฒ์ ๋๋ค.
์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์ต๋๊น? ์ปจํ ์ด๋์ ํฌํจ๋ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๊น?
์ฌ์ฉ์๋ฅผ ์์ฑํ ๋ ๋์ผํ ๊ทธ๋ฃน ID(UID)์ ์ฌ์ฉ์ ID(GID)๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ปจํ ์ด๋์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ID๊ฐ 1000์ธ ์ฌ์ฉ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๊ฒ์ ๊ฑฐ์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ Ubuntu OS๋ฅผ ์ฌ์ฉํ๋ค๋ ์ฌ์ค๊ณผ ์ผ์นํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Ubuntu์์ ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์์ ID๋ 1000์ ๋๋ค.
๊ณํ์ด ์์ต๋๊น?
๋์ปค ์ค๋ช ์๋ฅผ ์ฝ์ผ์ญ์์ค. ํ๋ก์ ํธ๊ฐ ํ๋ฐํ ์งํ ์ค์ด๋ฉฐ ๋ฌธ์๊ฐ ๋ณ๊ฒฝ๋๊ณ ์์ต๋๋ค. XNUMX~XNUMX๊ฐ์ ์ ์ ๋ฐ์ ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์์ํ ๊ตฌ์์ด ๋์ด๊ฐ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ํด๊ฒฐํ ๋ฌธ์ ์ค ์ผ๋ถ๋ ํ์ค ์๋จ์ผ๋ก ์ด๋ฏธ ํด๊ฒฐ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ทธ๋์ ๋๋ ์ค์ผ์คํธ๋ ์ด์ ์ผ๋ก ์ง์ ๊ฐ๊ธฐ ์ํด ์ด๋ฏธ ๋ ๋์๊ฐ๊ณ ์ถ์ต๋๋ค.
ํ ๊ฐ์ง ์๋ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ Docker Swarm์ด๋ผ๋ Docker์ ๊ธฐ๋ณธ ์ ๊ณต ๋ฉ์ปค๋์ฆ์ ๋๋ค. Docker Swarm ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๋์ ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๊ณ ์ถ์ต๋๋ค.
์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ฉด ๋ก๊ทธ ์์ ์ด ๋ถํธํด์ง๋๋ค. ์ด์ ๋ก๊ทธ๊ฐ ๊ฒฉ๋ฆฌ๋์์ต๋๋ค. ๊ทธ๋ค์ ์ปจํ ์ด๋์ ํฉ์ด์ ธ ์์ต๋๋ค. ์์ ์ค ํ๋๋ ์น ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ก๊ทธ์ ํธ๋ฆฌํ๊ฒ ์ก์ธ์คํ๋ ๊ฒ์ ๋๋ค.
์ถ์ฒ : habr.com