Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋‚˜๋Š” Inventos "Docker + Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค"์—์„œ Alexander Sigachev์˜ ๋ณด๊ณ ์„œ ์‚ฌ๋ณธ์„ ์ฝ์„ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Docker + Gitlab CI๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ง‰ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ข…์ข… ๊ธฐ๋ณธ์ ์ธ ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ• ๊นŒ์š”? ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•? ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•?

์ด ๋ณด๊ณ ์„œ๋Š” Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ๊ตฌ์กฐํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์„ค๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ ์ž์ฒด๋Š” 2017๋…„์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ณด๊ณ ์„œ์—์„œ ๊ธฐ๋ณธ, ๋ฐฉ๋ฒ•๋ก , ์•„์ด๋””์–ด, ์‚ฌ์šฉ ๊ฒฝํ—˜์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์‹ ๊ฒฝ ์“ฐ๋‚˜์š”, ๊ณ ์–‘์ด ๋ฐ‘์—์„œ ์ฃผ์„ธ์š”.

์ œ ์ด๋ฆ„์€ Alexander Sigachev์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ธ๋ฒคํ† ์Šค์—์„œ ์ผํ•ฉ๋‹ˆ๋‹ค. Docker๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜๊ณผ ํšŒ์‚ฌ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐœํ‘œ ์ฃผ์ œ: Docker์™€ Gitlab CI๋ฅผ ์ด์šฉํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

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

์ด ๋ณด๊ณ ์„œ์—๋Š” ๋ฌด์—‡์ด ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ๊ฐˆํ€ด๋ฅผ ๋ชจ์•˜๋Š”์ง€, ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณณ์ด ์•„๋ฆ„๋‹ต์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๊ณ„์† ๋‚˜์•„๊ฐˆ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ชจํ† ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์†์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋„ํ‚นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์šฐ๋ฆฌ๋Š” ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํšŒ์‚ฌ์— ์—ฌ๋Ÿฌ ํŒ€์ด ์žˆ์„ ๋•Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ณต์œ  ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ๋น ์ ธ๋‚˜์™€ ์ž ์‹œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ๋งก๊ฒจ์ง€๋Š” ๋‹จ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋นจ๋ฆฌ ์ดํ•ดํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ํ™˜๊ฒฝ์„ ์‹œ์ž‘ํ•ด์•ผ ์ด ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ์ œ๋ฅผ ๋” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์— ๋ฌธ์„œ๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๊ณ ์ฐธ์—๊ฒŒ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ง์›๋“ค์€ ํ•˜๋ฃจ๋‚˜ ์ดํ‹€ ๋งŒ์— ์ง์žฅ์„ ์Šค์Šค๋กœ ๋งˆ๋ จํ•ฉ๋‹ˆ๋‹ค. ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด 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์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์ ํŠธ๋Š” ํŠน์„ฑ์ƒ ํŠน์ • ์„ค์ •์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ€์ƒ ์„œ๋ฒ„๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ์ผ์ข…์˜ ๋ณ€์ˆ˜ ํ™˜๊ฒฝ์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์— ๋”ฐ๋ผ ์„œ๋กœ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋„๊ตฌ. ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

  • ๋„์ปค ์ž์ฒด. Dockerfile์€ ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • Docker-compose๋Š” ๋ช‡ ๊ฐ€์ง€ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ๋ฒˆ๋“ค์ž…๋‹ˆ๋‹ค.
  • GitLab์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์‹œ์Šคํ…œ ํ†ตํ•ฉ์„ ์œ„ํ•ด GitLab-CI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋ณด๊ณ ์„œ๋Š” ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ๋Š” Docker๊ฐ€ ๊ฐœ๋ฐœ์ž์˜ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ๋Š” GitLab๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•, ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ Staging์œผ๋กœ ๋กค์•„์›ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

