👩🏻🚀 moonshot 👩🏻🚀 사이트의 프론트엔드를 배포하면서
React 프로젝트를 배포하고, 커스텀 도메인을 붙이고, 개발(테스트)환경과 운영 환경을 분리하여 배포하기까지의 과정을 경험할 수 있었습니다.
위 시리즈들을 통해 프론트엔드 배포를 위한 A-Z의 전반적인 과정들을 기록하면서 제가 겪었던 경험들을 공유하고자 합니다.
vercel 배포 프로세스에 대한 설명에 앞서, 프론트엔드 배포에 대한 짧은 정보들을 요약했습니다. 이미 프론트엔드 배포에 대해 알고 계시다면, 스킵하셔도 좋습니다😊
필자는 처음 웹을 배울 때 💭 : 배포는 다 백엔드에서 하는거 아냐?
라는 안일한 생각을 가졌던것 같습니다.
저와 비슷한 경험이 있으실 초포 개발자 분들을 위해 프론트엔드 배포에 대한 짧은 정의를 먼저 언급하자면, 아래와 같이 정리할 수 있습니다.
📌 프론트를 배포한다.
=== 사용자에게 보여지는 웹사이트에 사용자 인터페이스를 누구나 접근할수 있도록 인터넷에 공개한다.
즉, 프론트엔드를 배포하는 프론트엔드 서버는 웹 페이지를 렌더링하는 데에 필요한 HTML, CSS, JS 파일을 브라우저로 전송하는 역할을 하고,
백엔드 서버는 웹페이제 필요한 동적 데이터(API)를 생성하고 전송하는 역할을 하기 때문에
웹 사이트 배포를 위해서는 프론트엔드와 백엔드 두 방향에서 모두 배포가 필요합니다.
또한, 로컬 환경과 실제 배포 환경에서 발생하는 이슈가 다르기 때문에, 배포 환경에서의 트러블 슈팅 경험을 쌓기 위해서도 프론트엔드 배포 경험을 해보는 것이 중요하다 생각합니다.
Netlify
, Vercel
, Cloudflare
와 같은 서버리스 플랫폼 사용하기💭
Netlify
vs.Vercel
vs.Cloudflare
세 플랫폼 모두 사용 해 본 입장에서 개인적으로 느낀점들을 간략히 남겨보자면,
(1)
netlify
vsvercel
:
두 플랫폼은 상당히 유사하나, 좀 더 큰 프로젝트는 vercel이 좋을것 같다고 느꼈습니다. vercel은 하루 빌드 최대 갯수를 제한하고, nelify는 한 달 빌드의 최대 시간을 제한하기 때문입니다. (개인적 의견) / 또한 vercel은 Next.js 개발 팀에서 만든 서비스이므로, Next.js의 배포인 경우 vercel을 더 추천드립니다.
(2)
Cloudflare
:
무료로 사용이 가능하다는 장점이 있어 추천 받아 사용하였는데, 관련 자료가 vercel, netlify보다 많지 않아 꽤 어려움을 겪었습니다. 다른 플랫폼보다 부가적인 기능이(상세한 analytic 등) 많다고 느껴져 추천하나, 초보자의 경우 다른 플랫폼을 먼저 경험한 후 겪어봐도 좋을것 같습니다.
S3
+ Cloudfront
사용하기S3(Amazon Simple Storage Service)
: 객체 스토리지 서비스로, 정적 웹사이트 호스팅을 지원합니다. 데이터를 버킷이라고 불리는 리소스에 객체로 저장합니다. / S3 웹사이트 엔드포인트는 HTTPS를 지원하지 않고, 성능과 보안 강화를 위해, 그리고 빠른 전송 속도를 위해 cdn인 Cloudfront와 함께 사용합니다.
Amazon Cloudfront
: 직접 만들 수 있는 CDN(Content Delivery Network) 서비스로, 세계 이곳저곳에 중계 서버를 놓아 웹 자원을 대신 전달하여 빠르게 데이터를 전송합니다.
🙆🏻♀️ 장점 :
* 플랫폼을 사용할 때보다 자유도가 높습니다. (세부적으로 컨트롤 할 수 있는 부분이 많아집니다)
🙅🏻♀️ 단점 :
* SSR 활용이 어렵습니다. (ex. Next.js S3+Cloudfront로 배포 -> SSG 결과물 배포)
-> SSR은 내부적으로 인스턴스를 동적으로 만들기 때문에, 정적 웹사이트 호스팅인 S3+Cloudfront 사용을 할 수 없는것!
Amplify
사용하기Amplify
:cloudflare
를 사용해 배포 했습니다. 그러나 앞서 언급했듯이 cloudflare를 사용해 react를 배포한 자료들이 비교적 많이 없었고, 그 결과 지속적인 서버와의 연결 불안정 이슈가 있었지만 이를 해결하지 못했습니다.vercel
로 재배포 하게 되었습니다.React
| Typescript
| yarn
| vite
⓵
step 1
: 가입하고, 깃허브 연동해서 레포지토리 선택하기
Import
버튼을 누르면, 다음 단계로 넘어갑니다⓶
step 2
: 배포할 project 설정하기
Project Name
: 배포 될 프로젝트의 이름을 지정하는 곳.project name
.vercel.app)Framework Preset
: 프로젝트를 빌드, 배포 하는데 사용할 프레임워크 또는 런타임 환경(ex. CRA, vite, Vue, Next.js...).Roote Directory
: 프로젝트의 루트 디렉토리(모든 파일들의 최상위 폴더).Build and Output Settings
* Build Command
: 프로젝트를 빌드하기 위해 실행 되는 커맨드
Output Directry
: 빌드 결과물(빌드 된 파일들)이 생성되는 위치Install Command
: dependecy들을 설치하기 위해 실행 되는 커맨드Environment Variables
* 빌드 및 배포 시에 필요한 환경 변수들(api base url, rest api key, redirect uri 등)
⓷
step 3
: 배포 끝!
SPA 프로젝트를 배포한 뒤 동적으로 라우팅 접근시, (즉 라우트 이동 후 중간에 새로고침하거나, 하위 url(ex. moonshot/dashboard)로 접근했을 경우 vercel에서는 다음과 같은 404 Not_Found 에러를 뱉습니다.
SPA의 라우팅 처리가 아닌 방식으로 해당 리소스를 찾으려고 하기 때문에 404 에러가 발생하게 됩니다.
이는 vercel 문서의 rewrites 부분을 참고하여 해결할수 있습니다.
vercel.json
이라는 배포 설정 파일을 만듭니다. {
"routes": [{ "src": "/[^.]+", "dest": "/", "status": 200 }]
}
해당 글에서는 가장 쉽게 프론트엔드 프로젝트를 배포할 수 있는, Vercel
플랫폼을 활용 해 React-Vite 환경을 배포하는 기본 과정에 대해 다뤘습니다.
Vercel은 이 외에도 커스텀 도메인 설정, preview-production 환경 분리 등 다양하게 활용할 수 있는 기능들이 다수 있습니다.
이어지는 글에서 Vercel을 보다 유연하게 다룰 수 있는 방안들에 대해 다뤄보겠습니다.