💼🗂️📑📄📝
웹 서비스는 배포를 해야 고객들이 사용할 수 있다.
서버에 설치하거나 호스팅 서비스를 이용하여 인터넷에 공개하는 과정이 배포다.
서버라는 것은 사실 역할의 개념이다. 서버도 컴퓨터다.
개인 컴퓨터에도 서버 역할을 하는 소프트웨어를 깔고, 외부에서 특정 도메인로 접속해올 수 있도록 설정하면 그 컴퓨터는 서버가 될 수 있다.
- 웹 서버 구성: 웹 애플리케이션을 호스팅하기 위한 웹 서버를 구성한다.
- 데이터베이스 설정: 만약 웹 애플리케이션이 데이터베이스를 사용한다면, 해당 데이터베이스를 설정하고 연결한다.
과거에는 물리적인 공간과 하드웨어를 갖춘 서버실을 운용했었다. 회사가 자사의 시설에 직접 공간을 만들어 자체적으로 서버 컴퓨터를 두는 방식이었다.
이러한 방식은 온프레미스(On-premise) 방식이다.
만약 서버가 감당하지 못할 요청이 들어온다면 어떻게 해야했을까?
더 많은 컴퓨터를 제공하여 한 대가 해결할 수 있는 요청을 여러 대가 나눌 수 있다. 또한, 컴퓨터의 성능을 높이는 방식이었다.
- 주기적 관리: 서버실을 가지고 있는 단체는 서버를 관리할 인력이 필요했다.
- 공간의 한계: 물리적인 서버가 있어야 하는 공간이 필요하기 하다. 컴퓨터를 추가해야하는 상황이 생길 때, 공간의 제한이 계속해서 문제가 된다. 또한 공간의 제약때문에 서버 컴퓨터를 성능 좋은 컴퓨터로 바꿔야 할때도 문제가 된다.
클라우드는 가상화 기술을 사용하여 컴퓨터가 아닌, 가상 컴퓨터를 대여해주는 방식이다.
서버, 스토리지, 데이터베이스 등 컴퓨팅 서비스를 제공한다.
가상화 기술은 하나의 물리적인 컴퓨터 리소스를 여러 개의 가상 환경으로 분리하여 사용하는 기술이다. 즉, 물리적인 서버에서 여러 개의 가상 서버 또는 가상 머신을 운용할 수 있다.
- 리소스 분리: 하나의 물리적인 서버를 여러 개의 가상 서버로 분리하여 독립적으로 운영할 수 있다.
- 하드웨어 활용도 증가: 물리적인 서버의 자원을 효율적으로 활용할 수 있다. 낭비를 최소화.
- 이식성과 확장성: 가상 머신은 호스트 시스템에 독릭접이기 때문에 다른 호스트 시스템으로 이동하거나 복제하여 빠르게 확장할 수 있다. 이를 통해 유지보수나 업그레이드 과정에서도 서비스의 중단 없이 가상 머신을 이동할 수 있다.
- 테스트 및 개발 용이성: 개발자나 시스템 관리자는 가상 머신을 사용하여 테스트 환경을 구성하거나 새로운 소프트웨어를 시험해볼 수 있다. 이를 통해 실제 환경에 영향을 주지 않으면서 안전하게 테스트를 진행할 수 있다.
아마존 웹 서비스의 클라우드 컴퓨팅 플랫폼을 가리킨다. 다양한 서비스를 제공하며, 사용자는 전 세계적으로 분산된 데이터 센터 네트워크를 활용하여 확장 가능하고 유연한 클라우드 기반 IT 인프라를 구축하고 운영할 수 있다.
아마존 웹 서비스의 클라우드 컴퓨팅 서비스 중 하나로, 가상 머신 인스턴스를 제공하는 서비스. 아마존에서 가상의 컴퓨터를 한 대 빌리는 것과 같다.
실제로 물리적인 서버 컴퓨터를 하나 사고, 그 서버 컴퓨터를 놓은 공간을 구매해서 주기적으로 관리하고 수많은 비용이 들어 갈 수 있다.
하지만, EC2 서비스는 사용한 만큼 비용을 지불한다. 사용한 만큼 뿐만 아니라 사용자가 선택한 운영 체제와 하드웨어 환경을 선택하여 사용할 수 있다. 이러한 이유로 Elastic(탄력적인) 이름이 붙었다.
- 가상 머신 인스턴스: 사용자가 선택한 운영 체제와 하드웨어 환경에서 동작하는 가상 머신 인스턴스를 제공한다. 이를 통해 사용자는 필요에 따라 여러 가지 유형의 가상 머신을 생성하여 다양한 애플리케이션을 실행할 수 있다.
- 유연한 컴퓨팅 리소스: 사용자는 필요한 만큼의 컴퓨팅 리소스(CPU, 메모리, 스토리지)를 선택하고, 필요에 따라 확장 또는 축소할 수 있다.
- 인스턴스 이미지: 사용자가 컴퓨팅 환경을 사전에 설정한 "인스턴스 이미지"를 생성하고 관리할 수 있다.
- 보안 및 네트워크 구성: 사용자가 가상 서버의 보안 그룹과 네트워크 설정을 관리할 수 있도록 지원한다. 이를 통해 인스턴스의 보안을 강화하고 네트워크 트래픽을 제어할 수 있다.
- 자동화 및 관리: 사용자가 인스턴스를 시작, 종료, 관리하는 데 필요한 도구를 제공한다.
EC2 인스턴스를 생성하는 데 사용되는 가상 머신 이미지를 말한다. AMI는 서버나 컴퓨터 인스턴스에대한 운영 체제(OS)와 해당 소프트웨어 구성, 애플리케이션 및 데이터를 포함하는 패키지다.
관계형 데이터베이스 서비스를 호스팅하고 관리하는 서비스로, MySQL, PostgreSQL, Oracle, SQL Sever 등 다양한 데이터 베이스 엔진을 사용한다.
EC2 인스턴스에 MySQL같은 관계형 데이터베이스를 설치하고 사용하면 안되나?
RDS를 사용하면 EC2에서 직접 데이터베이스 엔진을 설치해서 사용하는 것보다 편리하다.
데이터베이스 유지 보수와 관련된 일들을 RDS에서 전적으로 자동 관리한다.
클라우드 객체 스토리지 서비스로서, 데이터를 안전하고 확장 가능 가능한 방식으로 저장하고 관리하는 데 사용된다.
S3는 파일, 이미지, 비디오, 데이터베이스 백업 등 다양한 유형의 데이터를 저장하고 관리하는 데 사용된다.
일종의 클라우드 스토리지 서비스다. 인터넷 공간에 데이터를 저장하는 저장소. 데이터를 저장한다는 특징을 이용해서 정적 웹사이트 호스팅을 할 수 있게 해준다.
서버측 코드가 필요하지 않고 HTML, CSS, JavaScript와 같은 정적 파일로 구성된 웹 사이트를 호스팅하는 것을 말한다. AWS S3를 사용하면 이러한 정적 파일을 저장하고, 전 세계적으로 확장 가능한 웹 사이트를 배포할 수 있다.
- 무한 확장성: 스토리지의 용량을 무한히 확장할 수 있다.
- 내구성이 높다: 데이터는 여러 복제본으로 저장되기 때문에 하드웨어 장애 또는 네트워크 문제와 같은 예기치 않은 상황에서도 데이터가 안전하게 보호된다.
- 가용성 보장: 가용성이 높으면 스토리지에 저장된 파일들을 정상적으로 사용할 수 있는 시간이 길어진다.
- 저렴한 비용: 사용한 용량에 대한 비용만 지불하면 된다.(On-demand)
이러한 서비스들은 공통적으로 어떻게 높은 가용성과 높은 내구성을 보장할까?
아마존에서는 물리적인 서버를 관리한다. 클라우드 서비스라도 물리적인 컴퓨터는 당연히 있을 것이다. 아마존은 전 세계에 물리적인 데이터 센터를 뿌려 놓았다.
리전이란, AWS에서 클라우드 서비스를 제공하기 위해 데이터 센터의 물리적인 위치를 나타내는 지역이다. 컴퓨터를 모아 놓은 곳이 리전(Region).
각 리전은 하나 이상의 가용 영역(Availability)으로 구성되어 있다. 가용 영역은 각각 독립된 데이터 센터로 구성되어 있으며, 장애 발생 시 한 가용 영역이 영향 받더라도 다른 가용 영역에서 서비스를 계속 제공할 수 있도록 고려되었다.
리전과 가용영역은 사용자들이 안정성과 가용성을 갖춘 애플리케이션과 서비스를 구축할 수 있도록 한다. 여러 리전에 서버를 분산 배포하여 지역별 재해 복구 기능을 확보하거나, 하나의 리전 내에서 여러 가용 영역을 이용하여 가용성을 높일 수도 있다.
AWS의 리전은 지리적으로 분리되어 있기 때문에, 사용자는 가장 가까운 리전을 선택하여 서비스를 이용하거나, 특정 규정이나 요구사항을 충족하기 위해 특정 리전을 선택할 수 있다. 하지만 리전 간의 서비스 기능이나 가격이 조금 다를 수 있으므로 선택 시 고려해야 한다.
로컬 환경에서는 클라이언트, 서버, 데이터베이스를 띄워서 작성해왔다. 이거는 로컬 환경에서만 확인이 가능하다.
외부의 사용자들이 이 웹 서비스에 접근하려면 어떻게 해야할까?
바로 배포를 이용하는 것이다. 배포란, 개발한 서비스를 외부의 사용자들이 이용할 수 있도록 하는 것이다.
- 사용자들에게 Client를 어떻게 제공할지
- Client가 서비스를 이용하기 위한 요청을 처리할 Server를 어떻게 제공할지
- Server의 데이터를 저장하고 제공할 Database는 어떻게 제공할지
AWS 프론트엔드 배포 방법. AWS S3 정적 웹 사이트 호스팅을 이용한다.
빌드란, 데이터들을 통합/압축하여 배포하기에 최적화된 상태를 만드는 것이다.
S3라는 서비스를 통해 사용자들에게 Client를 제공할 수 있다. S3에는 정적 웹 사이트 호스팅이라는 기술을 이용할 수 있다. 빌드된 파일을 S3 버킷에 클라우드로 올리면 알아서 웹 사이트 배포를 하는 것이다.
이것도 AWS에서 제공하는 CDN(Contents Delivery Network) 서비스다. 웹 사이트의 성능과 가용성을 향상시키기 위한 서비스다.
일반적으로 웹 사이트의 정적 파일은 웹 서버에 호스팅된다. 사용자가 해당 파일을 요청할 때마다 원격 서버에서 해당 파일을 다운로드 받아야 한다. 이는 물리적으로 먼 지역에 있는 사용자들에게는 파일 다운로드 시간이 길어질 수 있으며, 웹 서버의 부하가 증가할 수 있다.
CDN은 이러한 문제를 해결하기 위해 정적 파일들을 전 세계적으로 분산된 여러 지점에 캐싱하여 제공한다. 이렇게 하면 사용자들은 가까운 CDN 서버에서 정적 파일을 다운로드하므로 파일 다운로드 시간이 크게 단축된다. 또한, 웹 서버의 부하가 분산되므로 웹 사이트의 성능과 안정성이 향상된다.
AWS 백엔드 배포 방법. EC2 가상 머신 인스턴스로 서버를 돌릴 수 있다.
데이터 베이스 특화 서비스인 RDS를 이용해, EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포할 수 있다.
AWS에서 제공하는 Route 53 서비스를 이용해서 기존의 지저분한 웹 사이트의 주소를 깔끔한 도메인 주소로 접근할 수 있게 해준다.