출시·고도화 중
React 안내서 · 6/6
Vite로 만든 React 앱은 빌드하면 HTML, JavaScript, CSS로 이루어진 정적 파일이 됩니다. 따라서 Node.js 서버 없이도 정적 호스팅이나 CDN, nginx 같은 웹 서버에 올려 서비스할 수 있습니다. 이 장에서는 프로덕션 빌드부터 호스팅 설정, 컨테이너 배포까지 다룹니다.
npm run build # tsc -b 로 타입 검사 후 vite build
npm run preview # dist 폴더를 http://localhost:4173 에서 미리 보기빌드가 끝나면 dist/ 폴더가 만들어집니다. 코드는 압축되고 사용하지 않는 코드는 제거되며, dist/assets/의 파일 이름에는 내용에 따라 달라지는 해시가 붙습니다.
dist/
├── index.html
├── vite.svg
└── assets/
├── index-B1c2D3e4.js
└── index-F5g6H7i8.cssnpm run preview는 빌드 결과를 확인하는 용도일 뿐 실제 서비스용 서버가 아닙니다. 배포 전에는 개발 모드에서만 일어나는 StrictMode 이중 실행이 사라진 상태로 앱이 잘 동작하는지 미리 보기로 확인합니다.
빌드 때는 .env.production 값이 쓰이며, --mode로 다른 환경 파일을 고를 수 있습니다. 앱을 도메인 루트가 아닌 하위 경로(예: GitHub Pages의 https://사용자.github.io/저장소/)에 올린다면 base를 지정해야 자원 경로가 올바르게 만들어집니다.
# .env.staging 을 읽어 빌드
npx vite build --mode stagingimport { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
export default defineConfig({
plugins: [react()],
base: "/my-app/",
});VITE_로 시작하는 환경 변수는 빌드 결과물에 문자열로 들어가 누구나 볼 수 있습니다. 비밀 키는 프런트엔드에 두지 말고 백엔드나 서버리스 함수에서 다룹니다.
React Router 같은 클라이언트 라우터를 쓰면 /users/42 같은 주소를 브라우저에서 바로 열거나 새로 고칠 때 서버가 그 경로의 파일을 찾지 못해 404를 돌려줍니다. 정적 파일이 없는 모든 경로에 index.html을 돌려주도록 호스팅을 설정해야 합니다.
Netlify에서는 public/_redirects 파일을 두면 빌드 결과에 그대로 복사됩니다.
/* /index.html 200Vercel에서는 프로젝트 루트의 vercel.json에 다시 쓰기 규칙을 적습니다.
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}nginx에서는 try_files로 같은 효과를 냅니다. 해시가 붙은 assets/ 파일은 내용이 바뀌면 이름도 바뀌므로 길게 캐시하고, index.html은 캐시하지 않아 새 배포가 바로 반영되게 합니다.
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-cache";
}
location /assets/ {
add_header Cache-Control "public, max-age=31536000, immutable";
}
}다단계 빌드를 쓰면 Node.js로 빌드한 결과물만 가벼운 nginx 이미지에 담을 수 있습니다. 위 nginx 설정을 nginx.conf로 저장해 함께 복사합니다.
FROM node:lts-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80docker build -t my-app .
docker run --rm -p 8080:80 my-app.dockerignore에 node_modules와 dist를 넣어 두면 빌드 문맥이 작아지고 빌드가 빨라집니다.
npm run lint와 테스트(npx vitest run, npx playwright test)를 CI에서 통과시킵니다.npm run preview로 하위 경로, 새로 고침, 이미지 경로를 확인합니다.React.lazy와 동적 import()로 화면 단위 코드 분할을 적용합니다.npm run build는 dist/에 정적 파일을 만들고, npm run preview로 미리 봅니다.base를, 클라이언트 라우팅에는 index.html 대체 경로를 설정합니다.index.html은 짧게 캐시합니다.
댓글 0개
로그인 · 로그인하면 댓글을 남길 수 있습니다.
첫 댓글을 남겨 보세요.