Skip to main content

Next.js์—์„œ Docker ๋นŒ๋“œ ์ตœ์ ํ™”ํ•˜๊ธฐ

๊น€์˜์ค‘2025๋…„ 4์›” 3์ผAbout 2 minDevOpsDockerNode.jsNexc.jsArticle(s)blogyozm.wishket.comdevopsdockernodenodejsnode-jsnextnextjsnext-js

Next.js์—์„œ Docker ๋นŒ๋“œ ์ตœ์ ํ™”ํ•˜๊ธฐ ๊ด€๋ จ

Docker > Article(s)

Article(s)
Next.js > Article(s)

Article(s)

Next.js์—์„œ Docker ๋นŒ๋“œ ์ตœ์ ํ™”ํ•˜๊ธฐ
์š”์ฆ˜ ์›น ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅธ ๋ฐฐํฌ์™€ ํšจ์œจ์ ์ธ ์ธํ”„๋ผ ๊ด€๋ฆฌ๋Š” ๋” ์ด์ƒ โ€˜์žˆ์œผ๋ฉด ์ข‹์€โ€™ ์š”์†Œ๊ฐ€ ์•„๋‹Œ โ€˜๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œโ€™ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋ผ๋ฉด, ๊ฒฝ์Ÿ๋ ฅ์„ ์ขŒ์šฐํ•˜๋Š” ํ•ต์‹ฌ์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ํ˜„์žฅ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€ ์ธํ”„๋ผ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด ์ง€์‹ ๊ฒฉ์ฐจ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” Docker์˜ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋‚˜ CI/CD ์บ์‹ฑ ์ „๋žต์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ณ , ์ธํ”„๋ผ ๊ฐœ๋ฐœ์ž๋Š” โ€˜standaloneโ€™ ๋นŒ๋“œ์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ๋‹ค์†Œ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋‘ ์˜์—ญ ๊ฐ„์˜ ๊ฐ„๊ทน์„ ์ขํžˆ๊ณ , ๋ฐฐํฌ ์†๋„์™€ ์ธํ”„๋ผ ๋น„์šฉ ๋ชจ๋‘๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฆ˜ ์›น ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅธ ๋ฐฐํฌ์™€ ํšจ์œจ์ ์ธ ์ธํ”„๋ผ ๊ด€๋ฆฌ๋Š” ๋” ์ด์ƒ โ€˜์žˆ์œผ๋ฉด ์ข‹์€โ€™ ์š”์†Œ๊ฐ€ ์•„๋‹Œ โ€˜๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œโ€™ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋ผ๋ฉด, ๋ฐฐํฌ ์†๋„์™€ ์ธํ”„๋ผ ํšจ์œจ์„ฑ์€ ์„œ๋น„์Šค์˜ ๊ฒฝ์Ÿ๋ ฅ์„ ์ขŒ์šฐํ•˜๋Š” ํ•ต์‹ฌ์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ ํ˜„์žฅ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€ ์ธํ”„๋ผ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด ์ง€์‹ ๊ฒฉ์ฐจ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” Docker์˜ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€(Multi-stage) ๋นŒ๋“œ๋‚˜ CI/CD ์บ์‹ฑ(Caching) ์ „๋žต์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ํŽธ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ธํ”„๋ผ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐฑ์—”๋“œ(Backend) ํ™˜๊ฒฝ์—๋Š” ๋น„๊ต์  ์ต์ˆ™ํ•˜์ง€๋งŒ, Next.js์˜ standalone ๋นŒ๋“œ์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ๋‹ค์†Œ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋‘ ์˜์—ญ ๊ฐ„์˜ ๊ฐ„๊ทน์„ ์ขํžˆ๊ณ , ๋ฐฐํฌ ์†๋„์™€ ์ธํ”„๋ผ ๋น„์šฉ ๋ชจ๋‘๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

<์ถœ์ฒ˜: <FontIcon icon="fas fa-globe"/>unsplash>
<์ถœ์ฒ˜: unsplash>

