일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- react
- 네트워크
- IT개발캠프
- 해시
- react-query
- 프로세스
- html
- 스나이퍼팩토리
- CS
- 메모리
- App Runner
- 유데미
- 자바스크립트
- 알고리즘
- typescript
- 인사이드아웃
- 프로젝트캠프
- 리액트
- 프로그래머스
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- BFS
- 스레드
- javascript
- cs #네트워크
- Algorithm
- 타입스크립트
- 개발자부트캠프
- 웅진씽크빅
- React.js
- ip
- Today
- Total
Bin's Blog
쉽게 이해하는 AWS - 2편(데이터 플레인) 본문
들어가며
오늘은 지난 시간에 제어 플레인에 이어서 데이터 플레인과 AWS의 기타 서비스에 대해서 살펴 보는 것을 끝으로 AWS와 관련된 내용을 마무리 지으려고 한다.
데이터 플레인
지난 시간에 제어 플레인은 일종의 클라우드 뇌라고 생각할 수 있다고 했다. 데이터 플레인은 클라우드 뇌가 동작할 수 있는 엔진을 제공하는 것이다. 크게 EC2와 Fargate가 ECS or EKS와 함께 사용되는 컴퓨팅 리소스이다. EC2와 Fargate가 어떤 차이를 가지고 있는지 살펴보자.
EC2
EC2는 Amazon Elastic Compute Cloud의 약자로, 쉽게 말해 가상 컴퓨터라고 생각하면 된다. AWS에서 컴퓨터 사양을 인스턴스라고 부른다. EC2를 사용하게 되면 가상 컴퓨터의 성능을 설정해야 한다. EC2를 사용하게 되면 아래처럼 4가지의 선택 사항이 있다.
EC2를 생성하기 위해서는 아래의 선택 사항이 있다.
- 애플리케이션 및 OS 이미지(Amazon Machine Image) 정보
- 인스턴스를 시작할 때 필요한 구성(운영 체제- 윈도우, mac OS등, 애플리케이션(운영체제에서 실행되는 모든 프로그램) 서버 및 애플리케이션)이 포함된 것인데 원하는 운영체제로 EC2 서버가 구성된다.
- 가상 서버 사양 선택
- vCPU, 메모리, 스토리지, 네트워크 성능 등을 선택할 수 있다. EC2는 기본적으로 EBS(Elastic Blcok Store)이라는 하드 디스크에 정보를 저장한다. 용량은 추후 설정에서 변경할 수 있다.
- 네트워크 설정
- 네트워크, 서브넷, 퍼블릭 IP 자동 할당, 방화벽을 설정하고, 새 보안 그룹을 생성한다.
- 키 페어(로그인)
- 공개 키와 개인 키로 구성된 키 페어는 인스턴스에 연결하기 위한 사용되는 보안 자격 증명 세트이다. EC2 인스턴스에 공개 키를 정하고 사용자는 개인 키를 저장한다. Linux의 인스턴스 경우 개인 키를 이용해서 인스턴스에 SSH로 안전하게 연결할 수 있다.
- SSH는 보안을 위해서 사용하는 쉘인데 이 과정에서 보안 때문에 root user account(처음에 가입한 계정)을 직접 이용하지 않고 root 계정 내에서 여러 IAM(Identity and Access Management) 사용자를 만들어서 권한을 부여하고 관리할 수 있다. (참고로 root user account는 모든 리소스에 무제한 접근이 가능한 강력한 권한 때문에 털리면 끝난다)
- 공개 키와 개인 키로 구성된 키 페어는 인스턴스에 연결하기 위한 사용되는 보안 자격 증명 세트이다. EC2 인스턴스에 공개 키를 정하고 사용자는 개인 키를 저장한다. Linux의 인스턴스 경우 개인 키를 이용해서 인스턴스에 SSH로 안전하게 연결할 수 있다.
장점
- 필요에 따라 가상 서버를 생성하고 설정할 수 있다. 사용량을 조절하거나 축소하여 비용을 최적화할 수 있다.
- 다양한 CPU, 메모리, 스토리지 및 네트워크 용량을 제공하는 여러 유형의 인스턴스를 선택할 수 있다.
단점
- 초기 설정하는 게 복잡하다
- EC2는 가상 서버를 제공하지만, 관리 작업은 사용자가 직접 처리해야 한다.
Fargate
Fargate는 AWS 제공하는 컨테이너 오케스트레이션 서비스 중 하나이다. EC2를 사용하면 많은 서버 설정이 요구된다. 이에 따라서 Learning Curve가 높다. 그래서 Fagate를 사용하면 서버 설정이 어렵고 힘들어하는 사용자들을 위해서 별도 서버 설정 없이(severless) 이용할 수 있다.
Fargate는 애플리케이션 지연에 민감한 경우, 장기 실행 예약 작업(15분 이상)에 대한 지원이 필요한 경우에 사용하면 좋다.
장점
- 호스트를 관리하지 않아도 된다. 서버 프로비저닝(서버를 시작하여 사용 가능한 상태로 만드는 전체적인 프로세스)하고 관리할 필요가 없다. 서버 확장, 패치 적용, 보호, 관리 같은 운영 오버헤드(특정 기능을 수행하는데 드는 시간)가 없다.
- Fargate 실행환경은 AWS에서 항상 최신으로 유지한다.
- OS 운영에서 해방되는 아주 좋은 장점이 있어 운영 인력을 확충하지 않아도 된다.
단점
- 아무래도 자동관리를 해주니까 EC2보다 가격이 비싸다
- AWS 사용자가 직접 OS(운영체제)를 조작할 수 없다. 특히 보안 설정이나 특정 요구사항에 대한 최적화가 어렵다.
- CPU/메모리 할당에 제한이 잇다. 컨테이너 가동 시간이 다소 오래 걸린다. 그러나 Lambda에 비해서 컨테이너 인스턴스를 상대적으로 빠르게 시작할 수 있어서 증가하는 트래픽에 빠르게 대응할 수 있다.
기타서비스
Lambda
Lambda는 서버 세팅 없이 곧바로 코드를 함수로 실행하게 해주는 서비스다. 소스 코드를 업로드 하기만 해도, 애플리케이션을 실행할 수 있다. AWS에서 제공하는 컴퓨팅 자원을 인프라로 활용해 자동으로 애플리케이션을 구축해주는 완전관리형 서비스이다.
Lambda를 선택할 때는 애플리케이션 크기가 50MB이하이고, 실행 시간이 15분 이하의 경우, 애플리케이션이 이벤트에 대한 작업을 트리거해야 하는 경우에 사용하면 좋다. 작은 규모의 애플리케이션에 적합하다.
장점
- 인프라를 관리하지 않고 개발자는 코드 작성에 집중할 수 있다.
- 확장성이랑 탄력성이 좋아서 트래픽이 증가하더라도 안정적인 서비스를 제공할 수 있다.
- 사용하지 않으면 비용이 부과되지 않는다. 실행 시간에 대한 비용만 지불하면 된다.
- 다양한 언어를 지원하기 때문에 개발자는 선호하는 언어를 사용하면 된다.
- Lambda는 다양한 AWS 서비스와 통합되어 다양한 통합 기능(API Gateway, AWS SDK)을 사용 가능하다.
단점
- 함수가 처음 시작되면 콜드 스타트 상태가 된다. 이 과정에서 함수 초기화 프로세스를 거치며, 함수가 호출될 때마다 지연이 발생할 수 있다. 이런 지연은 응답 시간을 늦추고, 사용자 경험에 영향을 미친다. 대응 방안으로 웜 스타트가 있는데, 구현하려면 추가 비용이 든다. 추가적으로, 함수를 호출하면 새로운 컨테이너를 띄우는 방식이기 때문에 별도의 상태를 저장하지 않기 때문에 이전 이벤트의 실행 컨텍스트에 대한 액세스가 권한이 없어 db connection을 유지하기 어렵다.
- 함수 실행 시간은 최대 15분으로 제한한다. 함수가 이 실행 시간을 초과하면 함수 실행을 중지하고 예외를 발생시킨다. 따라서 긴 작업을 할 때는 문제가 될 수 있다.
- Lambda의 환경 변수의 크기를 4KB로 제한하고 있다. 크기가 작으니 복잡한 설정 정보를 저장하는 데 한계가 있다.
- 로깅 및 모니터링 기능을 일부 제공하나, 기능이 제한적이므로 보완을 위해 추가적인 로깅 및 모니터링 서비스를 사용해야 한다.
- 지역성을 지원하는데, Lambda 함수에서 사용 가능한 리소스 유형이 지역에 따라 다를 수 있어서 특정 리소스를 사용할 수 없을 수도 있다.
App runner
App runner는 사전 인프라 경험 없이도 컨테이너화된 웹 애플리케이션을 대규모로 빠르게 배포할 수 있도록 해주는 완전 관리형 서비스이다. Fargate와 다르게 인프라 설계가 필요없다. 깃허브와 연동해 소스코드를 App runner에서 배포/빌드한다. 인프라 관련 구축을 모두 AWS에서 처리해준다. 단순한 웹 애플리케이션을 운영하고자 하는 경우에 적합하다.(ex.정적 웹사이트, API 서버, 백엔드 서비스 등)
장점
- 배포가 간편하다
- 트래픽에 따라 자동으로 애플리케이션을 스케일링하므로 애플리케이션 성능을 유지하면서 비용을 최적화할 수 있다.
- 애플리케이션의 모니터링 및 로깅을 쉽게 설정하고 관리할 수 있다.
- 보안에 대한 강력한 관리를 제공하므로 애플리케이션을 보호할 수 있다.
단점
- 애플리케이션이 예상보다 많은 트래픽이 처리해야 하는 경우에는 비용이 높아진다.
- 일부 고급 설정 옵션이 제한된다. ex) 네트워크 설정, 배포 관리 제어
- 특정한 요구사항을 가진 애플리케이션에 적합하지 않아서 이럴 경우에 다른 서비스를 고려해야할 수 있다.
'Backend' 카테고리의 다른 글
쉽게 이해하는 AWS - 1편(제어 플레인) (0) | 2024.01.29 |
---|