220v
젝무의 개발새발
220v
전체 방문자
오늘
어제
  • 분류 전체보기 (255)
    • AI (35)
      • ML, DL 학습 (30)
      • 논문 리뷰 (4)
      • 실습 및 프로젝트 (1)
    • Algorithm (145)
      • LeetCode (13)
      • 프로그래머스 (35)
      • 백준 (96)
      • 알고리즘, 문법 정리 (1)
    • Mobile, Application (17)
      • Flutter (10)
      • iOS, MacOS (7)
    • BackEnd (7)
      • Flask (1)
      • Node.js (5)
      • Spring, JSP..etc (1)
    • Web - FrontEnd (18)
      • JavaScript, JQuery, HTML, C.. (12)
      • React (6)
    • DataBase (1)
      • MySQL (1)
      • Firebase Firestore (0)
      • Supabase (0)
    • Git (1)
    • 기타 툴 및 오류 해결 (3)
    • 강의 (5)
      • Database (3)
      • 암호학 (2)
      • 알고리즘 (0)
    • 후기와 회고 (2)
    • 블로그 꾸미기 (1)
    • 일상과 이것저것 (20)
      • 맛집 (12)
      • 세상사는일 (4)
      • 도서리뷰 (1)
      • 이런저런 생각들 (잡글) (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Priority Queue
  • top-down
  • Backtracking
  • bitmasking
  • 다익스트라
  • 프로그래머스
  • 위상 정렬
  • dp
  • binary search
  • union-find
  • dfs
  • 백준
  • 오블완
  • Mathematics
  • Minimum Spanning Tree
  • two pointer
  • 구현
  • simulation
  • Greedy
  • implementation
  • Dynamic Programming
  • brute-Force
  • 티스토리챌린지
  • IMPLEMENT
  • Prefix Sum
  • BFS
  • disjoint set
  • topological sort
  • REACT
  • Lis

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
220v

젝무의 개발새발

Web - FrontEnd/React

[React/Node.js/Express] React 프로젝트 Node.js Express로 서버와 연동하기

2022. 5. 26. 18:13

Express 서버에 React 프로젝트를 합쳐서 같이 서버를 돌리고 싶고,

딱히 Express 서버와 React 간의 Data 송수신이 일어나지는 않는 상황.

라우팅만 제대로 해서 localhost:8080/couponPage 에 react 페이지를 띄우고 싶었음..

굉장히 오래 걸렸다.. 하고나니 별 거 아닌데..

그리고 나는 메인 페이지("/") 에서 react를 띄우고 싶었던 게 아니라 서브 디렉토리("/couponPage") 에 띄우고 싶었고..

Express에서도 Routing을 이미 사용하고 있으며, React에서도 react-router-dom 으로 Routing을 하고 있었기에

이것을 해결하는 과정도 필요했다.. ^ㅁ^

아무튼 시작

 

1. React 프로젝트 Build

우선 서브 디렉토리(나의 경우 /couponPage)에서 react 페이지를 띄울 생각이기에

React 프로젝트의 package.json 에다 "homepage": "/couponPage" 를 넣어 주자.

{
  "name": "milk4cup_coupon",
  "homepage": "/couponPage",	// 추가
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.4",
    "@testing-library/react": "^13.2.0",
    ...
  }
}

이런 식으로!

 

그 후에 React로 만든 것들을

$ npm run build

로 build한다. 그러면 build 폴더에 배포용 완성 파일이 뿅하고 생긴다.

이제 이 build 폴더를 Node-Express 서버의 root 폴더에 그대로 복붙 해주자.

React 프로젝트 전체를 복붙해도 사용 가능하지만,

하나의 React 프로젝트는 아무리 작은 프로젝트라도 기본적으로 수 백MB가 넘어가므로

Github 원격 저장소에 push되지 않는 경우가 발생한다.. 따라서 build폴더만 넘기도록 하자.

 

2. Node-Express 서버 단에서 Routing 처리 해주기

우선 내가 작업하는 Express 서버에서의 경우 아래와 같은 방식으로 이미 URL마다 Routing이 되어 있는 상태였다.

const A_Router = require("./routes/A");
const B_Router = require("./routes/B");
const app = express();

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");

app.use(logger("dev"));
app.use(express.json());

app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use("/", express.static(path.join(__dirname, "public")));
app.use("/couponPage", express.static(path.join(__dirname, "./build")));

app.use("/", indexRouter);
app.use("/A", A_Router);
app.use("/B", B_Router);

코딩애플 강의 페이지의 서브디렉토리에 리액트앱 발행하고 싶은 경우 를 참고하며 따라오면 될 것 같다.

Node

 

일단 cors라는 놈을 설치해 주고.. (아마.. 삽질하다가 이것저것 해보면서 깔아뒀는데 일단 없으면 오류날 것 같으니..써둠.. React와 Express간 ajax 요청을 할 때 필요한 친구인 것 같은데)

$ npm install cors

그리고 상단에 집어넣어 준다.

var cors = require('cors');
app.use(cors());

 

그런 다음 이제 라우팅.

app.use('/couponPage', express.static( path.join(__dirname, './build') ))

app.use("*", function (req, res) {
  res.sendFile(path.join(__dirname, "/build/index.html"));
});

이렇게 하면 이제 Express 서버를 켰을 때

localhost:8080/couponPage/(react 프로젝트에서의 Routing url) 로 접속하면 페이지가 잘 뜬다!

만약 오류가 난다면,

build > index.html 파일에서 js, css 파일을 불러오는 부분인

<script defer="defer" src="/couponPage/static/js/main.b77ed1f3.js"></script>
<link href="/couponPage/static/css/main.41928ca7.css" rel="stylesheet" />

이 부분의 주소 앞에 .을 붙여 보자.. ^ㅁ^

<script defer="defer" src="./couponPage/static/js/main.b77ed1f3.js"></script>
<link href="./couponPage/static/css/main.41928ca7.css" rel="stylesheet" />

 

Reference

https://codingapple.com/unit/nodejs-react-integration/

 

    'Web - FrontEnd/React' 카테고리의 다른 글
    • [React] XD 파일 React 페이지로 변환하기 (Fireblade 플러그인 사용)
    • [React] React와 Firebase Firestore 연동하여 CRUD 구현하기
    • [React] React에서 모바일, PC버전 각각 다른 페이지로 라우팅하기
    • [React] React에서 dotenv 사용 시 오류. (Module not found: Error: Can't resolve 'fs' in '/Users/~/Desktop/React/~/node_modules/dotenv/lib')
    220v
    220v
    DGU CSE 20 / Apple Developer Academy @ POSTECH 2nd Jr.Learner.

    티스토리툴바