
Next.js์์ Docker ๋น๋ ์ต์ ํํ๊ธฐ
Next.js์์ Docker ๋น๋ ์ต์ ํํ๊ธฐ ๊ด๋ จ
์์ฆ ์น ์๋น์ค ํ๊ฒฝ์์ ๋น ๋ฅธ ๋ฐฐํฌ์ ํจ์จ์ ์ธ ์ธํ๋ผ ๊ด๋ฆฌ๋ ๋ ์ด์ โ์์ผ๋ฉด ์ข์โ ์์๊ฐ ์๋ โ๋ฐ๋์ ํ์ํโ ์์๊ฐ ๋์์ต๋๋ค. ํนํ ๋๊ท๋ชจ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋น ๋ฅธ ์ ๋ฐ์ดํธ๊ฐ ์ค์ํ ์๋น์ค๋ผ๋ฉด, ๋ฐฐํฌ ์๋์ ์ธํ๋ผ ํจ์จ์ฑ์ ์๋น์ค์ ๊ฒฝ์๋ ฅ์ ์ข์ฐํ๋ ํต์ฌ์ด ๋ฉ๋๋ค.
ํ์ง๋ง ์ค์ ํ์ฅ์์๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ์ธํ๋ผ ๊ฐ๋ฐ์ ์ฌ์ด ์ง์ ๊ฒฉ์ฐจ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ Docker์ ๋ฉํฐ์คํ ์ด์ง(Multi-stage) ๋น๋๋ CI/CD ์บ์ฑ(Caching) ์ ๋ต์ ์ต์ํ์ง ์์ ํธ์ ๋๋ค. ๋ฐ๋ฉด ์ธํ๋ผ ๊ฐ๋ฐ์๋ ๋ฐฑ์๋(Backend) ํ๊ฒฝ์๋ ๋น๊ต์ ์ต์ํ์ง๋ง, Next.js์ standalone ๋น๋์ ๊ฐ์ ํ๋ก ํธ์๋ ๋ฐฐํฌ ์ต์ ํ ๊ธฐ๋ฒ์ด ๋ค์ ์์ํ ์ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด๋ฌํ ๋ ์์ญ ๊ฐ์ ๊ฐ๊ทน์ ์ขํ๊ณ , ๋ฐฐํฌ ์๋์ ์ธํ๋ผ ๋น์ฉ ๋ชจ๋๋ฅผ ์ต์ ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค.

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 ์๋ฒ ๋์์ ํ์ํ ํจํค์ง๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค.
์ต์ ํ ๊ณผ์ ์ ๊ฑฐ์น ๊ฒฐ๊ณผ๋ ์ด๋ ์ต๋๋ค.
- Docker ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
- AWS ECR์ด๋ Docker Hub์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ ๋, ์ ์ก ์๋๊ฐ ๋นจ๋ผ์ง๋ฉฐ ๋ฐฐํฌ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
- ์ปจํ ์ด๋ ์์ ์๊ฐ์ด ๋นจ๋ผ์ง๊ณ , ์ธํ๋ผ ๋ฆฌ์์ค๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์๋ก ์์๋ณด๋ 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์ ์คํํ๋ ์ ๋ต์ ๊ตฌ์ฑํ๋ฉด ์ด๋ฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
- ์์กด์ฑ ํ์ผ(package.json, package-lock.json ๋ฑ)์ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด npm install ๊ฒฐ๊ณผ๊ฐ ์บ์์ ์ ์ฅ๋๋ฏ๋ก, ๋ถํ์ํ ์ฌ์ค์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์์ค ์ฝ๋๋ง ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ ์์กด์ฑ ์ค์น ๊ณผ์ ์ ๊ฑด๋๋ฐ๊ธฐ ๋๋ฌธ์ ๋น๋ ์๋๊ฐ ํฌ๊ฒ ์ฌ๋ผ๊ฐ๋๋ค.
- CI/CD ํ์ดํ๋ผ์ธ์์๋ ์ ์ฒด์ ์ธ ๋ฐฐํฌ ์๊ฐ์ด ์งง์์ง๋ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ์บ์๋ ๋ ์ด์ด๋ฅผ ์ ์ ํ ํ์ฉํ๋ ์ ๋ต์ ์๋์ ๋ฆฌ์์ค ํจ์จ์ฑ ์ธก๋ฉด์์ ์ฒด๊ฐํ ์ ์๋ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด๋ ๋๋ค.
์ฆ, ๋ฉํฐ์คํ ์ด์ง ๋น๋๋ Next.js ํ๋ก์ ํธ๋ฟ๋ง ์๋๋ผ ๋๋ถ๋ถ Docker ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ ๊ผญ ๋์ ํด์ผ ํ ์ต์ ํ ์ ๋ต์ ๋๋ค. ์ด๋ฏธ์ง ํฌ๊ธฐ ์ ๊ฐ๊ณผ ๋ฐฐํฌ ์๋ ๊ฐ์ ์ ๋ฌผ๋ก ์ด๊ณ , ๋ณด์๊ณผ ์ธํ๋ผ ํจ์จ๊น์ง ์ฑ๊ธธ ์ ์์ผ๋๊น์.
GitHub Actions ํ๊ฒฝ์์์ Docker ์บ์ ์ ๋ต
๊ทธ๋ ๋ค๋ฉด, GitHub Actions ํ๊ฒฝ์์ Docker ์บ์๋ ์ด๋์ ์ ์ฅ๋๋ฉฐ, ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น์? ๋ํ ๋ฉํฐ์คํ ์ด์ง ๋น๋์ Docker ์บ์ ๊ฐ์ ๊ด๊ณ๋ ์ด๋ป๊ฒ ์ ๋ฆฌํ ๊น์?
GitHub Actions๋ ๋งค๋ฒ ์๋ก์ด ํด๋ฆฐ ํ๊ฒฝ์์ ์ํฌํ๋ก(Workflow)๋ฅผ ์คํํฉ๋๋ค. ๋ณด์์ฑ๊ณผ ์์ ์ฑ ์ธก๋ฉด์์๋ ๋ถ๋ช ํ ๊ฐ์ ์ด์ง๋ง, Docker ๋ ์ด์ด ์บ์(layer cache)๊ฐ ์ ์ง๋์ง ์๋๋ค๋ ํ๊ณ๋ ์์ต๋๋ค. ์ฆ, ๊ฐ์ ์ฝ๋๋ฅผ ๋ฐ๋ณตํด ๋น๋ํ๋๋ผ๋ ๋งค๋ฒ ๋ชจ๋ ๊ณผ์ ์ ์ฒ์๋ถํฐ ๋ค์ ์คํํ๋ฏ๋ก, ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ์์์ด ๋ญ๋น๋ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด GitHub Actions ํ๊ฒฝ์์๋ Docker Buildx์ actions/cache๋ฅผ ์กฐํฉํ ์บ์ ์ ๋ต์ด ๋๋ฆฌ ์ฐ์ ๋๋ค. ๋ํ, ๋ฉํฐ์คํ ์ด์ง ๋น๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์กด์ฑ ์ค์น ๋จ๊ณ์ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ๋จ๊ณ๋ฅผ ๋ช ํํ ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๋๋ถ์ Docker ์บ์๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฉํฐ์คํ ์ด์ง ๋น๋๊ฐ ์ ๊ณตํ๋ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์กด์ฑ ์ค์น์ ๋น๋ ๋จ๊ณ๋ฅผ ๋ช ํํ ๋ถ๋ฆฌํด ์บ์ ์ต์ ํ๊ฐ ๋์ฑ ์ฌ์์ง๋๋ค.
- ์ต์ข ์ด๋ฏธ์ง๋ ๋น๋ ์ฐ์ถ๋ฌผ๋ง ํฌํจํ๋ฏ๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
- Docker Buildx๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์คํ ์ด์ง(stage) ๋ณ๋ก ์บ์๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- CI/CD ํ์ดํ๋ผ์ธ ๋ด์์ ์บ์ ์ฌ์ฌ์ฉ ์ ๋ต์ ๋์ฑ ๋ช ํํ๊ณ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ 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 ๋ฉํฐ์คํ ์ด์ง ๋น๋, ๊ทธ๋ฆฌ๊ณ ํจ๊ณผ์ ์ธ ์บ์ ์ ๋ต์ ์กฐํฉ์ด ์ฌ๋ฌ๋ถ์ ์๋น์ค๋ฅผ ํ ๋จ๊ณ ๋ ๋์ ์์ค์ผ๋ก ๋์ด์ฌ๋ฆด ๊ฒ์ ๋๋ค.