2023๋…„ 3์›” 22์ผยท3๋ถ„ ์ฝ๊ธฐ

Docker Compose ์†Œ๊ฐœ

Docker Compose์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ์†Œ๊ฐœ๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ตœ์ ํ™”ํ•˜์„ธ์š”.

Docker Compose ์†Œ๊ฐœ

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

์ด ํฌ๊ด„์ ์ธ ๊ฐ€์ด๋“œ๋Š” Docker Compose ์— ๋Œ€ํ•œ ์‹ฌ์ธต์ ์ธ ์ดํ•ด, ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ๊ณผ์˜ ๊ด€๋ จ์„ฑ, ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์ด์ ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Docker Compose ์—์ฝ”์‹œ์Šคํ…œ์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ์ž ์žฌ๋ ฅ์„ ํ™œ์šฉํ•˜๊ณ  ์ง€์†์ ์œผ๋กœ ํ™•์žฅ๋˜๋Š” Docker ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด Docker Compose ํƒ์ƒ‰์—์„œ๋Š” ๋‹ค์Œ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ : ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š”์™€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • Docker Compose : ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋งฅ๋ฝ์—์„œ Docker Compose, ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ ์ด์ ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • Compose ํŒŒ์ผ ๋ฐ ์„œ๋น„์Šค : Compose ํŒŒ์ผ์˜ ๊ตฌ์กฐ, ์„œ๋น„์Šค์˜ ์—ญํ•  ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ ์š”์†Œ ์ •์˜์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํ‚น ๋ฐ ๋ณผ๋ฅจ : Docker Compose ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํ‚น ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ์˜ต์…˜๊ณผ ์ด๋Ÿฌํ•œ ์˜ต์…˜์ด ์ปจํ…Œ์ด๋„ˆ์™€ ๋ฐ์ดํ„ฐ ์ง€์†์„ฑ ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์„ ์ด‰์ง„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ† ๋ก ์ž…๋‹ˆ๋‹ค.
  • ํ™•์žฅ ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ : Docker Compose ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™•์žฅ ๋ฐ ํšจ์œจ์ ์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜์š”๋ฅผ ์ˆ˜์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์กฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์›Œํฌํ”Œ๋กœ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€ : Docker Compose ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ์›Œํฌํ”Œ๋กœ์™€ ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ถŒ์žฅ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

Docker Compose ์˜ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•˜๋Š” ๋ฐ ์ฐธ์—ฌํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ธฐ์ˆ ์„ ํ–ฅ์ƒํ•˜์—ฌ ๋ณด๋‹ค ๋Šฅ๋ฅ ์ ์ด๊ณ  ํšจ์œจ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•œ ๋‹จ๊ณ„๋ฅผ ์„ค์ •ํ•  ์ค€๋น„๋ฅผ ํ•˜์‹ญ์‹œ์˜ค.

๊ฐœ์š” Docker Compose

Docker Compose ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜, ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๋ณต์žกํ•˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ Docker Compose ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋ณธ ์ธํ”„๋ผ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์žฅ๋œ ์ฃผ์š” ๊ธฐ๋Šฅ

  • Compose File : Docker Compose ์ผ๋ฐ˜์ ์œผ๋กœ docker-compose.yml ์ด๋ผ๋Š” YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณผ๋ฅจ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ์ฒญ์‚ฌ์ง„ ์—ญํ• ์„ ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์˜ ๊ด€๋ฆฌ, ์žฌ์ƒ์‚ฐ ๋ฐ ๊ณต์œ ๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค : Docker Compose ์—์„œ ์„œ๋น„์Šค๋Š” ํŠน์ • Docker ์ด๋ฏธ์ง€์—์„œ ์ƒ์„ฑ๋œ ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋Š” ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ฐ˜์ด๋ฉฐ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํ‚น : Docker Compose ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋งž์ถคํ˜• ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„์˜ ์›ํ™œํ•œ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Compose๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋‹จ์ผ ๋„คํŠธ์›Œํฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€๋งŒ ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์˜ํ•˜์—ฌ ํŠน์ • ์„œ๋น„์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ํ† ํด๋กœ์ง€๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณผ๋ฅจ : Docker ComposeDocker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ณผ๋ฅจ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ : Docker Compose ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ฆ๊ฐ€๋œ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” scale ์†์„ฑ ๋˜๋Š” --scale ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋Œ€์ฒด : Docker Compose ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋Œ€์ฒด๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ Compose ํŒŒ์ผ์„ ๊ฐœ๋ฐœ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ๋˜๋Š” ๋‹จ๊ณ„์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋ฐฐํฌ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์—ฐ์„ฑ๊ณผ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€

