서버의 성능을 높이는 데는 기본적으로 두 가지 방법이 있다.
이런 기존 방식에는 문제점이 있다.
서버실을 만들면 주기적으로 관리가 필요하고 점차 관리해야 할 컴퓨터가 늘수록 투입될 인력 및 비용이 증가했다. 그리고 서버실을 만든다 해도 결국 공간이 부족해지면 더 이상 컴퓨터를 배치할 수 없는 상황에 맞닥뜨리게 된다.
이런 이유로 일부 거대 기업들은 데이터 센터라는 거대한 건물을 세우게 됐다. 그리고 데이터 센터의 유후 자원을 대여하는 서비스가 등장하기 시작했다.
서버의 자원과 공간 및 네트워크 환경 제공을 빌려서 사용하는 클라우드 컴퓨팅이 바로 이런 것이다.
데이터 센터는 서버의 자원과 공간 및 네트워크 환경을 제공해준다.(’온프레미스’ 방식) 현대의 클라우드 컴퓨팅은 이런 데이터 센터와 비슷한 역할을 하지만 물리적인 컴퓨터가 아닌 가상 컴퓨터를 대여한다는 점이 다르다. 가상화(Virtualization)기술이 발전함으로써 일어난 현상이다.
이렇게 가상컴퓨터를 대여하는 방식은 다음과 같은 장점이 있다.
단점도 있다.

AWS같은 경우는 IaaS에 가깝다.

Deployment환경과 Production환경은 다를 수 있다. 혼자 개발부터 배포까지 하는 상황이면 큰 문제가 없지만 협업을 하는 상황에서는 node 버전, 인증정보나 데이터베이스에 접근하는 엔드포인트 등이 상이할 수 있다. 따라서 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.
AWS에서 제공하는 클라우드 컴퓨팅 서비스이다.
AWS에서 빌리는 컴퓨터는 Instance라 한다.
AMI를 토대로 운영체제, CPU, RAM, 런타임 등이 구성된 가상 컴퓨터를 빌리는 것
그냥 mysql같은 데이터베이스 엔진 깔아서 쓰면 되는데 왜 이게 필요할까?

이렇게 유지보수가 편한 장점이 있다. 또한 RDS역시 다양한 데이터베이스 엔진 선택지를 제공하기 때문에 쓰던것과 달라서 고생할 상황도 자주 없을 것이다.
인터넷 공간에 데이터를 저장하는 저장소
AWS에서 사용하는 클라우드 스토리지 서비스

개발한 client, server ,database를 어떻게 배포할 수 있을까?

S3을 이용해서 사용자에게 client application을 제공할 수 있다.
클라이언트는 정적파일로 빌드하여 제공하여야 하고 따라서 S3을 이용한다.
일반적으로 빌드의 의미는 소스코드를 실행가능한 번들로 변환하는 컴파일 과정을 의미하지만 웹 앱을 배포할 때의 빌드는
이런 의미를 가진다.
asset자체가 정적인 경우는 있는 그대로 배포하면 되는데 React의 경우는 npm run build와 같은 명령을 사용해서 정적 파일 형태의 결과물을 만들어 낸 후 배포하면 된다.

CloudFront는 각지의 데이터 센터에 데이터를 분산시켜 저장해 놓고 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 데이터를 제공해 줄 수 있다.

AWS EC2서비스를 이용한다.

AWS에서는 (관계형)Database 특화 서비스인 RDS서비스를 제공하고 있고 이를 이용하여 배포할 수 있다.
배포하면 기본적으로 www.todolist.ap-northeast-2.compute.amazonaws.com 이런 주소를 가지게 되는데 이를 직관적이고 짧은 주소로 바꾸기 위해서

AWS에서 제공하는 Route 53 서비스를 이용할 수 있다.