Docker๋Š” (์„ ์–ธ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ) ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Dockerfile์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๊ณต์‹ Ruby:2.3.0 Docker ์ด๋ฏธ์ง€์—์„œ ์ƒ์†ํ•จ์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. Ruby ๋ฒ„์ „ 2.3์ด ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋นŒ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ NodeJS๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. /app. ์•ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ† ๋ฆฌ์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ Gemfile๊ณผ Gemfile.lock์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์ข…์†์„ฑ ์ด๋ฏธ์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™ธ๋ถ€ ํฌํŠธ 3000์—์„œ ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ช…๋ น์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ง€์ •๋œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ด๊ฒƒ์€ 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๊ฐ€ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์ž‘ ์‹œ(์‹ค์ œ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ›„! ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ค€๋น„ ์ƒํƒœ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ) ๋ฐฑ์—”๋“œ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•  ๋•Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•˜์—ฌ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ ์ •ํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด MySQL ๋ฒ„์ „์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„์ „์ด ๋‹ค๋ฅผ ๋•Œ, ๊ตฌ๋ฌธ, ๊ตฌ์„ฑ, ๊ธฐ๋ณธ ์„ค์ •์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋กœ๊ทธ์ธ, ์•”ํ˜ธ์— ๋Œ€ํ•œ ๊ณตํ†ต ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ „์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์ด๋ฆ„๊ณผ ์ถฉ๋Œ์˜ ๋™๋ฌผ์›์—์„œ ๋ฉ€์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’๊ณผ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ๋ณด๋‹ค ์ตœ์ ์˜ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. MySQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ทจ์•ฝํ•œ ์‹œ์Šคํ…œ์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ๋ฒ„์ „์˜ Python, Ruby, NodeJS, PHP ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ข…์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ „์— Ruby๋Š” ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” rpm ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Docker ์ปจํ…Œ์ด๋„ˆ ๋•๋ถ„์— ์ฝ”๋“œ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ์ข…์†์„ฑ๊ณผ ํ•จ๊ป˜ ๋ฒ„์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ฝ”๋“œ์˜ ๋ฒ„์ „์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ์ด์ „ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚ด๋ฆฌ๊ณ  ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚ด๋ฆฌ๊ณ  ์ด์ „ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ํ›„ ๊ฐœ๋ฐœ ๋ฐ ํ”„๋กœ๋•์…˜์˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ์„ค์น˜์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค Frontend์—์„œ๋Š” JavaScipt์™€ NodeJS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ReacJS์— ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ํ•ซ ๋ฆฌ๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ JavaScipt ์–ด์…ˆ๋ธ”๋ฆฌ ์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ  ์ •์ ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๊ฐ€ nginx ์ €์žฅ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์—ฌ๊ธฐ์—์„œ ๋‚˜๋Š” ์šฐ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰ ํ”„๋กœ์ ํŠธ์˜ ๊ณ„ํš์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ž‘์—…์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋ชจ๋ฐ”์ผ ์žฅ์น˜๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์€ ์ด ์žฅ์น˜์— ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

JS์˜ ๊ด€๋ฆฌ ๋ถ€๋ถ„, Ruby on Rails์˜ REST ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋Š” ๋ฐฑ์—”๋“œ์™€ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋Š” ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž ํŒจ๋„์€ REST ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ํ•„์š”๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ „์—๋Š” ๋ชจ๋ฐ”์ผ ํ”Œ๋žซํผ์— ์•Œ๋ฆผ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

ํ‘ธ์‹œ ์•Œ๋ฆผ์€ NodeJS์— ๊ตฌํ˜„๋œ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด์ด ๊ตฌ์ถ•๋œ ๋‹ค์Œ ํ•ด๋‹น ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋”ฐ๋ผ ์•Œ๋ฆผ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

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

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋™์ผํ•˜์ง€๋งŒ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ์˜ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ๋‹ค๋ฉด ์ด ์˜ˆ์ œ์—์„œ๋Š” ํ‘ธ์‹œ ์•Œ๋ฆผ์— ์‘๋‹ตํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์™„์ „ํ•œ ์„œ๋ฒ„๋กœ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ์˜ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์€ ์ด๋ฏธ ๊ทธ๊ฒƒ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹œ ์šฐ๋ฆฌ๋Š” NodeJS ๋ฒ„์ „ 4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ(2017๋…„ - ed. note) ์ตœ๊ทผ ๊ฐœ๋ฐœ์—์„œ๋Š” NodeJS ๋ฒ„์ „ 7์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์š”์†Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ‘ธ์‹œ ์•Œ๋ฆผ ์„œ๋น„์Šค์—์„œ NodeJS ๋ฒ„์ „์„ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๊ณ  ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  API ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

