Amazon Web Service
웹 또는 앱 서비스를 개발하기 위해서는 서버와 데이터를 저장할 스토리지가 필요합니다. 서버 및 저장 공간을 구축하는 것은 많은 시간과 노력이 듭니다. 내가 개발할 서비스에 알맞는 컴퓨터 자원과 데이터 저장 공간을 빌려주면 인프라 구축이 훨씬 쉬워질 것입니다. 아마존 웹 서비스 (AWS)는 컴퓨팅 자원, 데이터 베이스, 저장 공간 등 다양한 클라우드 서비스를 제공합니다. 오늘은 AWS의 많은 서비스 중 컴퓨팅(Computing) 서비스를 알아보겠습니다.
Computing
웹 또는 앱 서비스를 운영하기 위해서는 서버가 필요합니다. “서버”라는 용어가 거창해보일지 모르겠지만 우리가 갖고 있는 노트북도 하나의 서버로 사용할 수 있습니다. 예를 들어서 내가 우리 동네 맛집을 찾아주는 서비스를 개발했다고 합시다.
사용자가 맛집을 찾고 싶은 동네를 입력하는 순간 서버는 요청을 받게 됩니다. 여기서 서버는 사용자의 요청을 받을 수 있도록 “통신”을 할 수 있어야 합니다.
사용자의 요청을 받은 후 서버는 연산을 수행하야 합니다. 즉, 특정 동네의 모든 맛집을 데이터 베이스에서 찾고 로직에 따라 랭킹을 매겨야 합니다. 이 때 데이터 베이스 및 랭킹 로직을 수행하기 위해서 서버는 저장 공간과 연산 능력을 갖고 있어야 합니다.
마지막으로 서버는 사용자에게 응답을 돌려줘야 합니다. 즉, 연산의 결과값을 통신을 통해 웹이든 앱이든 사용자가 볼 수 있는 UI로 전달해야 합니다.
위 일련의 예를 통해 서버는 1. 통신이 가능 2. 데이터를 저장할 수 있는 저장 공간을 보유 3. 연산 능력을 보유 해야하는 것을 알 수 있습니다.
하지만 서비스마다 필요한 저장 공간 및 연산량이 다릅니다. 즉, 어떤 서비스는 엄청나게 큰 저장 공간이 필요하지만 다른 서비스는 적은 저장 공간을 필요합니다. 만약 자신의 니즈에 맞게 서버를 선택할 수 있고 또한 언제든지 서버 스펙을 조절할 수 있다면 얼마나 좋을까요? 그 때 필요한 것이 바로 AWS의 클라우드 컴퓨팅 서비스입니다.
EC2
EC2는 Elastic Compute Cloud의 약자입니다. C가 2번 들어가 EC2라고 부릅니다. EC2는 대표적인 AWS의 가상 서버입니다. 노트북을 사기 위해서는 먼저 CPU 칩 종류, 메모리 크기 등을 정하고 주문합니다. 그럼 물리적인 노트북을 받을 수 있지요. 하지만 가상 서버는 나의 필요에 따라 컴퓨터 자원을 자유롭게 선택할 수 있습니다. 이렇게 생성한 가상 서버는 언제는 종료할 수 있고 또는 다른 리소스를 가진 서버로 교체할 수도 있습니다. 즉, 내가 필요한 만큼의 자원만 필요한 시간대에 대여할 수 있는 컴퓨터입니다. EC2에는 서버를 인스턴스(Instance)라고 부릅니다.
EC2의 특징은 다음과 같습니다.
- 다양한 서버 구성 템플릿이 제공됩.
- 이를 AMIs(Amazon Machine Image)라고 하는데, 도커 이미지처럼 서버의 운영 체제(OS), 어플리케이션 서버, 어플리케이션 이 종류별로 템플릿으로 만들어져 있음. 따라서 사용자는 자신의 케이스에 맞는 AMI를 선택해 인스턴스를 시작할 수 있음. (아래 그림을 참고)
- 하드웨어 리소스 종류를 선택할 수 있음.
- CPU, 메모리 크기, 저장 공간 크기, 네트워크를 필요에 맞게 선택할 수 있음. AWS는 다양한 리소스의 인스턴스 타입을 제공하기 때문에 사용자가 자신의 케이스에 맞는 인스턴스 타입을 선택할 수 있음.
- 예측하지 못한 수요 증가 및 수요 감소에 유연하게 대응할 수 있음.
- 서비스가 대박이 나서 유저가 갑자기 늘어난 경우, 또는 특정 시간대에만 유저가 몰리는 경우라도 인스턴스를 여러개 실행해 horizontal scaling이 가능함.
- 네트워크 및 보안을 AWS에서 담당하기 때문에 서버 유지 보수가 간편함.
- AWS는 IAM role (Identity and Access Management)이라는 기능으로 유저 및 그룹 별로 접근 권한을 관리함. 따라서 IAM role을 사용하면 인스턴스의 접근 권한을 특정 유저 및 그룹으로 제한할 수 있음.
- AWS는 security group 기능으로 인스턴스에 방화벽 기능을 제공. 즉, 인스턴스에 SSH로 접근할 수 있는 IP를 직접 설정할 수 있음.
- 다른 AWS 서비스와 함께 사용하기 편리함
- 인스턴스의 데이터를 영구적으로 저장하기 위해서는 AWS 스토리지 서비스인 EBS(Elastic Block Storage)나 S3를 사용할 수 있음 (인스턴스의 데이터는 일시적으로 저장되기 때문에 만약 AWS 스토리지 서비스를 이용하지 않으면 인스턴스 중단시 데이터는 날아감)
- 나의 웹 또는 앱 서비스의 타겟 국가에 맞게 전 세계 어디든 물리적인 데이터 센터를 선택할 수 있음.
- 비용은 인스턴스 실행 시간으로 계산함.
- 어떤 인스턴스 타입을 사용하느냐에 따라 가격이 달라짐.
- 사용자가 특정 인스턴스 타입을 선택(on demand)하는 것이 아니라 특정 시간에 남는 인스턴스를 사용시 (spot instance) 90% 비용을 절감할 수 있음.
Batch
앞서 살펴봤던 EC2는 인스턴스 사용 시간 단위로 비용이 측정됩니다. 따라서 EC2는 24시간 작동해야하는 서비스 운영 서버로 적합합니다.
하지만 서비스를 하다보면 매일 한시간에서 두시간 정도 대용량의 데이터를 처리하는 작업이 필요합니다. 이를 Batch Job이라고 부릅니다. 즉, 단기간에 대용량의 데이터를 집중적으로 처리하고 서버를 종료하는 것입니다. 이런 Batch 작업은 데이터를 다루는 서비스에서 필요하거나 딥러닝 연구자들에게 필요합니다. 딥러닝 모델을 학습하기 위해서는 단기간에 많은 GPU를 사용해야 연산해야하기 때문입니다. 이처럼 하루 몇시간만 연산하기위해 서버에 많은 GPU와 큰 메모리를 구축하는 것은 너무 돈 낭비이지 않을까요? 이 때 필요한 서비스가 바로 Batch 입니다.
Batch는 다음과 같은 특징을 갖습니다.
- Batch는 하루에 한 번 그날 수집한 데이터를 전처리 하는 등 단기간에 많은 연산을 수행하는 작업에 적합한 서비스
- Batch에서 실행되는 작업을
Job
이라고 함. Job은 파이썬 스크립트가 될 수도, 쉘 스크립트가 될 수도 있음. 대게 docker image를 사용하는데 dockerfile에 OS 타입, 환경 설정, 그리고 소스 코드를 정의함. - Job을 정의할 때, 서버의 하드 웨어 자원을 선택할 수 있음. Batch 역시 AWS 컴퓨팅 서비스인 EC2나 Fargate 중 하나를 사용. 따라서 CPU, 메모리, 그리고 GPU까지 선택 가능.
- Job 정의가 끝나면 Job을 생성하면 되는데, 생성된 Job은 Job Queue에 입력됨. Job Queue는 Batch에 입력된 Job의 대기줄임. 따라서 Job Queue에 나열된 Job이 하나씩 실행되는데 Job에게 우선 순위를 부여해 실행 순서를 조절할 수 있음.
- Batch 서비스 차제에 대한 비용 청구되지 않음. 대신 EC2 또는 Fargate 컴퓨팅 자원 실행 시간만큼 값이 청구됨.
Lambda
마지막으로 살펴볼 Lambda는 서버리스(serverless) 컴퓨팅 서비스입니다. EC2나 Batch는 사용자에게 하드웨어 자원을 선택권이 많았습니다. 하지만 Lambda는 사용자에게 코드만 받을 뿐 하드웨어 설정은 자체적으로 수행합니다. 즉, lambda는 서버 구축 및 인스턴스 관리를 직접 하고 싶지 않고 특정 코드를 실행하고 싶은 사용자에게 적합합니다.
Lambda의 특징은 다음과 같습니다.
- 실행하고 싶은 코드만 업로드하면 Lambda가 알아서 적당한 리소스의 서버를 선정해 코드를 실행함. 심지어 스케일링(scaling)도 자동으로 함.
- 지원하는 프로그래밍 언어로는 Node.js, Python, Ruby, Java, Go, .NET이 있음.
- 람다는 trigger를 받아 실행됨. Trigger란 람다를 시작하도록 알림을 주는 서비스를 말함. Lambda trigger 종류로는 또 다른 AWS Service(S3)나 Lambda API가 될 수 있음. 예를 들어 데이터 저장 서비스인 S3가 새로운 데이터가 저장될 시 lambda를 trigger해 lambda가 데이터 전처리를 수행할 수 있음.
- 람다는 코드 연산 시간에 따라 금액이 책정된다.
Conclusion
대표적인 AWS 컴퓨팅 서비스인 EC2, Batch, Lambda의 특징을 알아봤습니다. 자신의 서비스의 성격에 맞는 AWS 서비스를 선택한다면 적은 비용으로 최대의 효용을 만들 수 있을 것입니다. 다음 시간에는 컴퓨팅 서비스를 자동으로 스케일링하는 스케일 서비스의 종류와 특징을 알아보겠습니다.