개발한 서비스를 사용자가 이용할 수 있도록 하는 것을 배포라고 한다.
사용자들에게 localhost:3000의 주소로 들어오라고 할 수는 없기 때문에 사용자들에게 Client를 어떻게 제공할지 그리고 Client를 받은 사용자들이 서비스를 이용하기 위한 요청을 처리할 Server를 어떻게 제공할 것인지 Server의 데이터를 저장하고 제공할 Database는 어떻게 제공할 것인지 생각해 봐야 한다.
이때, AWS에서 제공하는 서비스인 S3라는 서비스를 통해 사용자들에게 Client를 제공할 수 있다.
로컬 환경에서는 자체 개발 서버 (예, create-react-app)를 이용해서 클라이언트 앱을 실행시키는 것이 보통이다. 그럼, 클라이언트를 위해서 EC2 인스턴스를 사용해야 하는 것도 아니다. 클라이언트 앱을 정적 파일로 빌드하여 제공한다. 따라서 S3를 이용해서 클라이언트를 배포하게 된다.
이때 필요한 것이 빌드다.
빌드란 쉽게 말해서 불필요한 데이터를 없애고, 여러 갈래로 퍼져있는 데이터들을 통합/ 압축하여 배포하기에 최적화된 상태를 만드는 것이다. 빌드 과정을 진행하기 전과 비교했을 때 데이터의 용량이 줄어들고, 웹 사이트의 로딩 속도가 빨라진다는 장점이 생긴다.
하지만 일반적인 의미의 빌드는, 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미한다. 웹 앱에서와같이 HTML, CSS, JS의 형태로 배포하는 경우는 조금 다르다. 웹 앱은 배포 가능한 정적 파일(static files)의 형태로 만들어 줘야 한다.
asset 자체가 정적인 경우, 있는 그대로 배포하면 된다. React의 경우 npm run build와 같은 명령을 사용해서, 정적 파일 형태의 결과물을 만들어 낸 후 배포하면 된다. 사용하고 있는 환경에 따라 빌드 과정은 다를 수 있다.
S3로 사용자들에게 Client Application을 제공하고 있는데, 사용자가 지구 반대편에 있을 때 빠르게 서비스를 제공하는 방법으로, AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터 센터에 데이터를 분산시켜서 저장해 뒀다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 서비스를 제공한다.
사용자들이 제공받은 Client Application을 통해서 요청을 전달할 Server Application는 AWS EC2 서비스를 통해 손쉽게 서버를 구성하고 서비스를 제공할 수 있다.
AWS에서는 Database 특화 서비스인 RDS 서비스를 제공한다. AWS가 유지 보수 작업을 담당하는 RDS를 이용하여 즉시 데이터베이스를 사용하며, RDS 서비스를 이용하여 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포할 수 있다.
google 사이트에 접속하기 위해서 172.217.161.228이라는 IP 주소를 입력하지 않고 www.google.com과 같은 도메인 주소를 이용해서 접근해왔다.
처음 배포된 여러분의 서비스는 도메인 주소를 통해 접근하려면 S3, EC2를 이용해서 배포된 서비스는 IP 주소 혹은 AWS에서 제공하는 여러분의 서비스와는 전혀 상관없는 긴 도메인 주소를 통해 접근하게 된다.
TodoList 서비스를 제공한다고 했을 때, www.todolist.ap-northeast-2.compute.amazonaws.com 주소보다는 www.todolist.com 주소 일 때,
직관적으로 서비스를 이해할 수 있고 짧은 주소를 통해 서비스에 접근할 수 있다.
이럴때, AWS에서 제공하는 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근하도록 할 수 있다.