php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

์•ฝ๊ฐ„์˜ ์ด๋ก ์œผ๋กœ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค. ๋ฌด์Šจ ์ผ์ด์•ผ ์—ด๋‘ ์š”์†Œ ์•ฑ?

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ด ๋ฌธ์„œ๋Š” SaaS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž์™€ DevOps ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ตœ์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์™€ ์‚ฌ๋ก€๋ฅผ ์ธ์‹ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ๋Š” Heroku ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์€ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜๊ณ  ํƒ€์‚ฌ ์ง€์› ์„œ๋น„์Šค(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ฉ”์‹œ์ง€ ํ, ์บ์‹œ ๋“ฑ)์˜ ๋ชจ๋“  ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•๋ก ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์š”์†Œ ์ž์ฒด์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ๋ฒ ์ด์Šค โ€“ ํ•˜๋‚˜์˜ ์†Œ์Šค ์ถ”์  ์ฝ”๋“œ๋ฒ ์ด์Šค โ€“ ๋‹ค์ค‘ ๋ฐฐํฌ
  2. ์ข…์†์„ฑ โ€“ ์ข…์†์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜๊ณ  ๋ถ„๋ฆฌ
  3. ๊ตฌ์„ฑ โ€“ ๋Ÿฐํƒ€์ž„ ์‹œ ๊ตฌ์„ฑ ์ €์žฅ
  4. ํƒ€์‚ฌ ์„œ๋น„์Šค(์ง€์› ์„œ๋น„์Šค) โ€“ ์ง€์› ์„œ๋น„์Šค๋ฅผ ํ”Œ๋Ÿฌ๊ทธํ˜• ๋ฆฌ์†Œ์Šค๋กœ ์ทจ๊ธ‰
  5. ๋นŒ๋“œ, ๋ฆด๋ฆฌ์Šค, ์‹คํ–‰ โ€“ ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ๋‹จ๊ณ„
  6. ํ”„๋กœ์„ธ์Šค - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ƒํƒœ ๋น„์ €์žฅ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰
  7. ํฌํŠธ ๋ฐ”์ธ๋”ฉ โ€“ ํฌํŠธ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ ์„œ๋น„์Šค
  8. ๋ณ‘ํ–‰ โ€“ ํ”„๋กœ์„ธ์Šค๋กœ ์•ฑ ํ™•์žฅ
  9. ์ผํšŒ์šฉ โ€“ ๋น ๋ฅธ ์‹œ์ž‘ ๋ฐ ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋กœ ์•ˆ์ •์„ฑ ๊ทน๋Œ€ํ™”
  10. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ/์šด์˜ ํŒจ๋ฆฌํ‹ฐ โ€“ ๊ฐœ๋ฐœ, ์Šคํ…Œ์ด์ง• ๋ฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ฒŒ ์œ ์ง€
  11. ๋ฒŒ์ฑ„ ๋ฐ˜์ถœ - ๋กœ๊ทธ๋ฅผ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌ
  12. ๊ด€๋ฆฌ ์ž‘์—… โ€“ ์ผํšŒ์„ฑ ํ”„๋กœ์„ธ์Šค๋กœ ๊ด€๋ฆฌ/๊ด€๋ฆฌ ์—…๋ฌด ์ˆ˜ํ–‰

12๊ฐ€์ง€ ์š”์†Œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Blue-Green ๋ฐฐํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์‚ฐ ์ตœ์ข… ๊ณ ๊ฐ์ด ์ž์‹ ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด์ง€ ๋ชปํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ. ์ฆ‰, XNUMX์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ์ค‘๋‹จ ์‹œ๊ฐ„.

ํด๋ž˜์‹ BG Deploy ์ฒด๊ณ„๋Š” ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

  • ์ฒ˜์Œ์—๋Š” ์ฝ”๋“œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •ํ™•ํžˆ ๋™์ผํ•œ 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

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

1. ๋„ฃ์–ด ๋ผ๋ผ๋…

git clone https://github.com/Laradock/laradock.git && 
ls

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

Laradock์— ๊ด€ํ•ด์„œ๋Š” ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ณด์กฐ ํ•ญ๋ชฉ์ด ์ˆ˜์ง‘๋˜๋Š” ๋งค์šฐ ๋ฉ‹์ง„ ์ผ์ด๋ผ๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ์‚ฐ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  Laradock์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ค‘๋ณต์„ฑ ๋•Œ๋ฌธ์— ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Laradock์˜ ์˜ˆ์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋™์‹œ์— ํ•„์š”๋กœ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์ตœ์ ํ™”๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž‘๋™ํ•˜๋„๋ก Laradock์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

