개발한 서비스 (클라이언트 & 서버)의 배포전략에 대해서
로컬 환경에서 개발한 서비스가 이제 많은 사용자들에게 공개될 때가 왔다.
그렇다면, 어떻게 사용자들이 우리의 서비스를 원활히 이용하도록 잘 배포할 수 있을까?
크게 클라이언트 앱, 서버, 데이터베이스를 어떻게 사용자에게 제공할지 고민이 필요하다.
클라이언트 배포
클라이언트 앱을 통해서 사용자는 배포한 서비스를 이용할 수 있다. 사용자가 요청한 정보나 데이터가 클라이언트 앱을 통해서 화면에 그려진다.
만약 클라이언트를 배포하고자 한다면, AWS에서 제공하는 S3 서비스를 이용할 수 있다. (Netlify, Vercel같은 선택지도 있다.)
클라이언트 배포에 EC2를 사용하는 것은 어떠할까?
🫓 클라이언트 앱은 정적 파일로 빌드하여 배포해야 하기에 EC2는 적합하지 않다. S3를 이용하도록 하자.클라이언트 앱(정적)은 불필요한 데이터를 없애고 데이터를 통합하고 압축하여 배포하기에 적합하게 최적화 하는 작업인 빌드가 필요하다.
빌드를 통해서 용량을 줄이고 속도를 빠르게 하여 사용자의 경험을 극대화한다.
또한 빌드를 통해서 html, js, css를 배포가능한 정적인 파일로 변환한다. (소스 코드를 실행이 가능한 번들로 변환한다.)
🥪 사용 환경에 따라서 빌드하는 과정은 다를 수 있다.
- S3를 이용하여 배포를 할 때, 만약 아주 먼 거리의 사용자에게도 서비스를 원활하게(빠른 속도로) 제공하고자 한다면, AWS에서 제공하는 CDN(Contents Delivery Network) 서비스인 AWS CloudFront를 이용할 수 있다.
- 🥯 AWS CloudFront는 데이터를 전세계 각지의 AWS 데이터 센터에 저장한 뒤, 사용자가 배포된 서비스를 요청하면 해당 데이터를 가지는 가장 가까운 지역의 데이터 센터에서 해당 사용자에게 데이터를 제공한다.
- 또한, SPA 앱을 배포할 때는 라우팅에 문제가 있는데, SPA의 특성상 클라이언트 로직 내부에서 라우팅을 하기에 서버에서는 어떤 루트로 라우팅이 되어있는지 파악할 길이 없다.
- 때문에, 그냥 배포를 해버리면 웹사이트의 렌딩페이지를 제외한 다른 페이지에서 404 Not Found를 마주하게 될 것이다.
- 이 문제를 해결하기위해 클라이언트에서 404페이지를 받아 다시 라우팅을 해주는 등 리다이렉트 설정을 해야한다.
> netlify를 사용해 배포한다면, 리다이렉트를 위해서 netlify의 공식문서를 확인할 수 있다.
https://docs.netlify.com/routing/redirects/#syntax-for-the-redirects-file
Redirects and rewrites
Manage traffic to your site by defining redirect or rewrite rules in a _redirects file or a netlify.toml file.
docs.netlify.com
> cra 공식 문서에서도 관련 문제에 대해서 다루고 있다.
https://create-react-app.dev/docs/deployment/#serving-apps-with-client-side-routing
Deployment | Create React App
npm run build creates a build directory with a production build of your app. Set up your favorite HTTP server so that a visitor to your site is served index.html, and requests to static paths like /static/js/main..js are served with the contents of the /st
create-react-app.dev
> 혹은 서버에서 모든 url 요청에 대해서 index.html로 매핑될 수 있도록 설정해서 이 문제를 해결할 수 있다.
서버와 데이터베이스 배포
사용자들이 클라이언트 앱을 통해 데이터를 요청하면, 서버는 이에 적절한 응답을 해줘 클라이언트 앱에 요청한 데이터를 전달해야 한다.
또한, 데이터가 저장된 데이터 베이스가 서버와 연결되어 정보를 적절히 받아올 수 있어야 한다.
서버를 배포하기 위한 가장 보편화된 선택지는 AWS EC2이다.
EC2를 통해서 손쉽게 서버를 구성하고, 가상의 PC인 EC2를 빌려서 안정적으로 서버 코드가 구동하도록 한다.
🌮 서버는 언제든지 사용자의 요청에 응답할 수 있도록 항상 켜져있어야 하기 때문이다.AWS에서 EC2를 사용하여 서버를 서비스하고 있다면, RDS를 사용하여 데이터베이스를 배포하는 것이 좋다.
🍕 RDS는 AWS에서 제공하는 관계형 데이터베이스 특화 서비스이다.
🥓 RDS를 이용하여 EC2로 배포된 서버의 데이터를 저장하고 제공하는 데이터베이스를 배포할 수 있다.RDS는 AWS가 데이터베이스의 유지보수를 담당해주기에 편리하게 즉시 데이터베이스를 사용할 수 있다.
- 🍛 S3나 EC2를 통해 배포된 서비스는 AWS에서 제공하는 도메인을 통해서 접근할 수 있다. (이 도메인은 서비스와 전혀 관련없는 긴 이름이다)
- 🍣 AWS에서 제공하는 Route 53 서비스를 사용하면, 서비스와 연관된 직관적인 이름의 도메인을 통해서 배포한 서비스에 접근하도록 할 수 있다.
> 서버를 배포하고 나서 사용량에 따라 요금이 발생할 수 있으므로, 이에 주의해야 한다.
> 또한, AWS 계정이 해킹되면 엄청난 청구서가 메일로 올지 모르니, 보안에 주의하도록 하자.