์ฝ๊ฐ์ ์ด๋ก ์ผ๋ก ์์ํฉ์๋ค. ๋ฌด์จ ์ผ์ด์ผ ์ด๋ ์์ ์ฑ ?
๊ฐ๋จํ ๋งํด์ ์ด ๋ฌธ์๋ SaaS ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ์ ๋จ์ํํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ๊ฐ๋ฐ์์ DevOps ์์ง๋์ด๊ฐ ์ต์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์์ฃผ ์ ํ๊ฒ ๋๋ ๋ฌธ์ ์ ์ฌ๋ก๋ฅผ ์ธ์ํ๋๋ก ๋์ต๋๋ค.
์ด ๋ฌธ์๋ Heroku ํ๋ซํผ ๊ฐ๋ฐ์๊ฐ ์์ฑํ์ต๋๋ค.
Twelve-Factor App ๋ฐฉ๋ฒ๋ก ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋๊ณ ํ์ฌ ์ง์ ์๋น์ค(๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ฉ์์ง ํ, ์บ์ ๋ฑ)์ ๋ชจ๋ ์กฐํฉ์ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด ๋ฐฉ๋ฒ๋ก ์ ๊ธฐ๋ฐ์ด ๋๋ ์์ ์์ฒด์ ๋ํด ๊ฐ๋ตํ ์ค๋ช ํฉ๋๋ค.
- ์ฝ๋๋ฒ ์ด์ค โ ํ๋์ ์์ค ์ถ์ ์ฝ๋๋ฒ ์ด์ค โ ๋ค์ค ๋ฐฐํฌ
- ์ข ์์ฑ โ ์ข ์์ฑ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ๊ณ ๋ถ๋ฆฌ
- ๊ตฌ์ฑ โ ๋ฐํ์ ์ ๊ตฌ์ฑ ์ ์ฅ
- ํ์ฌ ์๋น์ค(์ง์ ์๋น์ค) โ ์ง์ ์๋น์ค๋ฅผ ํ๋ฌ๊ทธํ ๋ฆฌ์์ค๋ก ์ทจ๊ธ
- ๋น๋, ๋ฆด๋ฆฌ์ค, ์คํ โ ์๊ฒฉํ๊ฒ ๋ถ๋ฆฌ๋ ๋น๋ ๋ฐ ์คํ ๋จ๊ณ
- ํ๋ก์ธ์ค - ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ ์ด์์ ์ํ ๋น์ ์ฅ ํ๋ก์ธ์ค๋ก ์คํ
- ํฌํธ ๋ฐ์ธ๋ฉ โ ํฌํธ ๋ฐ์ธ๋ฉ์ ํตํ ๋ด๋ณด๋ด๊ธฐ ์๋น์ค
- ๋ณํ โ ํ๋ก์ธ์ค๋ก ์ฑ ํ์ฅ
- ์ผํ์ฉ โ ๋น ๋ฅธ ์์ ๋ฐ ์ ์์ ์ธ ์ข ๋ฃ๋ก ์์ ์ฑ ๊ทน๋ํ
- ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ/์ด์ ํจ๋ฆฌํฐ โ ๊ฐ๋ฐ, ์คํ ์ด์ง ๋ฐ ํ๋ก๋์ ํ๊ฒฝ์ ์ต๋ํ ์ ์ฌํ๊ฒ ์ ์ง
- ๋ฒ์ฑ ๋ฐ์ถ - ๋ก๊ทธ๋ฅผ ์ด๋ฒคํธ ์คํธ๋ฆผ์ผ๋ก ์ฒ๋ฆฌ
- ๊ด๋ฆฌ ์์ โ ์ผํ์ฑ ํ๋ก์ธ์ค๋ก ๊ด๋ฆฌ/๊ด๋ฆฌ ์ ๋ฌด ์ํ
12๊ฐ์ง ์์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
-
๊ณต์ ์ถ์ฒ - ํ๋ -
Habr์ ๋ํ ๊ธฐ์ฌ. Twelve-Factor ์ฑ - Twelve-Factor ์ฑ - ๊ณต์ ๋ฒ์ญ -
Habr์ ๋ํ ๊ธฐ์ฌ. 7 Factor ์ฑ์์ ๋๋ฝ๋ 12๊ฐ์ง ์์ โ ๊ฐ์ ์ ์ํด 12๊ฐ์ง ์์๋ฅผ ์๋กญ๊ฒ ์ดํด๋ด ๋๋ค.
๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ ๋ฌด์์ ๋๊น?
Blue-Green ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฐ ์ต์ข ๊ณ ๊ฐ์ด ์์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด์ง ๋ชปํ๋ ๋ฐฉ์์ผ๋ก. ์ฆ, XNUMX์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ์ค๋จ ์๊ฐ.
ํด๋์ BG Deploy ์ฒด๊ณ๋ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ต๋๋ค.
- ์ฒ์์๋ ์ฝ๋, ์ ํ๋ฆฌ์ผ์ด์ , ํ๋ก์ ํธ๊ฐ ์ ํํ ๋์ผํ 2๊ฐ์ ๋ฌผ๋ฆฌ์ ์๋ฒ๊ฐ ์๊ณ ๋ผ์ฐํฐ(๋ฐธ๋ฐ์)๊ฐ ์์ต๋๋ค.
- ๋ผ์ฐํฐ๋ ์ฒ์์ ๋ชจ๋ ์์ฒญ์ ์๋ฒ(๋ น์).
- ๋ค์ ๋ฆด๋ฆฌ์ค๋ฅผ ํด์ผ ํ๋ ์๊ฐ ๋ค๋ฅธ ์๋ฒ์์ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค(ัะธะฝะธะน), ํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์์ง ์์ต๋๋ค.
- ์ฝ๋ ์ ๋ ฅ ํ ํธ๋ฅธ ์๋ฒ๊ฐ ์์ ํ ์ ๋ฐ์ดํธ๋๊ณ ๋ผ์ฐํฐ๋ ๋ค์์์ ์ ํํ๋ผ๋ ๋ช ๋ น์ ๋ฐ์ต๋๋ค. ๋ น์ ์ ัะธะฝะธะน ์๋ฒ.
- ์ด์ ๋ชจ๋ ํด๋ผ์ด์ธํธ๋ ํธ๋ฅธ ์ฌ๊ธฐ๋ ์ฌ๋.
- ๋ช ์๊ฐ ๋์, ๋ น์ ๋ฐฐํฌ์ ์คํจํ ๊ฒฝ์ฐ ์๋ฒ๋ ๋ฐฑ์ ์ญํ ์ ํฉ๋๋ค. ัะธะฝะธะน ์๋ฒ ๋ฐ ์ค๋ฅ ๋ฐ ๋ฒ๊ทธ์ ๊ฒฝ์ฐ ๋ผ์ฐํฐ๋ ์ฌ์ฉ์ ํ๋ฆ์ ๋ค์ ๋ น์ ์ด์ ์์ ๋ฒ์ ์ผ๋ก ์๋ฒ์ ์ ์ฅํ๊ณ ์์ ๋ฐ ํ ์คํธ๋ฅผ ์ํด ์ ์ฝ๋๋ฅผ ๋ณด๋ ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค๊ฐ ๋๋๋ฉด ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๋ น์ ์ฌ๊ธฐ๋ ์ฌ๋. ์ ๋ฐ์ดํธ ํ ๋ผ์ฐํฐ๋ ์์ฒญ ํ๋ฆ์ ๋ค์ ๋ค์์ผ๋ก ์ ํํฉ๋๋ค. ๋ น์ ์๋ฒ.
๊ทธ๊ฒ์ ๋ชจ๋ ๋งค์ฐ ์ข์ ๋ณด์ด๋ฉฐ ์ธ๋ป๋ณด๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์์ด์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ํ๋ ์ฌํ์ ์ด๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณ ์ ์ ์ธ ๊ณํ์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ฌผ๋ฆฌ์ ์ ํ ์ต์
์ ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ง ์์ต๋๋ค. ์ง๊ธ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ณ ๋์ค์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋์ ์กฐ์ธ๊ณผ ์ข์ ์กฐ์ธ
์ฑ ์ ๋ถ์ธ: ์๋ ์์ ๋ ๋ด๊ฐ ์ฌ์ฉํ๋ ์ ํธ๋ฆฌํฐ/๋ฐฉ๋ฒ๋ก ์ ๋ณด์ฌ์ค๋๋ค. ๋น์ทํ ๊ธฐ๋ฅ์ ๊ฐ์ง ๋์์ ์ ๋์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ์์ ๋ ์ด๋ป๊ฒ๋ PHP ๋ฐ Docker๋ฅผ ์ฌ์ฉํ๋ ์น ๊ฐ๋ฐ๊ณผ ๊ต์ฐจํ ๊ฒ์ ๋๋ค.
์๋ ๋จ๋ฝ์๋ ํน์ ์์ ๋ํ ์์ ์ฌ์ฉ์ ๋ํ ๊ฐ๋จํ ์ค์ ์ค๋ช ์ด ์์ต๋๋ค. ์ด ์ฃผ์ ์ ๋ํ ๋ ๋ง์ ์ด๋ก ์ ์ป์ผ๋ ค๋ฉด ์์ ์๋ณธ ์์ค ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
1. ์ฝ๋๋ฒ ์ด์ค
FTP ๋ฐ FileZilla๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ํ ๋ฒ์ ํ๋์ฉ ์๋ฒ์ ์ ๋ก๋ํ๊ณ ํ๋ก๋์ ์๋ฒ๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๊ณณ์ ์ฝ๋๋ฅผ ์ ์ฅํ์ง ๋ง์ญ์์ค.
ํ๋ก์ ํธ์๋ ํญ์ ๋จ์ผ ์ฝ๋ ๋ฒ ์ด์ค๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ฆ, ๋ชจ๋ ์ฝ๋๋ ํ๋์ ์ฝ๋ ๋ฒ ์ด์ค์์ ๋์ต๋๋ค. ํ๋ด ์ ์ฅ์. ์๋ฒ(ํ๋ก๋์ , ์คํ ์ด์ง, ํ ์คํธ1, ํ ์คํธ2 ...)๋ ํ๋์ ๊ณต์ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ถ๊ธฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋ ์ผ๊ด์ฑ์ ๋ฌ์ฑํฉ๋๋ค.
2. ์ข ์์ฑ
ํด๋์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ๋ฃจํธ์ ์ง์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ ์ฝ๋๋ฅผ ํ์ฌ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ํด๋๋ก ์ ์กํ์ฌ ๊ฐ๋จํ๊ฒ ์ ๋ฐ์ดํธํ์ญ์์ค. ํ์ํ ๋ชจ๋ ์ ํธ๋ฆฌํฐ๋ฅผ ๋ค๋ฅธ 20๊ฐ์ ์๋น์ค๊ฐ ์คํ ์ค์ธ ํธ์คํธ ์๋ฒ์ ์ง์ ๋ฐฐ์นํ์ญ์์ค.
ํ๋ก์ ํธ์๋ ํญ์ ๋ช
ํํ๊ฒ ์ดํดํ ์ ์๋ ์ข
์์ฑ ๋ชฉ๋ก์ด ์์ด์ผ ํฉ๋๋ค(์ข
์์ฑ์ด๋ ํ๊ฒฝ์ ์๋ฏธํ๊ธฐ๋ ํฉ๋๋ค). ๋ชจ๋ ์ข
์์ฑ์ ๋ช
์์ ์ผ๋ก ์ ์๋๊ณ ๊ฒฉ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ณด์ ์๊ณก๊ฐ ะธ ๋์ปค.
์๊ณก๊ฐ - PHP์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ์ ์๊ฒ ํด์ฃผ๋ ํจํค์ง ๊ด๋ฆฌ์. Composer๋ ๋ฒ์ ์ ์๊ฒฉํ๊ฒ ์ง์ ํ๊ฑฐ๋ ์๊ฒฉํ์ง ์๊ฒ ์ง์ ํ๊ณ ๋ช ์์ ์ผ๋ก ์ ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ฒ์๋ 20๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์์ ์ ์์ผ๋ฉฐ ๊ฐ ํ๋ก์ ํธ์๋ ์๋ก ๋ ๋ฆฝ์ ์ธ ํจํค์ง ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ธ ๋ชฉ๋ก์ด ์์ต๋๋ค.
๋์ปค - ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋ํ ํ๊ฒฝ์ ์ ์ํ๊ณ ๊ฒฉ๋ฆฌํ ์ ์๋ ์ ํธ๋ฆฌํฐ์ ๋๋ค. ๋ฐ๋ผ์ ์๊ณก๊ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ์ฒ ์ ํ๊ฒ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฌด์๊ณผ ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ํน์ ๋ฒ์ ์ PHP๋ฅผ ์ ํํ๊ณ ์ถ๊ฐ ํญ๋ชฉ ์์ด ํ๋ก์ ํธ๊ฐ ์๋ํ๋ ๋ฐ ํ์ํ ํจํค์ง๋ง ์ค์นํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํจํค์ง์ ํธ์คํธ ์์คํ ๋ฐ ๊ธฐํ ํ๋ก์ ํธ์ ํ๊ฒฝ์ ๋ฐฉํดํ์ง ์๋ ๊ฒ์ ๋๋ค. ์ฆ, Docker๋ฅผ ํตํด ์คํ๋๋ ์๋ฒ์ ๋ชจ๋ ํ๋ก์ ํธ๋ ์ ๋์ ์ผ๋ก ๋ชจ๋ ํจํค์ง ์ธํธ์ ์์ ํ ๋ค๋ฅธ ํ๊ฒฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
3. ๊ตฌ์ฑ
์ฝ๋์์ ๋ฐ๋ก ์์๋ก ๊ตฌ์ฑ์ ์ ์ฅํฉ๋๋ค. ํ ์คํธ ์๋ฒ์ฉ ์์์ ํ๋ก๋์ ์ฉ ์์๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. if else ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋น์ฆ๋์ค ๋ก์ง์์ ์ง์ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ตฌ์ฑ - ์ด๊ฒ์ ํ๋ก์ ํธ ๋ฐฐํฌ(๋ฐฐํฌ)์์ ๋ฌ๋ผ์ผ ํ๋ ์ ์ผํ ๊ฒ์ ๋๋ค. ์ด์์ ์ผ๋ก ๊ตฌ์ฑ์ ํ๊ฒฝ ๋ณ์(env vars)๋ฅผ ํตํด ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค.
์ฆ, ์ฌ๋ฌ ๊ตฌ์ฑ ํ์ผ .config.prod .config.local์ ์ ์ฅํ๊ณ ๋ฐฐํฌ ์ .config(์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ธฐ๋ณธ ๊ตฌ์ฑ)๋ก ์ด๋ฆ์ ๋ฐ๊พธ๋๋ผ๋ ์ด๋ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ์๋๋๋ค. ์ด ๊ฒฝ์ฐ ๊ตฌ์ฑ ์ ๋ณด๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํ๋ก๋์ ์๋ฒ์ ๋ฐ์ดํฐ๋ ์์๋ฉ๋๋ค. ๋ชจ๋ ๊ตฌ์ฑ์ ๋ฐฐํฌ ์์คํ (CI/CD)์ ์ง์ ์ ์ฅ๋์ด์ผ ํ๋ฉฐ ๋ฐฐํฌ ์์ ์ ํน์ ํ๊ฒฝ์ ํ์ํ ์๋ก ๋ค๋ฅธ ๊ฐ์ผ๋ก ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์ ๋ง๊ฒ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
4. ์ XNUMX์ ์๋น์ค(๋ฐฑํน ์๋น์ค)
ํ๊ฒฝ์ ๋จ๋จํ ๋ฌถ๊ณ ํน์ ํ๊ฒฝ์์ ๋์ผํ ์๋น์ค์ ๋ํด ๋ค๋ฅธ ์ฐ๊ฒฐ์ ์ฌ์ฉํ์ญ์์ค.
์ค์ ๋ก ์ด ํญ๋ชฉ์ ๊ตฌ์ฑ์ ๋ํ ํญ๋ชฉ๊ณผ ๊ฐ๋ ฅํ๊ฒ ๊ต์ฐจํฉ๋๋ค. ์ด ํญ๋ชฉ์ด ์์ผ๋ฉด ์ ์์ ์ธ ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ ์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์ฑ ์๋น์ค์ ๊ฐ์ ์ธ๋ถ ์๋น์ค์ ๋ํ ๋ชจ๋ ์ฐ๊ฒฐ์ ๋ก์ปฌ ํ๊ฒฝ๊ณผ ํ์ฌ/ํ๋ก๋์ ํ๊ฒฝ ๋ชจ๋์์ ๋์ผํด์ผ ํฉ๋๋ค. ์ฆ, ์์ฉ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ์ ๋ ์ง ์ฐ๊ฒฐ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ์ฌ ๋ฒ ์ด์ค #1์ ๋ํ ํธ์ถ์ ๋ฒ ์ด์ค #2๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋๋ ์๋ฅผ ๋ค์ด ์๋น์ค๋ฅผ ํ์ฅํ ๋ ์ถ๊ฐ ์บ์ ์๋ฒ์ ๋ํด ํน๋ณํ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ์ ํ์ํ ํ์๊ฐ ์์ต๋๋ค.
5. ๋น๋, ๋ฆด๋ฆฌ์ค, ์คํ
๋ฆด๋ฆฌ์ค๋ฅผ ๋กค๋ฐฑํ ๊ธฐํ ์์ด ์๋ฒ์ ์ฝ๋์ ์ต์ข ๋ฒ์ ๋ง ๋ณด๊ดํ์ญ์์ค. ๋์คํฌ ๊ณต๊ฐ์ ์ฑ์ธ ํ์๊ฐ ์์ต๋๋ค. ์ค๋ฅ๊ฐ ์๋ ์ฝ๋๋ฅผ ์์ฐ์ ํฌ์ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ ๋์ ํ๋ก๊ทธ๋๋จธ์ ๋๋ค!
๋ชจ๋ ๋ฐฐํฌ ๋จ๊ณ๋ ์๋ก ๋ถ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
๋กค๋ฐฑํ ๊ธฐํ๊ฐ ์์ต๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ด์ ๋ฒ์ ์ ๋ณต์ํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ ๋ณต์ฌ๋ณธ(์ด๋ฏธ ์กฐ๋ฆฝ๋๊ณ ์ ํฌ ์ค๋น๊ฐ ๋จ)์ ๋น ๋ฅด๊ฒ ์ก์ธ์คํ ์ ์๋ ๋ฆด๋ฆฌ์ค๋ฅผ ๋ง๋ญ๋๋ค. ์ฆ, ์กฐ๊ฑด๋ถ๋ก ํด๋๊ฐ ์์ต๋๋ค. ์ถ์ ๋ฐ ํด๋ current, ์ฑ๊ณต์ ์ธ ๋ฐฐํฌ ๋ฐ ์กฐ๋ฆฝ ํ ํด๋ current ๋ด๋ถ์ ์๋ ์ ๋ฆด๋ฆฌ์ค์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ์ถ์ ๋ฆด๋ฆฌ์ค ๋ฒํธ์ ์กฐ๊ฑด๋ถ ์ด๋ฆ์ผ๋ก.
์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ Blue-Green ๋ฐฐํฌ๋ฅผ ๊ธฐ์ตํฉ๋๋ค. ์ฝ๋ ๊ฐ์ ์ ํํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๊ฒ์ ๋กค๋ฐฑํ ์ ์๋ ๊ธฐ๋ฅ์ ํตํด ๋ชจ๋ ๋ฆฌ์์ค์ ํ๊ฒฝ ๊ฐ์๋ ์ ํํ ์ ์์ต๋๋ค.
6. ํ๋ก์ธ์ค
์ ํ๋ฆฌ์ผ์ด์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด์ ์ง์ ์ ์ฅํฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ์์ฒด์ RAM์์ ์ธ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ XNUMX์ ์๋น์ค ๊ฐ์ ๊ณต์ ํ ์ ์๋ ํ ์ต๋ํ ๋ง์ด ์ฌ์ฉํ์ญ์์ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ๋์ ํ๋ก์ธ์ค๋ง ๊ฐ์ง ์ ์๊ณ ํ์ฅ์ ํ์ฉํ์ง ์๋๋ค๋ ์ฌ์ค์ ์ฐ๊ฒฐํ์ญ์์ค.
์ธ์ ๊ณผ ๊ด๋ จํ์ฌ ํ์ฌ ์๋น์ค(memcached, redis)์ ์ํด ์ ์ด๋๋ ์บ์์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก 20๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ธ ๊ฒฝ์ฐ์๋ ์บ์์ ์ก์ธ์คํ๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ์ํ์์ ํด๋ผ์ด์ธํธ์ ๊ณ์ ์์ ํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๊ณ ์์๋ ๊ฒฝ์ฐ. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉํ๋ ํ์ฌ ์๋น์ค ์ฌ๋ณธ ์์ ๊ด๊ณ์์ด ๋ฐ์ดํฐ ์ก์ธ์ค ๋ฌธ์ ์์ด ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํฉ๋๋ค.
7. ํฌํธ ๋ฐ์ธ๋ฉ
์น ์๋ฒ๋ง ํ์ฌ ์๋น์ค์ ์์
ํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์น ์๋ฒ ๋ด์์ ๋ฐ๋ก ํ์ฌ ์๋น์ค๋ฅผ ์ฌ๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด Apache์ PHP ๋ชจ๋๋ก.
๋ชจ๋ ์๋น์ค๋ ์ผ๋ถ ์ฃผ์ ๋ฐ ํฌํธ(localgost:5432, localhost:3000, nginx:80, php-fpm:9000)์ ๋ํ ํธ์ถ์ ํตํด ์๋ก ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฆ, nginx์์ php-fpm ๋ฐ postgres, php-fpm์์ postgres ๋ฐ nginx๋ก, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์๋น์ค ์์ฒด์์ ๋ค๋ฅธ ์๋น์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋น์ค์ ์ํ๋ ๋ค๋ฅธ ์๋น์ค์ ์ํ์ ์ฐ๊ฒฐ๋์ง ์์ต๋๋ค.
8. ๋ณ๋ ฌ์ฑ
ํ๋์ ํ๋ก์ธ์ค๋ก ์์ ํ๋ฉด ๊ฐ์๊ธฐ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์๋ก ์ด์ธ๋ฆฌ์ง ์๊ฒ ๋ฉ๋๋ค!
ํฌ๊ธฐ ์กฐ์ ์ต์
์ ๊ทธ๋๋ก ๋ก๋๋ค. Docker Swarm์ ์ด์ ์ ํฉํฉ๋๋ค.
Docker Swarm์ ์๋ก ๋ค๋ฅธ ์์คํ
๊ณผ ๋์ผํ ์์คํ
์ ์ฌ๋ฌ ์ปจํ
์ด๋ ๊ฐ์ ์ปจํ
์ด๋ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ์
๋๋ค.
swarm์ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ก์ธ์ค์ ํ ๋นํ ๋ฆฌ์์ค ์์ ๋์ผํ ์๋น์ค์ ํ๋ก์ธ์ค ์๋ฅผ ๊ฒฐ์ ํ ์ ์์ผ๋ฉฐ ์ง์ ๋ ํฌํธ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ด๋ถ ๋ฐธ๋ฐ์๊ฐ ์๋์ผ๋ก ํ๋ก์ธ์ค์ ํ๋ก์ํฉ๋๋ค. ๋ฐ๋ผ์ ์๋ฒ์ ๋ถํ๊ฐ ์ฆ๊ฐํ ๊ฒ์ ํ์ธํ๊ณ ๋ ๋ง์ ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํ์ฌ ํน์ ํ๋ก์ธ์ค์ ๋ถํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
9. ์ผํ์ฉ
ํ๋ก์ธ์ค ๋ฐ ๋ฐ์ดํฐ ์์ ์ ๋๊ธฐ์ด์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๋ฉด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ํ๋์ ์๋น์ค๊ฐ ์ค๋จ๋๋ฉด ๋ชจ๋ ์๋น์ค๊ฐ ์ค๋จ๋ฉ๋๋ค.
๊ฐ ํ๋ก์ธ์ค์ ์๋น์ค๋ ์ธ์ ๋ ์ง ๋ ์ ์์ผ๋ฉฐ ์ด๋ ๋ค๋ฅธ ์๋น์ค์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํฉ๋๋ค. . ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋ถ๋๋ฝ๊ฒ ์ข ๋ฃ๋์ด์ผ ์ข ๋ฃ ์ ๋ฐ์ดํฐ๊ฐ ์ํฅ์ ๋ฐ์ง ์๊ณ ๋ค์์ ์์คํ ์ ์ผค ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ ์ ์์ต๋๋ค. ์ฆ, ์ค๋จ๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํฉ๋๋ค(ํธ๋์ญ์ ๋ฉ์ปค๋์ฆ์ด ์ฌ๊ธฐ์ ์ ํฉํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ ๊ทธ๋ฃน์์๋ง ์๋ํ๋ฉฐ ๊ทธ๋ฃน์์ ์ ์ด๋ ํ๋์ ์ฟผ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ์ ํจ๊ป ์คํ๋ ๊ฒฝ์ฐ) , ๊ทธ๋ฃน์ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ ๊ฒฐ๊ตญ ์คํ๋์ง ์์ต๋๋ค).
10. ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ/์ด์ ํจ๋ฆฌํฐ
์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก๋์ , ์คํ ์ด์ง ๋ฐ ๋ก์ปฌ ๋ฒ์ ์ ๋ฌ๋ผ์ผ ํฉ๋๋ค. ํ๋ก๋์ ์์๋ Yii Lite ํ๋ ์์ํฌ์ ๋ก์ปฌ Yii๊ฐ ์์ผ๋ฏ๋ก ํ๋ก๋์ ์์ ๋ ๋น ๋ฅด๊ฒ ์๋ํฉ๋๋ค!
์ค์ ๋ก ๋ชจ๋ ๋ฐฐํฌ ๋ฐ ์ฝ๋ ์์ ์ ๊ฑฐ์ ๋์ผํ ํ๊ฒฝ์ ์์ด์ผ ํฉ๋๋ค(๋ฌผ๋ฆฌ์ ํ๋์จ์ด์ ๋ํด ๋งํ๋ ๊ฒ์ด ์๋๋๋ค). ๋ํ ๋ชจ๋ ๊ฐ๋ฐ ์ง์์ ํ์ํ ๊ฒฝ์ฐ ํ๋ก๋์ ์ ์ฝ๋๋ฅผ ๋ฐฐํฌํ ์ ์์ด์ผ ํ๋ฉฐ ํน์ํ ํ์ผ๋ก ์ธํด ํ๋ก๋์ ์์๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฆด ์ ์๋ ํน์ ๊ต์ก์ ๋ฐ์ DevOps ๋ถ์๊ฐ ์๋๋๋ค.
Docker๋ ์ด์ ๋์์ด ๋ฉ๋๋ค. ์ด์ ์ ๋ชจ๋ ์ฌํญ์ ๋ฐ๋ผ docker๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋์ ํ๊ฒฝ๊ณผ ๋ก์ปฌ ์์คํ ๋ชจ๋์ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ํ๋ก์ธ์ค์์ ํ๋ ๋๋ ๋ ๊ฐ์ ๋ช ๋ น์ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
11. ๋ก๊น (๋ก๊ทธ)
์ฐ๋ฆฌ๋ ํ์ผ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค! ๋ก๊ทธ์์ ํ์ผ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฆฌํ์ง ์์ต๋๋ค. 9000ํํ ๋ฐ์ดํธ์ ๊ท๋ฒ์ ์ํ ํ๋ ๋๋ผ์ด๋ธ๋ฅผ ๊ตฌ์ ํฉ์๋ค.
๋ชจ๋ ๋ก๊ทธ๋ ์ด๋ฒคํธ ์คํธ๋ฆผ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด๊ฐ ๋ก๊ทธ ์ฒ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํด์๋ ์ ๋ฉ๋๋ค. ๋ก๊ทธ๋ stdout์ผ๋ก ๋ฐํ๋๊ฑฐ๋ udp์ ๊ฐ์ ํ๋กํ ์ฝ์ ํตํด ์ ์ก๋์ด์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ก๊ทธ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์์ต๋๋ค. Graylog๋ ์ด๋ฅผ ์ํด ์ ์๋ํฉ๋๋ค. udp๋ฅผ ํตํด ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์๋ฝํ๋ Graylog(์ด ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ํจํท์ ์ฑ๊ณต์ ์ธ ์์ ์ ๋ํ ์๋ต์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์)๋ ์ด๋ ํ ๋ฐฉ์์ผ๋ก๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐฉํดํ์ง ์์ผ๋ฉฐ ๋ก๊ทธ ๊ตฌ์กฐํ ๋ฐ ์ฒ๋ฆฌ์๋ง ๊ด์ฌํฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ๋ ผ๋ฆฌ๋ ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์๊ณผ ํจ๊ป ์๋ํ๋๋ก ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
12. ๊ด๋ฆฌ ์์
๋ฐ์ดํฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด api์์ ๋ณ๋๋ก ์์ฑ๋ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ด ์๋ํฌ์ธํธ๋ฅผ ์ฐ์์ผ๋ก 2๋ฒ ์คํํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ณต์ ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ ๋ฐ๋ณด๊ฐ ์๋๋ฉฐ ๋ ๋ฒ ํด๋ฆญํ์ง ์์ ๊ฒ์ด๋ฉฐ ๋ง์ด๊ทธ๋ ์ด์ ์ด ํ์ํ์ง ์์ต๋๋ค.
๋ชจ๋ ๊ด๋ฆฌ ์์ ์ ๋ฆด๋ฆฌ์ค ์์ค์์ ๋ชจ๋ ์ฝ๋์ ๋์ผํ ํ๊ฒฝ์์ ์ํ๋์ด์ผ ํฉ๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ์ผ์ข ์ ์๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ํตํด ์ด ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ณ ์ ์ด๋ฆ์ ์ถ๊ฐํ์ฌ ์๋์ผ๋ก ์ํํ์ง ์์ต๋๋ค. ์ด๋ฅผ ์ํด ๋ณ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ชจ๋ ํ๊ฒฝ์์ ๋์ผํ ๊ณตํต์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ๊ฒฐ๊ณผ๋ก ์ํ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ก ํ๋ก์ ํธ๋ฅผ ์ฑ์ฐ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ ์์ ์ โโ๊ฒฝ์ฐ ์ ์ฌํ ๋ฐฉ๋ฒ๋ก ์ ์ ์ฉํด์ผ ํฉ๋๋ค.
PHP, Laravel, Laradock, Docker-Compose์ ๊ตฌํ ์
PS ๋ชจ๋ ์์ ๋ MacOS์์ ๋ง๋ค์ด์ก์ต๋๋ค. ๋๋ถ๋ถ์ Linux์์๋ ์๋ํฉ๋๋ค. ์ฃ์กํฉ๋๋ค, Windows ์ฌ์ฉ์ ์ฌ๋ฌ๋ถ, ์ ๋ ์ค๋ซ๋์ Windows๋ฅผ ์ฌ์ฉํ์ง ์์์ต๋๋ค.
PC์ ์ด๋ค ๋ฒ์ ์ PHP๋ ์ค์น๋์ด ์์ง ์๊ณ ์๋ฌด ๊ฒ๋ ์ค์น๋์ด ์์ง ์์ ์ํฉ์ ์์ํด ๋ณด์ญ์์ค.
์ต์ ๋ฒ์ ์ docker ๋ฐ docker-compose๋ฅผ ์ค์นํฉ๋๋ค. (์ด๊ฒ์ ์จ๋ผ์ธ์์ ์ฐพ์ ์ ์์ต๋๋ค)
docker -v &&
docker-compose -v
1. ๋ฃ์ด
git clone https://github.com/Laradock/laradock.git &&
ls
Laradock์ ๊ดํด์๋ ๋ง์ ์ปจํ
์ด๋์ ๋ณด์กฐ ํญ๋ชฉ์ด ์์ง๋๋ ๋งค์ฐ ๋ฉ์ง ์ผ์ด๋ผ๊ณ ๋งํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์์ฐ์ ์์ ํ์ง ์๊ณ Laradock์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด ์ค๋ณต์ฑ ๋๋ฌธ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. Laradock์ ์์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฑฐ๊ธฐ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋์์ ํ์๋ก ํ๋ ์ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์ ์ต์ ํ๊ฐ ์์ ๊ฒ์
๋๋ค.
2. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํ๋๋ก Laradock์ ๊ตฌ์ฑํฉ๋๋ค.
cd laradock &&
cp env-example .env
2.1. ํธ์ง๊ธฐ์์ habr ๋๋ ํ ๋ฆฌ(laradock์ด ๋ณต์ ๋ ์์ ํด๋)๋ฅผ ์ฝ๋๋ค. (๋ด PHPStorm์ ๊ฒฝ์ฐ)
์ด ๋จ๊ณ์์๋ ํ๋ก์ ํธ ์ด๋ฆ๋ง ์ ๋ ฅํฉ๋๋ค.
2.2. ์์
๊ณต๊ฐ ์ด๋ฏธ์ง๋ฅผ ์์ํฉ๋๋ค. (๊ทํ์ ๊ฒฝ์ฐ ์ด๋ฏธ์ง๊ฐ ํ๋์ ๋น๋๋ฉ๋๋ค)
Workspace๋ ๊ฐ๋ฐ์๋ฅผ ๋์ ํ์ฌ ํ๋ ์์ํฌ ์์
์ ์ํด ํน๋ณํ ์ค๋น๋ ์ด๋ฏธ์ง์
๋๋ค.
์ ํจ๊ป ์ปจํ ์ด๋ ๋ด๋ถ๋ก ์ด๋
docker-compose up -d workspace &&
docker-compose exec workspace bash
2.3. ๋ผ๋ผ๋ฒจ ์ค์นํ๊ธฐ
composer create-project --prefer-dist laravel/laravel application
2.4. ์ค์น ํ ํ๋ก์ ํธ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋์๋์ง ํ์ธํ๊ณ Compose๋ฅผ ์ข
๋ฃํฉ๋๋ค.
ls
exit
docker-compose down
2.5. PHPStorm์ผ๋ก ๋์๊ฐ์ .env ํ์ผ์์ laravel ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ฅผ ์ค์ ํฉ๋๋ค.
3. ๋ชจ๋ ์ฝ๋๋ฅผ Git์ ์ถ๊ฐํฉ๋๋ค.
์ด๋ฅผ ์ํด Github(๋๋ ๋ค๋ฅธ ๊ณณ)์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ํฐ๋ฏธ๋์ habr ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ๋ค์ ์ฝ๋๋ฅผ ์คํํด ๋ด ์๋ค.
echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:nzulfigarov/habr-12factor.git # ะทะดะตัั ะฑัะดะตั ัััะปะบะฐ ะฝะฐ ะฒะฐั ัะตะฟะพ
git push -u origin master
git status
๋ชจ๋ ๊ฒ์ด ์ ์์ธ์ง ํ์ธํฉ๋๋ค.
ํธ์์ Git์ฉ ์๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
4. ๋ฐ์ฌ!
์์ํ๊ธฐ ์ ์ ํฌํธ 80 ๋ฐ 443์ ์๋ฌด๊ฒ๋ ๊ฑธ๋ ค ์์ง ์์์ง ํ์ธํ์ญ์์ค.
docker-compose up -d nginx php-fpm
๋ฐ๋ผ์ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ 3๊ฐ์ ๊ฐ๋ณ ์๋น์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- nginx - ์น ์๋ฒ
- php-fpm - ์น ์๋ฒ์์ ์์ฒญ์ ์์ ํ๊ธฐ ์ํ php
- ์์ ๊ณต๊ฐ - ๊ฐ๋ฐ์๋ฅผ ์ํ PHP
ํ์ฌ ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ ํญ๋ชฉ ์ค 12๊ฐ ํญ๋ชฉ์ ํด๋นํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์์ต๋๋ค.
1. ์ฝ๋๋ฒ ์ด์ค - ๋ชจ๋ ์ฝ๋๋ ํ๋์ ์ ์ฅ์์ ์์ต๋๋ค.
2. ์ข ์์ฑ - ์ฐ๋ฆฌ์ ๋ชจ๋ ์ข ์์ฑ์ application/composer.json๊ณผ ๊ฐ ์ปจํ ์ด๋์ ๊ฐ Dockerfile์ ๋ช ์์ ์ผ๋ก ์์ฑ๋ฉ๋๋ค.
3. ํ์ฌ ์๋น์ค(์ง์ ์๋น์ค) - ๊ฐ๊ฐ์ ์๋น์ค(php-fom, nignx, workspace)๋ ์์ ์ ์๋ช ์ ์ ์งํ๋ฉฐ ์ธ๋ถ์์ ์ฐ๊ฒฐ๋์ด ํ๋์ ์๋น์ค๋ก ์์ ํด๋ ๋ค๋ฅธ ์๋น์ค์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
4. ํ๋ก์ธ์ค ๊ฐ ์๋น์ค๋ ํ๋์ ํ๋ก์ธ์ค์ ๋๋ค. ๊ฐ ์๋น์ค๋ ๋ด๋ถ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค.
5. ํฌํธ ๋ฐ์ธ๋ฉ
docker ps
๋ณด์๋ค์ํผ ๊ฐ ์๋น์ค๋ ์์ฒด ํฌํธ์์ ์คํ๋๋ฉฐ ๋ค๋ฅธ ๋ชจ๋ ์๋น์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
6. ๋ณํ
Docker๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํด ๋์ผํ ์๋น์ค์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ปจํ ์ด๋๋ฅผ ์ค์งํ๊ณ ํ๋๊ทธ๋ก ์์ --๊ท๋ชจ
docker-compose down &&
docker-compose up -d --scale php-fpm=3 nginx php-fpm
๋ณด์๋ค์ํผ php-fpm ์ปจํ
์ด๋์๋ ๋ณต์ฌ๋ณธ์ด ์์ต๋๋ค. ์ด ์ปจํ
์ด๋๋ก ์์
ํ ๋ ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ๋ํ ํฌํธ 9000์์ ๊ณ์ ์ก์ธ์คํ๊ณ Docker๋ ์ฐ๋ฆฌ๋ฅผ ์ํด ์ปจํ
์ด๋ ๊ฐ์ ๋ก๋๋ฅผ ์กฐ์ ํฉ๋๋ค.
7. ์ผํ์ฉ - ๊ฐ ์ปจํ ์ด๋๋ ๋ค๋ฅธ ์ปจํ ์ด๋์ ํด๋ฅผ ๋ผ์น์ง ์๊ณ ์ฃฝ์ผ ์ ์์ต๋๋ค. ์ปจํ ์ด๋๋ฅผ ์ค์งํ๊ฑฐ๋ ๋ค์ ์์ํด๋ ํ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ฐ ์ปจํ ์ด๋๋ ์ธ์ ๋ ์ง ๋ค์ด ์ฌ๋ฆด ์ ์์ต๋๋ค.
8. ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ/์ด์ ํจ๋ฆฌํฐ ์ฐ๋ฆฌ์ ๋ชจ๋ ํ๊ฒฝ์ ๋์ผํฉ๋๋ค. ํ๋ก๋์ ์ ์๋ฒ์์ ์์คํ ์ ์คํํ๋ฉด ๋ช ๋ น์์ ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋์ผํ ๋ฐฉ์์ผ๋ก Docker๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
9. ๋ฒ์ฑ ๋ฐ์ถ - ์ด๋ฌํ ์ปจํ ์ด๋์ ๋ชจ๋ ๋ก๊ทธ๋ ์คํธ๋ฆผ์ผ๋ก ์ด๋ํ๊ณ Docker ์ฝ์์์ ๋ณผ ์ ์์ต๋๋ค. (์ด ๊ฒฝ์ฐ ์ฌ์ค ๋ค๋ฅธ ์ง์์ ๋ง๋ ์ฉ๊ธฐ๋ก ๊ด๋ฆฌ๋ฅผ ์ํ๋ฉด ์๋ ์๋ ์์ต๋๋ค)
docker-compose logs -f
๋ค๋ง, PHP๋ Nginx์ Default ๊ฐ๋ ํ์ผ์ ๋ก๊ทธ๋ฅผ ์ด๋ค๋ ์ ์์ ํจ์ ์ด ์๋ค. 12๊ฐ์ง ์์๋ฅผ ์ถฉ์กฑํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค. ๋นํ์ฑํํ๋ค ๊ฐ ์ปจํ
์ด๋์ ๊ตฌ์ฑ์์ ๊ฐ๋ณ์ ์ผ๋ก ํ์ผ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
Docker๋ stdout๋ฟ๋ง ์๋๋ผ ์์์ ์ธ๊ธํ graylog์ ๊ฐ์ ํญ๋ชฉ์๋ ๋ก๊ทธ๋ฅผ ๋ณด๋ผ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ graylog ๋ด์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ๋ก๊ทธ๋ก ์์ ํ ์ ์์ผ๋ฉฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ด๋ค ์์ผ๋ก๋ ์ด๋ฅผ ์ธ์ํ์ง ๋ชปํฉ๋๋ค.
10. ๊ด๋ฆฌ ์์ - ๋ชจ๋ ๊ด๋ฆฌ ์์ ์ 12๊ฐ ์์ธ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ์์๊ฐ ์ํ๋ ๋๋ก ์ ํํ๊ฒ ์๋ จ๊ณต ๋๊ตฌ ๋๋ถ์ laravel์ ์ํด ํด๊ฒฐ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ผ๋ถ ๋ช
๋ น์ด ์คํ๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ปจํ
์ด๋์ ๋ค์ด๊ฐ๋๋ค.
docker-compose exec workspace bash
php artisan list
์ด์ ๋ชจ๋ ๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. (๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์บ์๋ฅผ ์ค์ ํ์ง ์์์ผ๋ฏ๋ก ๋ช
๋ น์ ์ ๋ฐ์ ์บ์ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ๊ป ์๋ํ๋๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋์ง ์์ต๋๋ค.)
11. ๊ตฌ์ฑ ๊ทธ๋ฆฌ๊ณ 12. ๋น๋, ๋ฆด๋ฆฌ์ค, ์คํ
๋๋ ์ด ๋ถ๋ถ์ Blue-Green Deployment์ ํ ์ ํ๊ณ ์ถ์์ง๋ง, ์ด ๊ธฐ์ฌ์์ ๋ค๋ฃจ๊ธฐ์๋ ๋๋ฌด ์์ธํ ๋ด์ฉ์ด์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๋ํด ๋ณ๋์ ๊ธฐ์ฌ๋ฅผ ์ธ ๊ฒ์ ๋๋ค.
์์ปจ๋ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ CI/CD ์์คํ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ ํจ์ค ะธ ๊น๋ฉ CI. ๋ ๋ค ํน์ ํ๊ฒฝ๊ณผ ๊ด๋ จ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ์๋๋ฆฌ์ค์์ ํญ๋ชฉ c ๊ตฌ์ฑ.
๊ทธ๋ฆฌ๊ณ ์ ๋ํ ํฌ์ธํธ ๋น๋, ๋ฆด๋ฆฌ์ค, ์คํ ๋ผ๋ ๋ ์ ํธ๋ฆฌํฐ์ ๋ด์ฅ ํจ์๋ก ํด๊ฒฐ ๊ด๋ก.
๊ด๋ก ์ด์ ๋ธ๋ฆฌ, ๋ฆด๋ฆฌ์ค ๋ฐ ์คํ ๋จ๊ณ๋ฅผ ๊ฐ์กฐ ํ์ํ์ฌ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋ ์ ์์ต๋๋ค. ๋ํ Pipeline์์๋ ๋ฐฑ์ ์ ๋น๋กฏํ ๋ฌด์์ด๋ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๋๊ตฌ๋ ๋ฌดํํ ์ ์ฌ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๊ฐ ์ผ์ ธ ์์ต๋๋ค.
์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ ๋ ํ์ ๋ชจ๋์ ์ด๊ธฐํํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.
์ถ์ : ์ด๋ฌํ ๋ชจ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ค๋ฅธ ์ ํธ๋ฆฌํฐ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ณธ์ง์ด ๋ค๋ฅด์ง ์๋ค๋ ๊ฒ์
๋๋ค.
์ถ์ฒ : habr.com