개발놀이터

AWS 클라우드 생태계 알아보기 본문

배포/AWS

AWS 클라우드 생태계 알아보기

마늘냄새폴폴 2023. 6. 8. 21:13

AWS 클라우드는 정말 많은 서비스를 클라우드 서비스로 제공하고 있습니다. 

 

AWS의 클라우드 생태계는 정말 복잡하고 이름도 왜이리 어려운게 많은건지 뭐부터 알아야할지 답답합니다. 

 

제가 답답했다는 뜻이구요. 답답해서 AWS 클라우드 생태계에 대해서 알아봤습니다. 바로 시작해보죠

 

AWS Cloud

EC2 (Elastic Compute Cloud)

EC2는 클라우드에서 가상 서버를 제공해주는 서비스라고 생각하시면 됩니다. 이러한 가상 서버는 인스턴스라는 이름으로 더 많이 알려져있습니다. 그리고 이 인스턴스들은 마치 물리적인 서버같이 작동합니다. 

 

EC2는 굉장히 유연하게 서버를 관리할 수 있다는 것이 특징입니다. CPU 파워를 조절할 수 있고, OS도 선택할 수 있으며, 메모리의 양도 정할 수 있고, 저장소의 크기와 같은 것들도 설정할 수 있습니다. 

 

즉, 나만의 커스텀 PC를 클라우드 환경에서 만들 수 있다는 것입니다. 

 

때문에, 정말 PC 조립하듯이 나는 무거운 프로그램을 많이 돌리니까 램이 다른사람보다 많이 필요해 하면 램을 더 추가하고, 난 머신러닝 컴퓨터가 필요하니까 그래픽카드를 좋은거 쓸거야 하면 좋은 그래픽카드 추가하고 이렇게 유연하게 PC를 만들 수 있다는 것입니다. 

 

IAM (Identity and Access Management)

IAM은 내가 배포한 애플리케이션의 유저들을 위해 AWS 자원들에 접근을 보안적으로 컨트롤하는데 도움을 줍니다. 

 

즉, 내가 만들어둔 EC2나 S3와 같은 자원들에 다른 사람들이 접근하는 것에 대해 보안적으로 관리할 수 있게 도와준다는 뜻이죠. 

 

IAM의 대표적인 특징으로는

  • AWS 계정에 접근을 공유할 수 있음 : 다른 사람에게 관리자 권한을 이양할 수 있고, 패스워드를 공유하지 않고 나의 AWS계정 안에 있는 자원들을 사용할 수 있게 해줍니다. 
  • MFA (Multi-Factor Authentication) : 내 계정에 2FA (Two-Factor Authentication) 를 걸어서 내 계정을 안전하게 보호할 수 있습니다. 
  • 보안 : 아마존의 EC2를 구동한 애플리케이션을 위한 AWS 자원에 접근하는 것을 보호할 수 있습니다. 

 

S3 (Simple Storage Service)

S3는 AWS에서 제공하는 오브젝트 스토리지 서비스입니다. S3는 언제 어디서나 웹의 데이터들을 꺼내오고 저장할 수 있도록 설계되었습니다. 

 

S3는 흔히 백업, 데이터 저장, 데이터 보관, 컨텐츠 분배와 같은 것들을 제공합니다. 또한, S3는 확장성이나, 데이터 가용성, 보안, 성능을 위해서 다른 AWS 서비스를 사용할 때 선택하는 스토리지 서비스입니다. 

 

즉, 정리하면 로컬 저장소는 스토리지의 크기나 보안같은 것들을 신경써야 하는데 클라우드에 올려놓고 저장하면 AWS가 대신 그것들을 관리해준다는 것입니다. 

 

 

ACM (AWS Certificate Manager)

ACM은 AWS가 SSL이나 TLS핸드쉐이킹 같은 복잡한 기능들을 만들고, 저장하고, 관리해주는 서비스입니다. 

 

SSL이나 TLS인증은 인터넷을 넘어 웹사이트의 신원을 설립하거나 네트워크 커뮤니케이션 (아마 여기선 3 way handshake를 말하는 듯 합니다.) 간에 보안을 위해 사용됩니다. 

 

즉, 정리하면 HTTPS를 이용하기 위해 사용되는 서비스입니다. 

 

 

Route 53

AWS만의 자체적인 DNS 웹 서비스입니다. Route 53은 개발자나 비즈니스에게 극도로 높은 신뢰성과 효율적인 방법으로 유저들의 인터넷 애플리케이션과 라우팅 하는 방법을 제공합니다. 

 

Route 53은 AWS EC2 인스턴스타 후에 설명할 ELB 혹은 S3 Bucket들과 같이 AWS에서 제공하는 인프라들과의 효과적인 연결을 제공해줍니다. 

 

