AWS 서비스(Service)와 리소스(Resource)의 차이를 명확히 이해하기

프로필 사진mingke

AWS 서비스(Service)와 리소스(Resource)의 차이를 명확히 이해하기

목차

AWS 서비스(Service)와 리소스(Resource)

AWS를 처음 배울 때 명확하게 배우고 넘어가지 않는 개념 중에서 AWS 서비스(Service)와 리소스(Resource)가 있습니다. 간단한 개념이지만 이번 포스팅에서 그 차이가 무엇인지 알아보려고 합니다. 쉽게 말하면 AWS의 서비스는 말 그대로 EC2, S3, IAM, ECS 등 AWS의 다양한 서비스들을 의미합니다. 그리고 서비스에서 생성한, 예를 들면 EC2 서비스에서 생성한 인스턴스 같은 것들을 리소스라고 말합니다.

객체 지향 프로그래밍 언어에서 클래스를 서비스라고 생각하면 되고 리소스는 그것으로 생성한 인스턴스라고 생각하면 좀 쉽습니다.

서비스는 추상화된 기능의 집합

AWS에서 서비스는 우리가 사용할 수 있는 추상화된 기능의 집합을 의미합니다. 예를 들어 Amazon EC2(Elastic Compute Cloud)는 가상 서버를 제공하는 컴퓨팅 서비스입니다. 이 서비스는 단순히 '서버'라는 개념을 넘어, 서버를 생성하고 관리하며, 네트워크를 구성하고, 스토리지와 연결하는 등 서버 운영에 필요한 다양한 기능을 포함하고 있습니다.

핵심은 서비스 자체가 특정 물리적인 실체가 아니라 사용자가 특정 목적을 달성하기 위해 활용할 수 있는 기능의 묶음입니다.

리소스는 서비스에서 실제 만들어진 구성 요소

리소스서비스를 통해 생성하고 관리할 수 있는 실제 만들어진 구성 요소를 말합니다. EC2 서비스 안에서 우리가 실제로 생성하는 가상 서버 하나하나가 바로 EC2 인스턴스라는 리소스입니다. Amazon S3(Simple Storage Service)는 스토리지 서비스이고 S3 버킷(Bucket)은 그 서비스 안에서 데이터를 저장하는 리소스입니다.

하나의 서비스는 여러 개의 리소스를 생성하고 관리할 수 있습니다. EC2 서비스는 여러 개의 EC2 인스턴스(리소스)를 생성할 수 있게 해주고 S3 서비스는 여러 개의 S3 버킷(리소스)을 가질 수 있도록 합니다.

리소스 식별자 - ID와 ARN

서비스와 리소스를 구분하면서 진짜 말하고 싶었던 것은 지금부터 입니다. 생성된 각 리소스는 고유하게 식별될 필요가 있습니다. AWS에서는 두 가지 주요 식별자를 사용합니다.

  • 리소스 IDEC2와 관련된 리소스에 존재하는 식별자 입니다. 서버리스 서비스에는 리소스 ID가 없습니다. 예를들어 EC2 인스턴스를 세부정보를 확인해보면 인스턴스 ID라는 것이 있습니다. VPC에는 VPC ID가 있고 서브넷에는 서브넷 ID가 있습니다. 이렇듯이 EC2와 연관된 리소스에만 존재하는 식별자 입니다. EC2관련 리소스가 아닌 S3를 생성해보세요. 리소스 ID가 없습니다.

    AWS EC2 인스턴스 ID
  • ARN(Amazon Resource Name)은 말 그대로 리소스에 부여된 이름입니다. ARN은 AWS 내에서 리소스를 고유하게 식별하는 표준화된 방식입니다. 거의 모든 서비스의 리소스는 ARN을 가집니다. ARN은 다음과 같은 형식을 따릅니다.

    arn:aws:service:region:account:resource (리소스는 어떤 리소스냐에 따라 표기 방법의 차이가 있습니다.) ARN 표기를 공식을 이해하면 리소스를 생성하고 ARN을 추측하는데 도움이 됩니다. ARN은 AWS CLI, SDK, IAM 정책 등 다양한 곳에서 리소스를 명시적으로 참조할 때 활용됩니다.

    AWS S3 ARN

그런데 위 S3 버킷의 ARN은 arn:aws:s3:::my-temp-bucket-14234과 인데 앞서 말한 ARN방식과 다릅니다. S3는 생성하면 도메인이 생성되는데 도메인은 고유해야 합니다. 따라서 해당 버킷은 어떤 리전인지, 어떤 계정인지 관계 없이 버킷 이름이 고유해야 하기 때문에 S3의 ARN에는 리전과 Account가 표시되지 않습니다.


리소스의 스코프 - 글로벌, 리전, 가용 영역

AWS 리소스는 생성되는 스코프(영역)에 따라 분류될 수 있습니다. 리소스의 스코프를 이해하는 것은 고가용성 및 아키텍처 설계에 중요합니다.

  • 글로벌 스코프 - 일부 리소스는 특정 리전에 종속되지 않고 AWS 전체에서 유일하게 식별되는 글로벌 스코프를 가집니다. 가장 대표적인 예시는 IAM(Identity and Access Management) 서비스의 UserIAM Role이 있습니다. User가 글로벌이 아니라면 내 서비스를 글로벌로 확장하려면 IAM 유저가 각 리전별로 따로 있어야 할 테니 굉장히 불편할 것 입니다.

  • 리전 스코프 - 대부분의 AWS 리소스는 특정 리전 스코프를 가집니다. 예를 들어, VPC, S3 Bucket, RDS DB Instance 등은 특정 리전 내에서 생성되고 관리됩니다. 예를 들어 VPC 리소스는 리전 스코프이기 때문에 서울 리전에 생성되면 도쿄 리전에는 존재하지 않습니다. 리전 레벨에서 생성되는 리소스는 일반적으로 AWS에 의해 해당 리전 내의 여러 가용 영역에(최소 3개) 걸쳐 자동으로 중복 저장되거나 분산되어 높은 가용성을 제공합니다.

  • 가용 영역(AZ) 스코프 - 특정 리소스는 가용 영역 스코프를 가집니다. 특정 리전 내에서도 한정된 가용 영역 안에서만 존재합니다. 가장 대표적인 예시로는 EC2 인스턴스가 있습니다. EC2를 생성해보시면 알겠지만 하나의 가용영역에 배치됩니다. 하나의 AZ가용 영역 스코프의 리소스는 해당 가용 영역에 문제가 발생할 경우에 영향을 받을 수 있어서 고가용성을 위해 여러 가용 영역에 걸쳐 리소스를 분산 배치하는 전략이 필요합니다. EC2 인스턴스를 이중화하려면 서로 다른 가용 영역에 최소 두 개 이상의 인스턴스를 배포해야 합니다.

    EC2 목록에서 특정 EC2를 확인해보면 하나의 가용 영역만 찍히는 것을 볼 수 있습니다.

    AWS EC2 가용영역

마무리

AWS 서비스와 리소스의 개념을 명확히 이해하는 것은 클라우드 환경에서 효과적으로 아키텍처를 설계하고 운영하는 데 중요한 요소 같아서 다뤄봤습니다.

다시 정리하면 서비스는 우리가 활용하는 추상적인 기능의 집합이고 리소스는 그 서비스를 통해 실제로 생성되고 관리되는 구체적인 구성 요소입니다.

리소스의 식별 방법과 스코프를 이해하는 것은 고가용성 및 효율적인 자원 관리를 위한 중요한 기반 지식이 될 수 있습니다.

Loading...