Docker๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ํ•„์š”ํ•œ ์ข…์†์„ฑ์„ ์„ค๋ช…ํ•˜๋Š” Dockerfile์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ์ตœ์†Œ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์›ํ•˜๋Š” ์ƒํƒœ๊ณ„(Python, Ruby, NodeJS)๋ฅผ ์„ค๋ช…ํ•˜๋Š” Dockerfile์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. docker-compose์—์„œ๋Š” ํ•„์š”ํ•œ ์ข…์†์„ฑ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

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

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋‹ค์Œ์œผ๋กœ admin, inform-API, ํ‘ธ์‹œ ์•Œ๋ฆผ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ด๊ฒƒ์€ dockerized-app์˜ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ํ•„์š”ํ•œ ๊ตฌ์„ฑ์„ ์ฑ„์šฐ๋Š” Docker ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์—ฌ๊ธฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ๋ฐฉ๋ฒ•์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” README.md๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๋‘ ๊ฐœ์˜ docker-compose ํŒŒ์ผ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ๊ณ„์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”์–ด๋กœ ์ž‘์—…ํ•  ๋•Œ ํ‘ธ์‹œ ์•Œ๋ฆผ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ docker-compose ํŒŒ์ผ์„ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

ํ‘ธ์‹œ ์•Œ๋ฆผ๊ณผ ํ†ตํ•ฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ docker-compose.yaml ๋ฐ docker-compose-push.yaml์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

docker-compose.yaml๊ณผ docker-compose-push.yaml์ด ํ•œ ํด๋”์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๊ตฌ์„ฑํ’ˆ ์„ค๋ช…. ๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜์ง‘์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณ ๊ธ‰ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ• ๋งŒํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—์„œ ๋ฐธ๋Ÿฐ์„œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ .dev ๋„๋ฉ”์ธ์ธ api.informer.dev๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. .dev ๋„๋ฉ”์ธ์ด ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐœ๋ฐœ์ž์˜ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ตฌ์„ฑ์ด ๊ฐ ํ”„๋กœ์ ํŠธ๋กœ ์ „์†ก๋˜๊ณ  ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ๋™์‹œ์— ํ•จ๊ป˜ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ๋ณผ ๋•Œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ๋ฐธ๋Ÿฐ์„œ์— ์š”์ฒญํ•˜๋Š” ๋„๊ตฌ์ธ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ์ด๋ฆ„ ๋ฐธ๋Ÿฐ์„œ๋Š” ์—ฐ๊ฒฐํ•  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌ์ž JS๋ฅผ ์ œ๊ณตํ•˜๋Š” nginx์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ API๋ฅผ ์ œ๊ณตํ•˜๋Š” nginx์ด๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ์˜ ํ˜•ํƒœ๋กœ nginx์— ์ œ๊ณต๋˜๋Š” ์ •์  ํŒŒ์ผ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋˜๊ณ  ํ”„๋ก์‹œ ๋’ค์— ์ˆจ๊ฒจ์ ธ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ๋จธ์‹ ์—์„œ๋Š” IP๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์›์น™์ ์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์•ก์„ธ์Šคํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋„์ปคํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์˜ˆ๋ฅผ ์‚ดํŽด๋ด์•ผ ํ• ๊นŒ์š”? ์ œ ์ƒ๊ฐ์—๋Š” ์ข‹์€ ์˜ˆ๊ฐ€ MySQL์˜ ๊ณต์‹ ๋„์ปค ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

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

Hub.docker.com์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ง์ ‘ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์›์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ github.com์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ์ดˆ๊ธฐ ์ดˆ๊ธฐํ™” ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘์˜ ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” docker-endpoint.sh ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ์˜ˆ์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋˜๋Š” docker-compose๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” docker๊ฐ€ MySQL ๋˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ชจ๋“  ๋ฃจํŠธ์— ๋Œ€ํ•œ ๋นˆ ์•”ํ˜ธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž„์˜์˜ ์•”ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์•”ํ˜ธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ดˆ๊ธฐํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” Dockerfile์„ ์•ฝ๊ฐ„ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ๊ถŒํ•œ์˜ ํ™•์žฅ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”์— ๋งž๊ฒŒ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‚˜์ค‘์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ˜์†”์—์„œ ๊ฐ„๋‹จํžˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Ruby ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑ, ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ด๊ฒƒ์€ github.com์—์„œ MySQL์˜ ํŠน์ • ๋ฒ„์ „์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. Dockerfile์„ ์—ด๊ณ  ์„ค์น˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-endpoint.sh๋Š” ์ง„์ž…์ ์„ ๋‹ด๋‹นํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ดˆ๊ธฐํ™” ์ค‘์— ๋ช‡ ๊ฐ€์ง€ ์ค€๋น„ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ž‘์—…์€ ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ์—์„œ๋งŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด gitlab์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์ƒ๋‹นํžˆ ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