Docker Compose ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

  • ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ : ๊ฐœ๋ฐœ์ž๋Š” Docker Compose ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๋ณต์ œ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋‹จ๊ณ„์—์„œ ์ผ๊ด€๋œ ๋™์ž‘์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์†์ ์ธ ํ†ตํ•ฉ ๋ฐ ์ง€์†์ ์ธ ๋ฐฐํฌ( CI/CD ): Docker ComposeCI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋˜์–ด ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌํ•˜์—ฌ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ : Docker Compose ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค ๊ฐ„์˜ ํšจ์œจ์ ์ธ ํ†ต์‹  ๋ฐ ํ˜‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

Docker Compose ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ YAML ํŒŒ์ผ์„ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์ •์˜, ๊ตฌ์„ฑ ๋ฐ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํšจ์œจ์ ์ธ ํ™•์žฅ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

YAML ๊ตฌ์„ฑ ์„ค๋ช…

" YAML Ai't Markup Language"์˜ ์ค„์ž„๋ง์ธ YAML ๋‹จ์ˆœ์„ฑ๊ณผ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅธ ์–ธ์–ด ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜, XML ๋˜๋Š” JSON ๊ณผ ๊ฐ™์€ ํ˜•์‹์— ๋Œ€ํ•œ ๋ณด๋‹ค ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์—…๊ณ„์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. YAML ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ตœ์†Œ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ์ ์œผ๋กœ ๋งค๋ ฅ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ ์š”์†Œ ๊ฐ„์˜ ๊ณ„์ธต์  ๊ด€๊ณ„๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ๊ตฌ์กฐํ™”๋œ YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •, API ํ‚ค ๋ฐ ์บ์‹ฑ ๊ธฐ๋ณธ ์„ค์ •์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ต์ปค, ๋ณ„์นญ ๋ฐ ์‚ฌ์šฉ์ž ์ง€์ • ํƒœ๊ทธ์™€ ๊ฐ™์€ YAML์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” ์ค‘๋ณต์„ฑ์„ ์ค„์ด๊ณ  ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. YAML ์˜ ๊ด‘๋ฒ”์œ„ํ•œ ์ฑ„ํƒ์€ ๋ณต์žกํ•œ ๊ตฌ์„ฑ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํŒ€ ๊ตฌ์„ฑ์›๊ณผ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋Šฅ๋ฅ ํ™”ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ทธ ํšจ์œจ์„ฑ์„ ์ž…์ฆํ•ฉ๋‹ˆ๋‹ค.

Docker Compose - ์„ค์น˜

๋ชจ๋ฐ”์ผ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ
ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ƒ์„ฑ๋œ Kotlin๊ณผ SwiftUI๋กœ ๋„ค์ดํ‹ฐ๋ธŒ iOS ๋ฐ Android ์•ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋ฐ”์ผ ์•ฑ ๋งŒ๋“ค๊ธฐ