Next.js standalone ๋ชจ๋“œ๋กœ Docker ๋นŒ๋“œ ์ตœ์ ํ™”ํ•˜๊ธฐ

ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋นŒ๋“œ ํ›„ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ์˜ˆ์ƒ๋ณด๋‹ค ์ปค์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Next.js ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งŽ์€ ํŒŒ์ผ๊ณผ ์˜์กด์„ฑ์„ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Docker ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ Next.js์˜ โ€˜standalone ๋ชจ๋“œโ€™๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ๊ผญ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ํŒŒ์ผ๋กœ ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ Docker ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ด๊ณ , ๋ฐฐํฌ ์†๋„์™€ ์ธํ”„๋ผ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Next.js standalone์ด๋ž€?

Next.js์˜ standalone ๋ชจ๋“œ๋Š” ์„ค์ •์—์„œ output: โ€˜standaloneโ€™๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์˜ต์…˜์„ ์ ์šฉํ•˜๋ฉด Next.js ํ”„๋กœ์ ํŠธ์—์„œ ๋…๋ฆฝ ์‹คํ–‰ํ˜•(standalone)์˜ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด ์ƒ์„ฑ๋˜๋Š”๋ฐ์š”. ์ด๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋งŒ ๋ณ„๋„๋กœ ์ถ”์ถœํ•ด /standalone ํด๋”์— ๋ชจ์•„ ์ค๋‹ˆ๋‹ค.

standalone์€ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ• ๊นŒ?

1. ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ๊ฑฐ

์ผ๋ฐ˜์ ์ธ Docker ๋นŒ๋“œ์—์„œ๋Š” node_modules๋ฅผ ๋น„๋กฏํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— pages/, app/, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, devDependencies ๊ฐ™์€ ์š”์†Œ๋“ค์ด ์ด๋ฏธ์ง€์— ๋ชจ๋‘ ํฌํ•จ๋˜์–ด Docker ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ์ปค์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ standalone ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ํฌํ•จํ•œ, ์ตœ์†Œํ•œ์˜ ํ™˜๊ฒฝ์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. node_modules ์ตœ์ ํ™”

๋˜ํ•œ standalone ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด, node_modules ์—ญ์‹œ ์‹คํ–‰์— ๊ผญ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋งŒ ์„ ํƒ์ ์œผ๋กœ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์“ฐ์˜€๋˜ ๋ถˆํ•„์š”ํ•œ ํŒจํ‚ค์ง€(devDependencies, ESLint, TypeScript ๋“ฑ)๋Š” ์ž๋™์œผ๋กœ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, Next.js ์„œ๋ฒ„ ๋™์ž‘์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™” ๊ณผ์ •์„ ๊ฑฐ์นœ ๊ฒฐ๊ณผ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์•Œ์•„๋ณด๋Š” Next.js standalone

์„ค์ • ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. Next.js์˜ next.config.js ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •์„ ์ ์šฉํ•˜๊ณ  next build ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด .next/standalone ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ํด๋”๋Š” ์‹คํ–‰์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ดํ›„ Docker ๋นŒ๋“œ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ Dockerfile ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰ ๋น„๊ต

์•„๋ž˜๋Š” standalone ๋นŒ๋“œ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์€ ๊ธฐ๋ณธ Dockerfile์ž…๋‹ˆ๋‹ค. npx create-next-app@latest ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑํ•œ ๊ธฐ๋ณธ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋งŒ๋“  Docker ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋Š” 986.95MB๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค. ์•„์ง ์ตœ์ ํ™”๋ฅผ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ, ์ „์ฒด ํ”„๋กœ์ ํŠธ ํด๋”์™€ ๋ชจ๋“  node_modules๊ฐ€ ๋“ค์–ด ์žˆ์–ด ๋ฌด๊ฒ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” standalone ๋นŒ๋“œ๋ฅผ ์ ์šฉํ•œ Dockerfile์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ Next.js ์„ค์ •์—์„œ standalone ์˜ต์…˜๋งŒ ์ถ”๊ฐ€ํ–ˆ์„ ๋ฟ์ธ๋ฐ, Docker ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ 208MB๋กœ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๋ ค 78.9%๋‚˜ ์šฉ๋Ÿ‰์ด ๊ฐ์†Œํ•œ, ๋†€๋ผ์šด ํšจ๊ณผ์ž…๋‹ˆ๋‹ค.