Gitlab์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋Š” Gitlab CI์ž…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ฝ”๋“œ ์ „๋‹ฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜ ์ž๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ผ๋ จ์˜ ๋ช…๋ น์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Gitlab CI 2 ํ† ํฌ https://goo.gl/uohKjI - Ruby Russia ํด๋Ÿฝ์˜ ๋ณด๊ณ ์„œ - ๋งค์šฐ ์ƒ์„ธํ•˜๋ฉฐ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ด์ œ Gitlab CI๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Gitlab CI๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์— .gitlab-ci.yml ํŒŒ์ผ์„ ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ์™€ ๊ฐ™์€ ์ผ๋ จ์˜ ์ƒํƒœ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด docker-compose๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ง€ ๋ฐฑ์—”๋“œ ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹œ์Šคํ…œ์€ ๋ฐฐํฌ์˜ ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๋‹จ๊ณ„๋Š” ํ˜„์žฌ ์Šคํ…Œ์ด์ง•์„ ์œ„ํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์ด ์—†๋Š” ์žฌ์‹œ์ž‘์„ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์šฉ๊ธฐ๋ฅผ ๊ฐ•์ œ๋กœ ๋ˆ ๋‹ค์Œ ํ…Œ์ŠคํŠธ ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์ˆ˜์ง‘ํ•œ ๋ชจ๋“  ์šฉ๊ธฐ๋ฅผ ๋‹ค์‹œ ๋“ค์–ด ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งˆ์Šคํ„ฐ ๋ถ„๊ธฐ์—๋งŒ ์ ์šฉ๋œ๋‹ค๋Š” ์ฐธ๊ณ  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ถ„๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ถ„๊ธฐ๋ณ„๋กœ ๋กค์•„์›ƒ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ด๋ฅผ ๋” ์ฒด๊ณ„ํ™”ํ•˜๋ ค๋ฉด Gitlab Runner๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” Golang์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ Golang ์„ธ๊ณ„์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•  ๋•Œ Gitlab Runner๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

Gitlab ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ‚ค๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช…๋ น์ค„์—์„œ ์ดˆ๊ธฐํ™” ๋ช…๋ น์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ™”์‹์œผ๋กœ Gitlab Runner ์„ค์ •(Shell, Docker, VirtualBox, SSH)

Gitlab Runner์˜ ์ฝ”๋“œ๋Š” .gitlab-ci.yml ์„ค์ •์— ๋”ฐ๋ผ ๋ชจ๋“  ์ปค๋ฐ‹์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ Gitlab์—์„œ ์‹œ๊ฐ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€. GItlab CI๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‚˜๋ฉด ํ˜„์žฌ ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฐ‹์ด 4๋ถ„ ์ „์— ๋งŒ๋“ค์–ด์กŒ๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์œผ๋ฉฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋นŒ๋“œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋‘ ์ƒํƒœ๊ฐ€ ์ด๋ฏธ ํ†ต๊ณผ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ…Œ์ด์ง•์—์„œ ์ƒํƒœ ๋ฐ ๋ฐฐํฌ ์ƒํƒœ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋นŒ๋“œ๋ฅผ ํด๋ฆญํ•˜๋ฉด .gitlab-ci.yml์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋œ ๋ช…๋ น์˜ ์ฝ˜์†” ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ด๊ฒƒ์ด ์šฐ๋ฆฌ ์ œํ’ˆ ํžˆ์Šคํ† ๋ฆฌ์˜ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์ธ ์‹œ๋„๊ฐ€ ์žˆ์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ œ์ถœ๋˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ  ์Šคํ…Œ์ด์ง• ์ฝ”๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋„์ปค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์Šคํ…Œ์ด์ง•์—์„œ ์–ด๋–ค ์ž‘์—…์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ „์ฒด ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ์ผ๋ถ€๋งŒ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ๋ณ„๋„์˜ ํด๋”๋กœ ๋ถ„์‡„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ Docker-compose๊ฐ€ ๊ฐ ์•„๋น ์— ๋Œ€ํ•œ ์ž์ฒด ๋„คํŠธ์›Œํฌ ๊ณต๊ฐ„์„ ์ƒ์„ฑํ•˜๊ณ  ์ด์›ƒ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณด์ง€ ๋ชปํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด Docker์—์„œ ์ˆ˜๋™์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์— ์ด๋Ÿฌํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  Docker-compose๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๋ฉ”์‹œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ด…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฌธ์ œ๋Š” ์Šคํ…Œ์ด์ง•์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์ด ์•„๋ฆ„๋‹ต๊ณ  ์ƒ์‚ฐ์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ๋ณด์ด๋ ค๋ฉด WEB์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํฌํŠธ 80 ๋˜๋Š” 443์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ฃผ์š” ํ”„๋กœ์ ํŠธ์— ํ•˜๋‚˜์˜ Gitlab Runner๋ฅผ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค.

