ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹호스팅하기 (2) - vercel + react 배포하기
    서비스 배포 2024. 5. 23. 16:04
    728x90

    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

    https://velog.io/@codns1223/Etc-Vercel%EB%A1%9C-React-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

     

    [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
Designed by Tistory.