standalone์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•˜๋ ค๋ฉด Dockerfile ์—ญ์‹œ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. standalone ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, Next.js๊ฐ€ ์‹คํ–‰์— ๊ผญ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ํŒŒ์ผ๋งŒ .next/standalone ํด๋”๋กœ ์ •๋ฆฌํ•ด์ฃผ๋Š”๋ฐ์š”. ์ด๋•Œ Dockerfile์ด ๊ทธ ์ตœ์ ํ™” ๊ฒฐ๊ณผ๋ฌผ์„ ์ •ํ™•ํžˆ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ , ๊ธฐ์กด ๋ฐฉ์‹๋Œ€๋กœ ์ „์ฒด ํ”„๋กœ์ ํŠธ๋‚˜ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ๊นŒ์ง€ ํฌํ•จํ•˜๋ฉด, ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ๋‹ค์‹œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ด์œ ๋กœ Dockerfile ์—ญ์‹œ standalone ๋นŒ๋“œ๋กœ ๋งŒ๋“  ์ตœ์ ํ™”๋œ ๊ฒฐ๊ณผ๋ฌผ๋งŒ ๋ณต์‚ฌํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  standalone ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ๋งŒ ๋ณต์‚ฌํ•˜๋„๋ก Dockerfile์— ์•„๋ž˜์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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


Docker ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋กœ ์ตœ์ ํ™”ํ•˜๊ธฐ

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

Docker ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ž€?

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ(Multi-stage Build)๋Š” ํ•˜๋‚˜์˜ Dockerfile ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„(stage)๋ฅผ ์‚ฌ์šฉํ•ด ๋นŒ๋“œ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต์˜ Docker ๋นŒ๋“œ์—์„œ๋Š” ๋นŒ๋“œ ๋„๊ตฌ, ์†Œ์Šค ์ฝ”๋“œ, ์บ์‹œ ํŒŒ์ผ ๊ฐ™์€ ์‹คํ–‰์— ๋ถˆํ•„์š”ํ•œ ์š”์†Œ๊นŒ์ง€ ๋ชจ๋‘ ์ตœ์ข… ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜์–ด, ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ๋ณด์•ˆ์ƒ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ ์ค‘ ์‹ค์ œ ๋Ÿฐํƒ€์ž„์— ๊ผญ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ์ตœ์ข… ์ด๋ฏธ์ง€๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ• ๊นŒ?

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋Š” ํฌ๊ฒŒ ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

1. ๋นŒ๋“œ ์Šคํ…Œ์ด์ง€(Builder Stage):

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ๋นŒ๋“œํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋„๊ตฌ, ์ปดํŒŒ์ผ๋Ÿฌ, ๋นŒ๋“œ ์˜์กด์„ฑ ๋“ฑ ๋นŒ๋“œ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ด ๋‹จ๊ณ„์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

2. ๋Ÿฐํƒ€์ž„ ์Šคํ…Œ์ด์ง€(Runtime Stage):

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

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ตœ์ข… Docker ์ด๋ฏธ์ง€๋Š” ์‹คํ–‰์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ํŒŒ์ผ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์•Œ์•„๋ณด๋Š” ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ
์˜ˆ์‹œ๋กœ ์•Œ์•„๋ณด๋Š” ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ์˜ 3๊ฐ€์ง€ ์ด์ 

1. ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ตœ์†Œํ™”

