nextjs/웹사이트 만들기

로컬 호스트 프론트와 백 서버 동시 실행 설정

lamarcK 2025. 4. 16. 11:46
**Concurrently를 통한 동시 실행
// package.json
{
  "scripts": {
    "dev": "concurrently \"npm run server\" \"npm run client\"",
    "server": "node server.cjs",
    "client": "vite"
  }
}

concurrently: 여러 명령어를 동시에 실행하게 해주는 도구
npm run dev 하나로 서버와 클라이언트를 동시에 실행

 

**실행 프로세스
npm run dev
  ├─> npm run server (3001 포트)
  └─> npm run client (5173 포트)
**서버 (server.cjs)
const express = require('express');
const app = express();

app.listen(3001, () => {
  console.log('서버가 3001 포트에서 실행중입니다');
});
**클라이언트 (Vite)
// vite.config.js
export default defineConfig({
  plugins: [react()],
  server: {
    host: true,
    port: 5173
  }
})
**전체 작동 흐름
[실행] npm run dev
  │
  ├─[서버] localhost:3001
  │   └─> API 요청 처리
  │
  └─[클라이언트] localhost:5173
      └─> React 애플리케이션 제공
통신 구조
[브라우저] → localhost:5173 (React 앱)
    ↓
[API 요청] → localhost:3001 (Express 서버)
    ↓
[데이터베이스]

이것이 가능한 이유:

  • concurrently가 두 프로세스를 병렬로 실행
  • 각각 다른 포트를 사용하여 충돌 방지
  • Vite의 host: true로 외부 접근 허용
  • 서버와 클라이언트가 독립적으로 작동

장점:

  • 개발 환경에서 한 번에 모든 것을 실행
  • 서버와 클라이언트 코드 동시 수정 가능
  • 실시간 변경 사항 확인 가능
  • Docker에서도 동일하게 작동

**기본 Vite 설정 (이전)
export default defineConfig({
  plugins: [react()]
})
  • 기본적으로 localhost에서만 접근 가능
  • 외부 접속 차단
  • 개발 서버는 localhost에서만 실행
**새로운 서버 설정의 각 옵션 설명
export default defineConfig({
  plugins: [react()],
  server: {
    host: true,     // ⭐ 핵심 설정
    port: 5173,     
    watch: {
      usePolling: true
    }
  }
})

각 설정의 역할:

  • host: true
    • 외부 IP에서의 접근을 허용
    • 네트워크의 다른 기기에서도 접속 가능
    • Docker 컨테이너 외부에서도 접속 가능
    • localhost 제한을 해제
  • port: 5173
    • Vite 개발 서버의 포트 지정
    • 명시적으로 포트 설정
    • Docker와 로컬 환경에서 동일한 포트 사용
  • watch.usePolling: true
    • Docker에서 파일 변경 감지를 위한 설정
    • 로컬 환경에서는 큰 영향 없음
각 설정의 역할:

host: true

외부 IP에서의 접근을 허용
네트워크의 다른 기기에서도 접속 가능
Docker 컨테이너 외부에서도 접속 가능
localhost 제한을 해제
port: 5173

Vite 개발 서버의 포트 지정
명시적으로 포트 설정
Docker와 로컬 환경에서 동일한 포트 사용
watch.usePolling: true

Docker에서 파일 변경 감지를 위한 설정
로컬 환경에서는 큰 영향 없음