Gitlab์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ถ„์‚ฐํ˜• Gitlab Runner๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด Runner๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ง‘์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ ๊ทธ๋ฃน์„ ๋ณผ๋ฅจ ๋ฌธ์ œ ์—†์ด ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋Š” Gitlab Runner ํ•˜๋‚˜๋กœ ์ œํ•œํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” nginx-proxy๋ฅผ ๋ณ„๋„์˜ ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ๋กœ ์˜ฎ๊ธฐ๊ณ  ๊ทธ ์•ˆ์˜ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—๋Š” ํ•˜๋‚˜์˜ ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์žˆ๊ณ  ๋ฐธ๋Ÿฐ์„œ์—๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๋ณ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ๋” ํ”„๋ก์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์š”์ฒญ์€ ํฌํŠธ 80์˜ ๋„๋ฉ”์ธ์„ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ณ  ์ด ๋„๋ฉ”์ธ์„ ์ œ๊ณตํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ทธ๋ฃน์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๋˜ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‚˜์š”? ์ด๊ฒƒ์€ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฃจํŠธ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹œ์Šคํ…œ์˜ ๋ฃจํŠธ ํ˜ธ์ŠคํŠธ์™€ ๋‹ค๋ฅธ ๋ฃจํŠธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐ€๋ฉด ๋ฃจํŠธ๊ฐ€ ๋˜๋ฉฐ ์ด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ผ์€ ๋ฃจํŠธ ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐ€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋– ๋‚œ ๊ฒฝ์šฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๋Š” ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ปจํ…Œ์ด๋„ˆ์— ํฌํ•จ๋  ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ?

์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋™์ผํ•œ ๊ทธ๋ฃน ID(UID)์™€ ์‚ฌ์šฉ์ž ID(GID)๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ID๊ฐ€ 1000์ธ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ Ubuntu OS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์ผ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Ubuntu์—์„œ ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž์˜ ID๋Š” 1000์ž…๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋„์ปค ์„ค๋ช…์„œ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ํ™œ๋ฐœํžˆ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ๋ฌธ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. XNUMX~XNUMX๊ฐœ์›” ์ „์— ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์„œ์„œํžˆ ๊ตฌ์‹์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋Š” ํ‘œ์ค€ ์ˆ˜๋‹จ์œผ๋กœ ์ด๋ฏธ ํ•ด๊ฒฐ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์œผ๋กœ ์ง์ ‘ ๊ฐ€๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ๋” ๋‚˜์•„๊ฐ€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์˜ˆ๋Š” ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Docker Swarm์ด๋ผ๋Š” Docker์˜ ๊ธฐ๋ณธ ์ œ๊ณต ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. Docker Swarm ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๋•์…˜์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋กœ๊ทธ ์ž‘์—…์ด ๋ถˆํŽธํ•ด์ง‘๋‹ˆ๋‹ค. ์ด์ œ ๋กœ๊ทธ๊ฐ€ ๊ฒฉ๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ปจํ…Œ์ด๋„ˆ์— ํฉ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋Š” ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์— ํŽธ๋ฆฌํ•˜๊ฒŒ ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Docker ๋ฐ Gitlab CI๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค

์ถœ์ฒ˜ : habr.com

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