cd laradock && 
cp env-example .env

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

2.1. ํŽธ์ง‘๊ธฐ์—์„œ habr ๋””๋ ‰ํ† ๋ฆฌ(laradock์ด ๋ณต์ œ๋œ ์ƒ์œ„ ํด๋”)๋ฅผ ์—ฝ๋‹ˆ๋‹ค. (๋‚ด PHPStorm์˜ ๊ฒฝ์šฐ)

์ด ๋‹จ๊ณ„์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๋งŒ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

2.2. ์ž‘์—… ๊ณต๊ฐ„ ์ด๋ฏธ์ง€๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. (๊ท€ํ•˜์˜ ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๊ฐ€ ํ•œ๋™์•ˆ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค)
Workspace๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ ์ž‘์—…์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ค€๋น„๋œ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

์™€ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ์ด๋™

docker-compose up -d workspace && 
docker-compose exec workspace bash

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

2.3. ๋ผ๋ผ๋ฒจ ์„ค์น˜ํ•˜๊ธฐ

composer create-project --prefer-dist laravel/laravel application

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

2.4. ์„ค์น˜ ํ›„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  Compose๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ls
exit
docker-compose down

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

2.5. PHPStorm์œผ๋กœ ๋Œ์•„๊ฐ€์„œ .env ํŒŒ์ผ์—์„œ laravel ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

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

๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

ํŽธ์˜์ƒ Git์šฉ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. GitKraken. (์ถ”์ฒœ ๋งํฌ๋Š” ์—ฌ๊ธฐ)

4. ๋ฐœ์‚ฌ!

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํฌํŠธ 80 ๋ฐ 443์— ์•„๋ฌด๊ฒƒ๋„ ๊ฑธ๋ ค ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

docker-compose up -d nginx php-fpm

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” 3๊ฐœ์˜ ๊ฐœ๋ณ„ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • nginx - ์›น ์„œ๋ฒ„
  • php-fpm - ์›น ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ php
  • ์ž‘์—… ๊ณต๊ฐ„ - ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ PHP

ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐœ ํ•ญ๋ชฉ ์ค‘ 12๊ฐœ ํ•ญ๋ชฉ์— ํ•ด๋‹นํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

1. ์ฝ”๋“œ๋ฒ ์ด์Šค - ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์ข…์†์„ฑ - ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ์ข…์†์„ฑ์€ application/composer.json๊ณผ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐ Dockerfile์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

3. ํƒ€์‚ฌ ์„œ๋น„์Šค(์ง€์› ์„œ๋น„์Šค) - ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค(php-fom, nignx, workspace)๋Š” ์ž์‹ ์˜ ์ƒ๋ช…์„ ์œ ์ง€ํ•˜๋ฉฐ ์™ธ๋ถ€์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ž‘์—…ํ•ด๋„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4. ํ”„๋กœ์„ธ์Šค ๊ฐ ์„œ๋น„์Šค๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

5. ํฌํŠธ ๋ฐ”์ธ๋”ฉ

docker ps

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

๋ณด์‹œ๋‹ค์‹œํ”ผ ๊ฐ ์„œ๋น„์Šค๋Š” ์ž์ฒด ํฌํŠธ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ๋‹ค๋ฅธ ๋ชจ๋“  ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ๋ณ‘ํ–‰

Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ๋™์ผํ•œ ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๋กœ ์‹œ์ž‘ --๊ทœ๋ชจ

docker-compose down && 
docker-compose up -d --scale php-fpm=3 nginx php-fpm

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

๋ณด์‹œ๋‹ค์‹œํ”ผ php-fpm ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๋ณต์‚ฌ๋ณธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์ž‘์—…ํ•  ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํฌํŠธ 9000์—์„œ ๊ณ„์† ์•ก์„ธ์Šคํ•˜๊ณ  Docker๋Š” ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋กœ๋“œ๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