Docker Compose ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ด€๋ฆฌ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์˜์—ญ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Docker Compose ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” ๋‹จ์ผ YAML ํŒŒ์ผ ๋‚ด์—์„œ ์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณผ๋ฅจ์„ ํฌํ•จํ•˜๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ„์†Œํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ๋ฐ ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„ ์ „์ฒด์—์„œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ผ๊ด€๋˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker Compose ์„ค์น˜ํ•˜๋ ค๋ฉด ๋จผ์ € Docker ๊ฐ€ ์‹œ์Šคํ…œ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋˜๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Docker Compose ์„ค์น˜ ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Linux์—์„œ๋Š” curl ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ GitHub ์—์„œ ์ตœ์‹  Compose ๋ฆด๋ฆฌ์Šค๋ฅผ ์–ป๊ณ , ์‹คํ–‰ ๊ถŒํ•œ์„ ์‹ ์ฒญํ•˜๊ณ , ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹œ์Šคํ…œ์˜ PATH ๋‚ด ์œ„์น˜๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ Docker Compose macOS ๋ฐ Windows์šฉ Docker Desktop ๊ณผ ํ•จ๊ป˜ ์‚ฌ์ „ ํŒจํ‚ค์ง•๋˜์–ด ์„ค์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

Docker Compose์˜ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ์‹ค์ œ ์‚ฌ๋ก€๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ ์„œ๋น„์Šค, ๋ฐฑ์—”๋“œ API ์„œ๋น„์Šค ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Docker Compose ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜ํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์ง๊ด€์ ์ด๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ YAML ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ์ œ๊ณต์„ ๊ฐ€์†ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ Docker-Compose ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

์ฒซ ๋ฒˆ์งธ Docker-Compose ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ด€๋ฆฌ๋ฅผ ํ•ฉ๋ฆฌํ™”ํ•˜๊ณ  ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. Docker-Compose๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹จ์ผ ๋‹จ์œ„๋กœ ์ •์˜, ๊ตฌ์„ฑ ๋ฐ ์‹คํ–‰ํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋กœ์ปฌ ๋จธ์‹ ์— Docker ๋ฐ Docker-Compose๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— " docker-compose.yml "์ด๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ YAML ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณผ๋ฅจ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ํ”„๋ŸฐํŠธ์—”๋“œ, Node.js๋กœ ๊ฐœ๋ฐœ๋œ ๋ฐฑ์—”๋“œ API ๋ฐ MongoDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ตฌ์„ฑ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. docker-compose.yml ํŒŒ์ผ์—์„œ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ์„ธ ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋ฐ ๋ณผ๋ฅจ์„ ํ†ตํ•œ ์˜๊ตฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Docker-Compose ํŒŒ์ผ์ด ์ค€๋น„๋˜๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ " docker-compose up "์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ React ํ”„๋ŸฐํŠธ์—”๋“œ, Node.js ๋ฐฑ์—”๋“œ ๋ฐ MongoDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ตฌ์„ฑ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ ๊ฐ„๋‹จํ•œ docker-compose.yml ํŒŒ์ผ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์ด ์˜ˆ์—์„œ ์„œ๋น„์Šค ์„น์…˜์€ ํ”„๋ŸฐํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ ๋ฐ db์˜ ์„ธ ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค์—๋Š” ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ํฌํŠธ, ์ข…์†์„ฑ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ๋„คํŠธ์›Œํฌ์™€ ๊ฐ™์€ ๊ณ ์œ ํ•œ ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

frontend ์„œ๋น„์Šค๋Š” ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ./frontend to build_backend_ ์„œ๋น„์Šค์— ์ข…์†๋ฉ๋‹ˆ๋‹ค. backend ์„œ๋น„์Šค๋Š” ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ./backend ์‚ฌ์šฉํ•˜์—ฌ Node.js ์•ฑ์„ ๋นŒ๋“œํ•˜๋ฉฐ db ์„œ๋น„์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. DATABASE_URL ๊ณผ ๊ฐ™์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๊ตฌ์„ฑ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

db ์„œ๋น„์Šค๋Š” Docker Hub์˜ ๊ณต์‹ MongoDB ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ง€์†์„ฑ์„ ์œ„ํ•ด myapp-data ๋ผ๋Š” ๋ณผ๋ฅจ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•˜๋‹จ์˜ networks ๋ฐ volumes ์„น์…˜์€ ๋ธŒ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„์™€ myapp-data ๋ผ๋Š” ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ myapp-network ๋ผ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์†Œ๋Š” ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
Docker Compose ์†Œ๊ฐœ | AppMaster