๐Ÿณ๋„์ปค ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ ์ˆ˜

ํ˜„์žฌ ๋„์ปค ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ์™€ ์ ์šฉ๋œ ์ตœ์ ํ™” ๊ธฐ์ˆ ๋“ค์„ ์ฒดํฌํ•˜์—ฌ ๊ฐœ์„  ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ ์šฉ๋œ ์ตœ์ ํ™” ํ•ญ๋ชฉ

์ตœ์ ํ™” ์ƒํƒœ ์ ์ˆ˜

40์ 
๋ถ„์„ ์ง€ํ‘œ์ƒํƒœ
์ด๋ฏธ์ง€ ๋“ฑ๊ธ‰Heavy
์˜ˆ์ƒ ์ ˆ๊ฐ ๊ฐ€๋Šฅ ์šฉ๋Ÿ‰์•ฝ 0 MB

๊ด€๋ จ๋œ ๋„๊ตฌ

๋„์ปค ์ด๋ฏธ์ง€ ๊ฒฝ๋Ÿ‰ํ™”๊ฐ€ ์ค‘์š”ํ•œ ์„ธ ๊ฐ€์ง€ ์ด์œ 

์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์€ '๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์ด๋™์„ฑ'์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ˆ˜ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ(GB)์— ๋‹ฌํ•˜๋Š” ๋ฌด๊ฑฐ์šด ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํ”ํžˆ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€ ์ตœ์ ํ™”๋Š” ๋‹จ์ˆœํžˆ ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š” ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ฒซ์งธ, **๋ฐฐํฌ ์†๋„**๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ์ž‘์„์ˆ˜๋ก CI/CD ๊ณผ์ •์—์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•˜๊ณ  ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ์‹œ๊ฐ„์ด ํš๊ธฐ์ ์œผ๋กœ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋‘˜์งธ, **๋ณด์•ˆ์„ฑ**์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ์ž‘๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๋งŒํผ ํฌํ•จ๋œ ํŒจํ‚ค์ง€๊ฐ€ ์ ๋‹ค๋Š” ๋œป์ด๋ฉฐ, ์ด๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ๋…ธ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ (Surface Area)์ด ์ค„์–ด๋“œ๋Š” ํšจ๊ณผ๋ฅผ ์ค๋‹ˆ๋‹ค. ์…‹์งธ, **๋น„์šฉ ์ ˆ๊ฐ**์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์™€ ๋„คํŠธ์›Œํฌ ์ „์†ก ๋น„์šฉ์„ ์•„๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ตœ์ ํ™” ์ „๋žต์€ **๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ(Multi-stage build)**์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ๋“ฑ ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ๋งŒ ํ•„์š”ํ•œ ๋ฌด๊ฑฐ์šด ์˜์กด์„ฑ๋“ค์„ ์ตœ์ข… ์ด๋ฏธ์ง€์—์„œ ์™„์ „ํžˆ ๋ฐฐ์ œํ•˜๊ณ , ์˜ค์ง ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋งŒ ๋‚จ๊ธฐ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ `Ubuntu` ๋Œ€์‹  `Alpine Linux`์™€ ๊ฐ™์€ ์ดˆ๊ฒฝ๋Ÿ‰ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ˆ˜๋ฐฑ MB์˜ ์šฉ๋Ÿ‰์„ ์ฆ‰์‹œ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋„์ปค์˜ ๋ ˆ์ด์–ด ์บ์‹ฑ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ๋ณ€ํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ๋Š” Dockerfile์˜ ํ•˜๋‹จ์— ๋ฐฐ์น˜ํ•˜๊ณ , ์ž˜ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋กœ์ง์€ ์ƒ๋‹จ์— ๋ฐฐ์น˜ํ•˜์—ฌ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ `RUN` ๋ช…๋ น์„ `&&`๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ ˆ์ด์–ด๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ณธ ๋„๊ตฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฑ„์›Œ๊ฐ€๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์žฅ ์™„๋ฒฝํ•œ ์ƒํƒœ๋กœ ์ตœ์ ํ™”ํ•ด ๋ณด์„ธ์š”.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ)

Q: Alpine ์ด๋ฏธ์ง€๋ฅผ ์“ธ ๋•Œ ์ฃผ์˜ํ•  ์ ์€?

A: Alpine์€ glibc ๋Œ€์‹  musl libc๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์ผ๋ถ€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€๋“ค์ด ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Python์ด๋‚˜ Node.js์šฉ slim ์ด๋ฏธ์ง€๋ฅผ ๋Œ€์•ˆ์œผ๋กœ ๊ณ ๋ คํ•˜์„ธ์š”.

Q: .dockerignore๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

A: .git ํด๋”๋‚˜ ๋กœ์ปฌ์˜ node_modules, ๋กœ๊ทธ ํŒŒ์ผ ๋“ฑ์ด ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์— ํฌํ•จ๋˜๋ฉด ์ „์†ก ์†๋„๊ฐ€ ๋А๋ ค์ง€๊ณ  ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Q: ๋ ˆ์ด์–ด๋ฅผ ๋ฌด์กฐ๊ฑด ์ค„์ด๋Š” ๊ฒŒ ์ข‹๋‚˜์š”?

A: ๋ ˆ์ด์–ด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ๋ฐ˜๋Œ€๋กœ ๋„ˆ๋ฌด ์ ์œผ๋ฉด ์บ์‹œ ํ™œ์šฉ๋„๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.