7. ์ผํšŒ์šฉ - ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ํ•ด๋ฅผ ๋ผ์น˜์ง€ ์•Š๊ณ  ์ฃฝ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ํ›„์† ์‹œ์ž‘ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘๋™์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ์–ธ์ œ๋“ ์ง€ ๋“ค์–ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ/์šด์˜ ํŒจ๋ฆฌํ‹ฐ ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ํ™˜๊ฒฝ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์˜ ์„œ๋ฒ„์—์„œ ์‹œ์Šคํ…œ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ช…๋ น์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ Docker๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

9. ๋ฒŒ์ฑ„ ๋ฐ˜์ถœ - ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ๋กœ๊ทธ๋Š” ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ด๋™ํ•˜๊ณ  Docker ์ฝ˜์†”์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ ์‚ฌ์‹ค ๋‹ค๋ฅธ ์ง‘์—์„œ ๋งŒ๋“  ์šฉ๊ธฐ๋กœ ๊ด€๋ฆฌ๋ฅผ ์•ˆํ•˜๋ฉด ์•ˆ๋ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค)

 docker-compose logs -f

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

๋‹ค๋งŒ, PHP๋‚˜ Nginx์˜ Default ๊ฐ’๋„ ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์“ด๋‹ค๋Š” ์ ์—์„œ ํ•จ์ •์ด ์žˆ๋‹ค. 12๊ฐ€์ง€ ์š”์†Œ๋ฅผ ์ถฉ์กฑํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”ํ•˜๋‹ค ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ตฌ์„ฑ์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

Docker๋Š” stdout๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ graylog์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์—๋„ ๋กœ๊ทธ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  graylog ๋‚ด์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ด๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

10. ๊ด€๋ฆฌ ์ž‘์—… - ๋ชจ๋“  ๊ด€๋ฆฌ ์ž‘์—…์€ 12๊ฐœ ์š”์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์ž‘์ž๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ˆ™๋ จ๊ณต ๋„๊ตฌ ๋•๋ถ„์— laravel์— ์˜ํ•ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ถ€ ๋ช…๋ น์ด ์‹คํ–‰๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

 
docker-compose exec workspace bash
php artisan list

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

์ด์ œ ๋ชจ๋“  ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์บ์‹œ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋ช…๋ น์˜ ์ ˆ๋ฐ˜์€ ์บ์‹œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

php ๋ฐ docker ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•œ The Twelve-Factor App ๋ฐฉ๋ฒ•๋ก ์— ๊ธฐ๋ฐ˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ Blue-Green ๋ฐฐํฌ

11. ๊ตฌ์„ฑ ๊ทธ๋ฆฌ๊ณ  12. ๋นŒ๋“œ, ๋ฆด๋ฆฌ์Šค, ์‹คํ–‰

๋‚˜๋Š” ์ด ๋ถ€๋ถ„์„ Blue-Green Deployment์— ํ• ์• ํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ, ์ด ๊ธฐ์‚ฌ์—์„œ ๋‹ค๋ฃจ๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ž์„ธํ•œ ๋‚ด์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๊ธฐ์‚ฌ๋ฅผ ์“ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์š”์ปจ๋Œ€ ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ CI/CD ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์  ํ‚จ์Šค ะธ ๊นƒ๋žฉ CI. ๋‘˜ ๋‹ค ํŠน์ • ํ™˜๊ฒฝ๊ณผ ๊ด€๋ จ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ•ญ๋ชฉ c ๊ตฌ์„ฑ.

๊ทธ๋ฆฌ๊ณ  ์— ๋Œ€ํ•œ ํฌ์ธํŠธ ๋นŒ๋“œ, ๋ฆด๋ฆฌ์Šค, ์‹คํ–‰ ๋ผ๋Š” ๋‘ ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ๋‚ด์žฅ ํ•จ์ˆ˜๋กœ ํ•ด๊ฒฐ ๊ด€๋กœ.

๊ด€๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ, ๋ฆด๋ฆฌ์Šค ๋ฐ ์‹คํ–‰ ๋‹จ๊ณ„๋ฅผ ๊ฐ•์กฐ ํ‘œ์‹œํ•˜์—ฌ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Pipeline์—์„œ๋Š” ๋ฐฑ์—…์„ ๋น„๋กฏํ•œ ๋ฌด์—‡์ด๋“  ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๋ฌดํ•œํ•œ ์ž ์žฌ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์ผœ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊นƒํ—ˆ๋ธŒ.
์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•  ๋•Œ ํ•˜์œ„ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ถ”์‹ : ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค๋ฅธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ณธ์งˆ์ด ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€