2024.11.08
๋ชจ๋…ธ๋ ˆํฌ-ํ™˜๊ฒฝ์—์„œ-docker-ํ™œ์šฉํ•˜๊ธฐ-posts-hits

๐Ÿณ ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ์—์„œ docker ํ™œ์šฉํ•˜๊ธฐ

  • ๊ฐ์ž์˜ ์„ฑ์žฅ์„ ์œ„ํ•ด ์ตœ๊ทผ ์‚ฌ๋‚ด ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊ฐ์ž ์ฃผ์ œ๋ฅผ ์ •ํ•ด ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์–ด์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ๊ทธ ์ค‘ ์ œ๊ฐ€ ์ž‘์„ฑํ•œ ๊ธ€๋กœ docker์™€ nextjs์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ด…๋‹ˆ๋‹ค.

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

๊ธฐ์กด์˜ ์„œ๋น„์Šค๋“ค์€ ์ฐจ๋ก€์ฐจ๋ก€ migration์„ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, ์ตœ๊ทผ ์‹ ๊ทœ ์ถœ์‹œํ•œ ์ธํฌํฌ๋งค๋‹ˆ์ €๋ฅผ ๋น„๋กฏํ•ด ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋…ธ๋ ˆํฌ ๋‚ด์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ์ค‘์ธ๋ฐ์š”, ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ ๋‚ด์—์„œ next.js ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ ๊ทœ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋ฐฐ์šด ์ ๊ณผ, docker๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์„ ํ†ตํ•ด ๋‹ค์Œ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ์–ด์š”.

  • next.js์˜ standalone ์˜ต์…˜
  • next.js์—์„œ env ํŒŒ์ผ์˜ ์ ์šฉ ๊ณผ์ •
  • standalone ์˜ต์…˜๊ณผ docker๋ฅผ ํ™œ์šฉํ•ด ๊ฒฝ๋Ÿ‰ํ™”๋œ next.js ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

1. next.js standalone

๋ชจ๋…ธ๋ ˆํฌ์˜ ๊ตฌ์ถ•์— ์žˆ์–ด turbo๋ฅผ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ์—์„œ docker๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์ด์—ˆ๊ธฐ์— ๊ฐ€์žฅ ๋จผ์ € turbo ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉฐ docker๋ฅผ ๊ฐ™์ด ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ์š”, ์ด ๊ณผ์ •์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ๊ตฌ๋ฅผ ์ฝ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

This Dockerfile is written for a Next.js app that is using the standalone output mode.

๋„๋Œ€์ฒด ์–ด๋–ค ์˜ต์…˜์ด๊ธฐ์— turbo ๋ฌธ์„œ์—์„œ๋„ ์ด๋ ‡๊ฒŒ ์†Œ๊ฐœ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๊ฑด์ง€ ๊ถ๊ธˆํ•ด์ ธ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

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

standalone ์˜ต์…˜์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ(๋…๋ฆฝ์ , ๋…๋ฆฝํ˜•) ์ถ”๊ฐ€์ ์ธ ์ข…์†์„ฑ ์„ค์น˜ ์—†์ด ๋‹จ๋…์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. .next/standalone ํด๋” ๋‚ด์— ์ตœ์†Œํ•œ์˜ ์ข…์†์„ฑ๊ณผ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ server.js ํŒŒ์ผ์ด ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

description of nextjs standlone build result

์ด๋ ‡๊ฒŒ ๊ตฌ๋™๋˜๋Š” ์ตœ์†Œํ•œ์˜ ์„œ๋ฒ„๋Š” CDN์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋Š” public, .next/static ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  production ๋ฐฐํฌ์— ๊ผญ ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค๋งŒ ํฌํ•จ์‹œํ‚ต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. docker๋ฅผ ํ™œ์šฉํ•ด next.js ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

standalone ์˜ต์…˜์— ๋Œ€ํ•ด ์•Œ์•˜์œผ๋‹ˆ ์ด์ œ ๋” ๊ฐ€๋ฒผ์šด docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ณ  ๋น ๋ฅธ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๋จผ์ € docker์˜ ์ฃผ์š” ๊ฐœ๋…์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณผ๊ฒŒ์š”.