์ด ๋นŒ๋“œ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ์ตœ์ข… ๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ์— ์‚ฌ์šฉํ–ˆ๋˜ ๋„๊ตฌ, ์†Œ์Šค ์ฝ”๋“œ, ๋ถˆํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์˜ค์ง ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ Dockerfile ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰ ๋น„๊ต

์•„๋ž˜ ์ด๋ฏธ์ง€๋Š” ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์€ Dockerfile์ž…๋‹ˆ๋‹ค.

์ด์–ด ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ์ ์šฉํ•œ Dockerfile์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

standalone ์˜ต์…˜ ์—†์ด๋„ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋งŒ์œผ๋กœ, 345MB๊ฐ€ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋žต 28.5% ์ •๋„ ์šฉ๋Ÿ‰ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

2. ๋นŒ๋“œ ๋‹จ๊ณ„์™€ ์‹คํ–‰ ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌ

์•ž์„œ ๋ณด์•˜๋“ฏ ๋นŒ๋“œ ์Šคํ…Œ์ด์ง€์—์„œ๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์™€ ๋นŒ๋“œ ํ™˜๊ฒฝ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๋Ÿฐํƒ€์ž„ ์Šคํ…Œ์ด์ง€์—์„œ๋Š” ์˜ค์ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ๊ผญ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์ข… ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ž‘๊ณ  ๊ฐ€๋ฒผ์›Œ์ง‘๋‹ˆ๋‹ค.

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

3. ํšจ์œจ์ ์ธ ์บ์‹œ ์ „๋žต ๊ตฌํ˜„

๊ทธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋Š” Docker ๋ ˆ์ด์–ด ์บ์‹œ(layer cache)๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, package.json๊ณผ package-lock.json์„ ๋จผ์ € ๋ณต์‚ฌํ•œ ๋‹ค์Œ, npm install์„ ์‹คํ–‰ํ•˜๋Š” ์ „๋žต์„ ๊ตฌ์„ฑํ•˜๋ฉด ์ด๋Ÿฐ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฆ‰, ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋Š” Next.js ํ”„๋กœ์ ํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Œ€๋ถ€๋ถ„ Docker ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ ๊ผญ ๋„์ž…ํ•ด์•ผ ํ•  ์ตœ์ ํ™” ์ „๋žต์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ ˆ๊ฐ๊ณผ ๋ฐฐํฌ ์†๋„ ๊ฐœ์„ ์€ ๋ฌผ๋ก ์ด๊ณ , ๋ณด์•ˆ๊ณผ ์ธํ”„๋ผ ํšจ์œจ๊นŒ์ง€ ์ฑ™๊ธธ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”.


GitHub Actions ํ™˜๊ฒฝ์—์„œ์˜ Docker ์บ์‹œ ์ „๋žต

๊ทธ๋ ‡๋‹ค๋ฉด, GitHub Actions ํ™˜๊ฒฝ์—์„œ Docker ์บ์‹œ๋Š” ์–ด๋””์— ์ €์žฅ๋˜๋ฉฐ, ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”? ๋˜ํ•œ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ์™€ Docker ์บ์‹œ ๊ฐ„์˜ ๊ด€๊ณ„๋Š” ์–ด๋–ป๊ฒŒ ์ •๋ฆฌํ• ๊นŒ์š”?

