-
웹호스팅하기 (2) - vercel + react 배포하기서비스 배포 2024. 5. 23. 16:04728x90
https://vercel.com/guides/deploying-react-with-vercel
How to Create & Deploy a React App to Vercel
Learn how to create a React app and deploy it live with Vercel in only a few steps.
vercel.com
[Etc] Vercel로 React 프로젝트 배포하기
Vercel은 Next.js 개발 팀에서 만든 프론트엔드 배포 자동화할 수 있게 빌드,배포,호스팅 서비스를 제공하는 호스팅 사이트이다. 비슷한 서비스로는 Netlify가 있다.❗Vercel은 GitHub, GitLab, Bitbucket 등의
velog.io
* CRA(create-react-app)으로 프로젝트 생성하기
create-react-app vercel-react-deploy-tutorial cd vercel-react-deploy-tutorial
CRA 프레임워크로 리액트 프로젝트를 생성한다.
npm start
리액트 웹사이트를 브라우저에서 실행한다.
기본적인 CRA 초기화면이다.
import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( // <React.StrictMode> <App /> // </React.StrictMode> ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals();
src > index.js 파일을 위와 같이 수정한다. React.StrictMode 컴포넌트는 초기 렌더링을 2번하므로 주석처리한다.
* vercel 호스팅 서버와 연동하고 API 테스트하기 (로컬환경)
import React, { useState, useEffect } from 'react' function App() { const [user, setUser] = useState(null) useEffect(() => { const BASE_URL = 'https://vercel-express-deploy-tutorial.vercel.app' fetch(BASE_URL) .then(res => res.text()) .then(result => setUser(result)) }) return ( <div className="App"> {user? user : "로딩중..."} </div> ) } export default App;
src > App.js 파일을 위와 같이 수정한다.
vercel 에 호스팅된 서버에서 응답이 잘 전송된 것을 확인할 수 있다.
import React, { useState, useEffect } from 'react' function App() { const [user, setUser] = useState(null) useEffect(() => { const BASE_URL = 'https://vercel-express-deploy-tutorial.vercel.app' fetch(`${BASE_URL}/user`, { headers: { 'Content-Type': 'application/json' }, method: 'POST', body: JSON.stringify({ name: "react", email: "react@gmail.com", userId: "react", password: "react123@" }) }) .then(res => res.json()) .then(result => { console.log(result) setUser(result.newUser) }) }, []) return ( <div className="App"> {user ? ( <> <h1>회원정보</h1> <p>이름: {user.name}</p> <p>연락처: {user.email}</p> <p>아이디: {user.userId}</p> </> ) : "사용자정보 조회중..."} </div> ); } export default App;
src > App.js 파일을 위와 같이 수정한다.
useEffect(() => { const BASE_URL = 'https://vercel-express-deploy-tutorial.vercel.app' fetch(`${BASE_URL}/user`, { headers: { 'Content-Type': 'application/json' }, method: 'POST', body: JSON.stringify({ name: "react", email: "react@gmail.com", userId: "react", password: "react123@" }) }) .then(res => res.json()) .then(result => { console.log(result) setUser(result.newUser) }) }, [])
useEffect 안에서 초기 렌더링시 회원가입을 진행한다.
vercel 에 호스팅한 서버에서 회원가입후 성공적으로 사용자 정보를 잘 전송하고 있다.
MongoDB Atlas 에서도 리액트에서 요청한 회원정보가 잘 저장된 것을 확인할 수 있다.
* 리액트 프로젝트에 환경변수 등록하기
.env
.gitignore 에 .env 파일은 버전관리에서 제외시킨다. 왜냐하면 추후 vercel 에 리액트 프로젝트를 배포할때는 환경변수를 vercel 설정에서 등록해서 사용할 예정이기 때문이다.
REACT_APP_BASE_URL=https://vercel-express-deploy-tutorial.vercel.app
package.json 파일과 동일한 위치에 .env 파일을 생성하고 위와 같이 작성한다.
import React, { useState, useEffect } from 'react' function App() { const [user, setUser] = useState(null) useEffect(() => { console.log('서버주소: ', process.env.REACT_APP_BASE_URL) fetch(`${process.env.REACT_APP_BASE_URL}/user`, { headers: { 'Content-Type': 'application/json' }, method: 'POST', body: JSON.stringify({ name: "react", email: "react@gmail.com", userId: "react", password: "react123@" }) }) .then(res => res.json()) .then(result => { console.log(result) setUser(result.newUser) }) }, []) return ( <div className="App"> {user ? ( <> <h1>회원정보</h1> <p>이름: {user.name}</p> <p>연락처: {user.email}</p> <p>아이디: {user.userId}</p> </> ) : "사용자정보 조회중..."} </div> ); } export default App;
src > App.js 파일을 위와 같이 수정한다.
fetch(`${process.env.REACT_APP_BASE_URL}/user`, { ...중략 })
이제 vercel 에 호스팅된 서버주소는 환경변수에서 조회하도록 한다.
npm start
환경변수가 적용되려면 리액트를 재시작해야 한다.
서버주소를 환경변수로 설정하고, 호스팅 서버에서 회원가입에 성공하였음을 확인할 수 있다.
물론 MongoDB Atlas 에도 회원정보가 잘 저장되었다.
* 깃허브에 리액트 프로젝트 업로드하기
git status git add . git commit -am"초기 커밋" git remote add origin https://github.com/sssssqew/vercel-react-deploy-tutorial.git git push origin main
깃허브에 리액트 프로젝트를 업로드한다.
* vercel 에 리액트 프로젝트 배포하기
대쉬보드에서 우측상단의 Add New 버튼을 클릭한다.
깃허브에 푸쉬한 리액트 프로젝트의 저장소를 import 버튼을 클릭하여 가져온다.
ProjectName, Framework Preset, Root Directory 는 그대로 둔다.
Build Command, Output Directory, Install Command 도 그대로 둔다.
REACT_APP_BASE_URL=https://vercel-express-deploy-tutorial.vercel.app
.env 파일을 참고하여 아래와 같이 vercel 에 배포할때 환경변수를 설정한다.
환경변수 설정하기 환경변수 설정을 마치면 Deploy 버튼을 클릭한다.
배포중 빌드와 배포가 자동으로 진행된다.
호스팅에 성공하면 위와 같은 화면이 나온다.
* vercel 호스팅 서버와 연동하고 API 테스트하기 (vercel)
대쉬보드로 이동하고 호스팅 주소를 클릭한다.
위와 같이 에러가 발생한다. 서버주소가 undefined 인 것으로 보아 환경변수가 제대로 등록이 되지 않은것 같다.
해당 프로젝트의 Settings -> Environment Variables 메뉴로 이동하고, 환경변수에 서버주소를 다시 등록한다.
git status git add . git commit -am"환경변수 등록 2" git push origin main
코드를 아무거나 수정하고 깃허브에 푸쉬하여 vercel 에서 서버를 재시작한다.
배포가 완료되었음을 확인한다.
MongoDB Atlas 에서 이메일이 중복되는 회원(react)을 삭제하고, 다시 vercel 에 호스팅된 리액트 사이트 주소를 새로고침하면 정상적으로 회원가입에 성공하고, 응답을 보내주는 것을 확인할 수 있다.
물론 MongoDB Atlas 에도 회원정보가 잘 저장되었다.
동일한 회원정보로 재가입을 시도하면 Bad Request(400) 에러가 발생한다.
* cors 에러가 난 경우 vercel 에 cors 설정하기
https://vercel.com/guides/how-to-enable-cors
How to Enable CORS on Vercel
Learn how to enable CORS in a single Node.js Serverless Function, in a Next.js app, and using vercel.json.
vercel.com
해당 자료를 참고하여 각 프로젝트에 따라 cors 설정을 하도록 한다.
728x90'서비스 배포' 카테고리의 다른 글
웹 호스팅하기 (4) - vercel + react + esbuild 배포하기 (2) (0) 2024.05.28 웹호스팅하기 (3) - vercel + react + esbuild 배포하기 (0) 2024.05.24 웹호스팅하기 (1) - vercel + express.js + mongodb 배포하기 (1) 2024.05.22