์ปจํ…Œ์ด๋„ˆ

  • docker์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ฐœ๋…
  • ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์„ค์ •์ด๋‚˜ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ์ƒ์ž์ฒ˜๋Ÿผ ๋ฌถ์€ ๊ฒƒ

์ด๋ฏธ์ง€

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

Dockerfile

  • ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ

๋ณธ๊ฒฉ์ ์ธ Dockerfile ์ž‘์„ฑ์— ์•ž์„œ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • pnpm, turbo๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋…ธ๋ ˆํฌ
  • services ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์กด์žฌ

์ด์ œ ์™„์„ฑ๋œ Dockerfile์„ ๋ณด์—ฌ๋“œ๋ฆฐ ๋’ค ๊ฐ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์ฐจ๋ก€์ฐจ๋ก€ ์„ค๋ช…ํ• ๊ฒŒ์š”.

# 1. ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์„ค์ • (node์™€ Alpine ๊ธฐ๋ฐ˜)
FROM node:18-alpine AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="${PNPM_HOME}:${PATH}"
 
# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ (glibc ํ˜ธํ™˜ ํฌํ•จ)
RUN apk update && apk add --no-cache libc6-compat git openssh
 
# SSH key ์„ค์ •
ARG SSH_PRIVATE_KEY
RUN mkdir ~/.ssh/
RUN echo "${SSH_PRIVATE_KEY}" | tee ~/.ssh/id_rsa
RUN chmod 600 ~/.ssh/id_rsa
 
# private repository ์„ค์น˜๋ฅผ ์œ„ํ•œ Github Authorization
RUN ssh-keyscan github.com >> ~/.ssh/known_hosts
 
# 2. ๋นŒ๋“œ ๋‹จ๊ณ„ ์„ค์ •
FROM base AS builder
 
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV
ARG STAGE
ENV STAGE=$STAGE
 
# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app
 
# ์ „์ฒด ์ฝ”๋“œ ๋ณต์‚ฌ ํ›„ pruned ์ž‘์—…
COPY . .
 
# STAGE ๊ฐ’์— ๋”ฐ๋ผ .env ํŒŒ์ผ์„ ๋‹ค๋ฅด๊ฒŒ ๋ณต์‚ฌ
RUN if [ "$STAGE" = "development" ]; then \
		echo "Using development environment" && \
		cp services/ํ”„๋กœ์ ํŠธ๋ช…/.env.development services/ํ”„๋กœ์ ํŠธ๋ช…/.env.local; \
	elif [ "$STAGE" = "production" ]; then \
		echo "Using production environment" && \
		cp services/ํ”„๋กœ์ ํŠธ๋ช…/.env.production services/ํ”„๋กœ์ ํŠธ๋ช…/.env.local; \
	else \
		echo "Invalid STAGE value: $STAGE" && exit 1; \
	fi
 
# pnpm๊ณผ turbo ์„ค์น˜
RUN npm install -g pnpm turbo
 
# ๋ชจ๋…ธ๋ ˆํฌ์˜ ๋ฃจํŠธ package.json๊ณผ lock ํŒŒ์ผ ๋ณต์‚ฌ
COPY package.json pnpm-lock.yaml ./
 
# ์˜์กด์„ฑ ์„ค์น˜ (๋ฃจํŠธ ์˜์กด์„ฑ ํฌํ•จ)
RUN pnpm install --frozen-lockfile
 
# ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ๋‚จ๊ธฐ๊ณ  prune ์ˆ˜ํ–‰
RUN turbo prune ํ”„๋กœ์ ํŠธ๋ช… --docker
 
# 3. ์˜์กด์„ฑ ์„ค์น˜ ๋‹จ๊ณ„
FROM base AS installer
 
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV
ARG STAGE
ENV STAGE=$STAGE
 
# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app
 
# pruned ์˜์กด์„ฑ ๋ณต์‚ฌ ๋ฐ ์„ค์น˜
COPY --from=builder /app/out/json/ .
RUN npm install -g pnpm turbo
RUN pnpm install --frozen-lockfile
 