Route 53의 특징으로는 도메인 저장 서비스, DNS 라우팅, 애플리케이션 장애 체크, 트래픽 관리등을 맡고 있습니다. 

 

 

ELB (Elastic Load Balancer)

AWS에서 ELB는 자동적으로 애플리케이션에 들어오는 다양한 타겟들의 트래픽들을 분배해주는 서비스입니다. ELB는 트래픽을 다양한 자원들을 통해 효과적으로 분배합니다. 

 

즉, ELB는 AWS에서 만든 로드 밸런서입니다. 

 

ELB에는 CLB (Classic Load Balancer), ALB (Application Load Balancer), NLB (Network Load Balancer) 이렇게 세가지가 존재합니다. 

 

CLB는 레거시 ELB라 지금은 많이 사용되지 않습니다. ALB는 OSI 모델 중 7계층 로드 밸런서입니다. ALB는 HTTP나 HTTPS 트래픽을 로드 밸런싱할 때 적합합니다. NLB는 OSI 모델 중 4계층 로드 밸런서입니다. NLB는 TCP나 UDP의 로드밸런싱을 수행할 때 적합합니다. 

 

 

ECR (Elastic Container Registry)

아마존의 ECR은 개발자들을 위해 도커 컨테이너 이미지들을 배포하고, 관리하고, 저장하기 쉽게 만들어주는 도커 컨테이너 저장소입니다. 

 

ECR은 아마존의 ECS와 결합되어 있고 우리의 워크 플로우 프로덕션 개발을 쉽게 해줍니다. 

 

ECR은 인프라를 확장하는 것에 대한 걱정이나 우리의 컨테이너 리포지토리를 실행할 필요를 제거해줍니다. ECR은 우리의 애플리케이션을 위해 신뢰성 있게 컨테이너를 배포해주고, 높은 가용성과 확장성있는 아키텍처 안에서 우리의 이미지를 호스트해줍니다. 

 

즉, 각각의 서버를 같은 환경으로 만들기 위해서 도커 이미지, 컨테이너 관리가 힘든 우리들을 위해 ECR로 도커 컨테이너를 쉽게 관리하기위한 서비스입니다. 

 

조금 개념이 애매한데 예를 들어서 설명하자면 

 

만약 Micro Service Architecture에서 각각의 격리된 애플리케이션들은 각각 동일한 서버 환경을 가지고 있어야 할겁니다. 예를 들어 결제 로직에는 MySQL 8.0.17을 쓰고 검색 로직에는 MySQL 8.0.30을 쓰면 안되겠죠? 

 

그렇기 때문에 모든 서버에는 모두 같은 환경으로 구동되어야 하기 때문에 각각의 격리된 애플리케이션이 늘어날 때마다

 

  1. 도커 이미지 다운 (이미지가 한두개가 아니겠죠?)
  2. 도커 컨테이너 생성 (컨테이너도 한두개가 아니겠죠)
  3. docker-compose 생성
  4. docker 실행

이 짓을 애플리케이션이 늘어날 때마다 해줘야합니다. 개발자 입장에서 이렇게 되면 확장하기 굉장히 꺼려질겁니다. 

 

ECR을 사용하면 위와 같은 과정이 하나로 압축됩니다. 

 

  1. ECR에 저장해둔 도커 이미지와 컨테이너 pull

 

정말 간단해집니다. 

 

 

ECS (Elastic Container Service)

ECS는 컨테이너 통합 서비스입니다. ECS는 컨테이너를 자동적으로 배포해주고, 확장해주고, 관리해주는 서비스입니다. 만약 내가 도커 이미지를 가지고 있을 때나 이미지를 기반으로 컨테이너를 실행하고 싶을 때 우리는 ECS를 이용할 수 있습니다. 

 

ECS는 도커 컨테이너의 스케쥴링을 관리해주고, 컨테이너를 실행해주고, 컨테이너의 네트워킹이나 보안을 대신 신경써줍니다. 

 

쉽게 설명하면 ECS는 Kubernetes같은 서비스라고 보시면 됩니다. 엄청나게 많이 쪼개져있는 격리된 애플리케이션을 하나로 묶어서 (오케스트리온 이라고 하덥니다) 컨테이너들을 자동적으로 관리하고 배포하는 작업을 진행해줍니다. 

 

 

 

마치며

여기까지 AWS의 생태계에 대해서 알아봤습니다. 이거 말고도 정말 많은데요 제가 일단 사용할 것 같은 것들만 위주로 정리해봤습니다. 

 

기존에는 EC2나 Route 53, S3, IAM 정도를 사용했는데요. CI / CD에 대한 파이프라인 설계를 공부하던 중에 앞으로 사용할 수 있을 것 같은 ACM, ELB, ECR, ECS등을 공부해봤습니다. 

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~