GitHub Actions๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ํด๋ฆฐ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ(Workflow)๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ์„ฑ๊ณผ ์•ˆ์ •์„ฑ ์ธก๋ฉด์—์„œ๋Š” ๋ถ„๋ช…ํ•œ ๊ฐ•์ ์ด์ง€๋งŒ, Docker ๋ ˆ์ด์–ด ์บ์‹œ(layer cache)๊ฐ€ ์œ ์ง€๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํ•œ๊ณ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•ด ๋นŒ๋“œํ•˜๋”๋ผ๋„ ๋งค๋ฒˆ ๋ชจ๋“  ๊ณผ์ •์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฏ€๋กœ, ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ณ  ์ž์›์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด GitHub Actions ํ™˜๊ฒฝ์—์„œ๋Š” Docker Buildx์™€ actions/cache๋ฅผ ์กฐํ•ฉํ•œ ์บ์‹œ ์ „๋žต์ด ๋„๋ฆฌ ์“ฐ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด์„ฑ ์„ค์น˜ ๋‹จ๊ณ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— Docker ์บ์‹œ๋ฅผ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ GitHub Actions์—์„œ์˜ Docker ์บ์‹œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํœ˜๋ฐœ์„ฑ ํ™˜๊ฒฝ์˜ ์•ฝ์ ์„ ๋ณด์™„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. actions/cache์™€ Docker Buildx๋ฅผ ์ ์ ˆํžˆ ์กฐํ•ฉํ•˜๊ณ , ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฉฐ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CD/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์•ˆ์ •์„ฑ๊ณผ ์†๋„๋ฅผ ์˜ฌ๋ฆด ํšจ์œจ์ ์ธ ์ „๋žต์„ ์ฐพ๋Š”๋‹ค๋ฉด, ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ์™€ ์บ์‹œ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์˜ ๋„์ž…์„ ์ ๊ทน ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.


standalone๊ณผ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ์˜ ์ฐจ์ด

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

Next.js๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ ๊ฒฐ๊ณผ๊ฐ€ ํฌ๊ณ , ๋ชจ๋“  node_modules๋ฅผ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ standalone ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด, ์‹คํ–‰์— ๊ผญ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ํŒŒ์ผ๋งŒ .next/standalone ํด๋”์— ์ •๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, standalone ๋ชจ๋“œ๋Š” Docker๊ฐ€ ์•„๋‹Œ Next.js ํ”„๋กœ์ ํŠธ ์ž์ฒด๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์‹คํ–‰์— ํ•„์ˆ˜์ ์ธ ํŒŒ์ผ๊ณผ ์˜์กด์„ฑ๋งŒ ๋‚จ๊ธฐ๊ณ , Next.js ์„œ๋ฒ„์™€ ์ง์ ‘ ๊ด€๋ จ์ด ์—†๋Š” ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ์™€ ์˜์กด์„ฑ(devDependencies, ํ…Œ์ŠคํŠธ ํŒŒ์ผ ๋“ฑ)์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

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


๋งˆ์น˜๋ฉฐ: ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด, ์ตœ์ ์˜ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€๋Š” ๋ฒ•

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

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

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

Next.js์—์„œ Docker ๋นŒ๋“œ ์ตœ์ ํ™”ํ•˜๊ธฐ

์š”์ฆ˜ ์›น ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅธ ๋ฐฐํฌ์™€ ํšจ์œจ์ ์ธ ์ธํ”„๋ผ ๊ด€๋ฆฌ๋Š” ๋” ์ด์ƒ โ€˜์žˆ์œผ๋ฉด ์ข‹์€โ€™ ์š”์†Œ๊ฐ€ ์•„๋‹Œ โ€˜๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œโ€™ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋ผ๋ฉด, ๊ฒฝ์Ÿ๋ ฅ์„ ์ขŒ์šฐํ•˜๋Š” ํ•ต์‹ฌ์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ํ˜„์žฅ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€ ์ธํ”„๋ผ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด ์ง€์‹ ๊ฒฉ์ฐจ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” Docker์˜ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋‚˜ CI/CD ์บ์‹ฑ ์ „๋žต์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ณ , ์ธํ”„๋ผ ๊ฐœ๋ฐœ์ž๋Š” โ€˜standaloneโ€™ ๋นŒ๋“œ์™€ ๊ฐ™์€ ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ๋‹ค์†Œ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋‘ ์˜์—ญ ๊ฐ„์˜ ๊ฐ„๊ทน์„ ์ขํžˆ๊ณ , ๋ฐฐํฌ ์†๋„์™€ ์ธํ”„๋ผ ๋น„์šฉ ๋ชจ๋‘๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.