# ํ”„๋กœ์ ํŠธ ์ „์ฒด ๋ณต์‚ฌ ๋ฐ ๋นŒ๋“œ
COPY --from=builder /app/out/full/ .
RUN pnpm turbo run build --filter=ํ”„๋กœ์ ํŠธ๋ช…...
 
# 4. ์ตœ์ข… ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„ ์„ค์ •
FROM base AS runner
 
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV
ARG STAGE
ENV STAGE=$STAGE
 
# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
 
# ํ”„๋กœ์ ํŠธ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค ๋ณต์‚ฌ
COPY --from=installer --chown=nextjs:nodejs /app/services/ํ”„๋กœ์ ํŠธ๋ช…/.next/standalone ./
COPY --from=installer --chown=nextjs:nodejs /app/services/ํ”„๋กœ์ ํŠธ๋ช…/.next/static ./services/ํ”„๋กœ์ ํŠธ๋ช…/.next/static
COPY --from=installer --chown=nextjs:nodejs /app/services/ํ”„๋กœ์ ํŠธ๋ช…/public ./services/ํ”„๋กœ์ ํŠธ๋ช…/public
 
# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
EXPOSE 80
ENV PORT=80
 
CMD ["node", "services/ํ”„๋กœ์ ํŠธ๋ช…/server.js"]

1. base ๋‹จ๊ณ„

์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ์„ค์ •๊ณผ SSH ํ‚ค๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ ์„ค์ •

๊ฒฝ๋Ÿ‰์˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด Alpine์„ ํ™œ์šฉํ•ด ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ์„ค์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•˜๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ์„ค์น˜๋ฅผ ์œ„ํ•ด SSH ํ‚ค๋ฅผ ํ™œ์šฉํ•ด ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

2. builder ๋‹จ๊ณ„

ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋งž์ถฐ ์„ค์ • ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ณ  turbo prune์œผ๋กœ ์ตœ์ ํ™”

ํ•ด๋‹น ๋‹จ๊ณ„์—์„œ๋Š” STAGE ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. next.js์—์„œ๋Š” .env.$(NODE_ENV).local > .env.local > .env.${NODE_ENV} ์ˆœ์„œ๋กœ env ๋ณ€์ˆ˜๋“ค์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์›ํ•˜๋Š” env ํŒŒ์ผ์„ env.local ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค (์ถœ์ฒ˜ : Next.js ๊ณต์‹๋ฌธ์„œ)

turbo prune ํ”„๋กœ์ ํŠธ๋ช… ๋ช…๋ น์–ด๋Š” ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ๊ผญ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ๋‚จ๊ธฐ๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜์—ฌ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. (์ถœ์ฒ˜ : turbo ๊ณต์‹๋ฌธ์„œ)

3. installer ๋‹จ๊ณ„

์ตœ์ ํ™”๋œ ์˜์กด์„ฑ ์„ค์น˜ ๋ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

ํ•ด๋‹น ๋‹จ๊ณ„์—์„œ๋Š” builder ๋‹จ๊ณ„์—์„œ ์ตœ์ ํ™”๋œ ์˜์กด์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

4. runner ๋‹จ๊ณ„

์ตœ์†Œํ•œ์˜ ํŒŒ์ผ๋งŒ ๋ณต์‚ฌํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

๋งˆ์ง€๋ง‰์œผ๋กœ ์ตœ์ข… ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋ฉฐ, ์ตœ์ ํ™”๋œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ standalone ์˜ต์…˜์€ .next/static/, public ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ 80๋ฒˆ ํฌํŠธ๋ฅผ ์—ด์–ด ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด standalone ์˜ต์…˜์„ ์ ์šฉํ•ด ๋นŒ๋“œ๋œ next.js ์ด๋ฏธ์ง€์˜ ์šฉ๋Ÿ‰์€, ์˜ต์…˜์„ ์ ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์™€ ์–ผ๋งˆ๋‚˜ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

nextjs standalone config size compare

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•ด ๋” ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด next.js ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


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

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

FE engineer ๊น€ํ•™์žฌ