AWS App Runner에서의 .NET 워크로드

모듈 1

모듈 1: AWS에서의 컨테이너 및 서버리스 컴퓨팅

 학습 모듈

개요

AWS App Runner는 사전 인프라 경험 없이도 개발자가 웹 애플리케이션 및 API를 대규모로 빠르고 손쉽게 배포할 수 있는 완전관리형 AWS 컴퓨팅 서비스입니다.

학습 목표

이 모듈에서는 다음을 수행합니다.

  • 컨테이너와 서버리스에 대해 알아보기
  • 컨테이너와 서버리스를 지원하는 AWS 컴퓨팅 서비스 조사
  • AWS App Runner가 워크로드에 적합한 시기를 결정하는 방법 이해

현재 인기 있는 두 가지 테마는 컨테이너와 서버리스입니다. 컨테이너를 사용하면 온프레미스나 클라우드에서 기본 인프라를 더 쉽게 관리할 수 있습니다. 클라우드에 있는 전체 컨테이너의 거의 80%가 현재 AWS에서 실행되고 있습니다. 서버리스는 인프라를 대신 관리하므로 팀이 비즈니스 우선 순위에 집중할 수 있습니다. AWS는 컨테이너와 서버리스를 위한 여러 서비스를 제공합니다. 몇 가지 주요 고려 사항을 검토한 후 사용 사례에 적합한 서비스를 선택하여 결정할 수 있습니다.

 소요 시간

30분

컨테이너

구성, 런타임 및 종속성과 함께 애플리케이션을 하나의 깔끔한 번들로 패키징하면 얼마나 좋을까요? 그게 바로 컨테이너입니다. 컨테이너는 애플리케이션의 코드, 구성 및 종속성을 하나의 객체로 패키징하는 표준화된 방식을 제공합니다. 컨테이너는 서버에 설치된 운영 체제를 공유하며 리소스가 격리된 프로세스 형태로 실행되므로 환경에 상관 없이 빠르고 안정적이며 일관된 배포를 보장합니다. 

컨테이너 대 가상 머신

컨테이너를 이해하기 위해 먼저 이와 대조되는 가상 머신에 대해 이야기해 보겠습니다. 물리적 서버가 지배적이었던 시대에는 서버가 단일 환경이었습니다. 일정량의 메모리, 스토리지 및 네트워킹 하드웨어가 함께 제공되고 특정 운영 체제를 실행하며 한 조직을 대상으로 했습니다. 그런 다음 가상화가 등장하여 소프트웨어로 컴퓨터를 에뮬레이션할 수 있게 되었습니다. 이제 '서버'는 조직과 애플리케이션에 필요한 운영 체제와 리소스에 맞게 조정된 가상 머신(VM)이 될 수 있습니다. 하이퍼바이저라고 하는 소프트웨어 계층은 VM을 생성, 실행 및 관리하고 이를 물리적 하드웨어와 높은 효율성으로 연결합니다. 물리적 서버는 여러 테넌트에 대해 여러 VM을 실행할 수 있으므로 전체 인프라 비용이 절감됩니다. 오늘날 VM은 기업에서 지배적이며 클라우드 컴퓨팅의 기반입니다.

컨테이너는 VM과 동일한 이점을 제공하지만 휴대성과 효율성이 더 뛰어납니다. 컨테이너는 종속성, 라이브러리, 설정과 함께 앱을 패키징하는 방법입니다. 여러 컨테이너가 호스트 운영 체제를 공유하며 격리된 프로세스로 실행됩니다. VM은 하드웨어를 가상화하고 측정 단위가 보통 기가바이트인 반면, 컨테이너는 운영 체제를 가상화하며 측정 단위가 보통 메가바이트입니다. 따라서 가볍고 휴대가 간편하며 효율적입니다. 컨테이너는 가볍고 독립적인 소프트웨어 구성 요소라는 공통된 철학을 가진 마이크로서비스에 특히 적합합니다.

VM과 비교하여 컨테이너는 소프트웨어 배포 단위로 설계되기 때문에 개발자의 작업 방식을 변화시킵니다. 개발자는 컨테이너를 빌드하고 작업의 일부로 배포합니다. 컨테이너와 가상 머신은 양자택일하는 것이 아닙니다. 함께 사용하는 경우가 많으므로 두 가지의 장점을 모두 누릴 수 있습니다. 컨테이너를 지원하는 많은 AWS 서비스가 가상 머신에서 컨테이너를 실행하고 있습니다.

컨테이너는 서버에 설치된 운영 체제를 공유하며 리소스가 격리된 프로세스 형태로 실행되므로 환경에 상관 없이 빠르고 안정적이며 일관된 배포를 보장합니다. 노트북에 로컬로 배포하든 프로덕션에 배포하든, 보안과 환경 설정을 제외하고 환경은 동일하게 유지됩니다.

참조: AWS 컨테이너

컨테이너 유형

Docker 플랫폼

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 컨테이너를 '호스트 시스템의 다른 모든 프로세스로부터 격리된 시스템에서 샌드박스 처리된 프로세스'로 정의합니다. 이러한 격리는 Linux에서 오랫동안 사용되어 온 기능인 커널 네임스페이스와 제어 그룹을 활용합니다. Docker는 이러한 기능을 접근하기 쉽고 사용하기 쉽게 만들기 위해 노력했습니다.”

Docker를 사용하면 코드 전달 속도 향상, 애플리케이션 운영 표준화, 원활한 코드 이동, 효율적인 리소스 활용을 통한 비용 절감 등의 이점이 있습니다. 평균적으로 Docker 사용자는 Docker를 사용하지 않는 사용자보다 7배 더 자주 소프트웨어를 제공합니다. 컨테이너 배포, 문제 해결 및 롤백을 위한 작업을 표준화할 수 있습니다. 로컬 시스템에서 프로덕션으로의 전환이 쉽고 간단합니다. 컨테이너가 있는 각 서버에서 더 많은 코드를 실행하여 비용을 절감할 수 있습니다.

최신 .NET 애플리케이션(.NET Core 3.1 또는 .NET 5+로 작성)은 Linux에서 실행할 수 있으며 Docker 컨테이너와 호환됩니다.

Docker 컨테이너를 지원하는 AWS 서비스에는 AWS App Runner, Amazon Elastic Container Service(ECS), Amazon Elastic Kubernetes Service(EKS), ECS 또는 EKS 기반의 AWS Fargate, AWS Lambda가 있습니다.

참조: AWS Docker

Linux 컨테이너

Docker Linux 컨테이너는 Linux 호스트에서 실행됩니다. 최신 .NET 애플리케이션(.NET Core 3.1 또는 .NET 5+로 작성)은 Linux 컨테이너에서 실행할 수 있지만 Windows가 필요한 레거시 .NET Framework 애플리케이션은 실행할 수 없습니다.

Linux 컨테이너를 지원하는 AWS 서비스에는 AWS App Runner, Amazon Elastic Container Service(ECS), Amazon Elastic Kubernetes Service(EKS), ECS 또는 EKS 기반의 AWS Fargate, AWS Lambda가 있습니다.

Windows 컨테이너

Windows 컨테이너는 Microsoft Windows 운영 체제를 지원합니다. Windows 컨테이너는 Linux 컨테이너 인스턴스에서 실행할 수 없으며, 반대의 경우도 마찬가지입니다.

Windows 컨테이너를 지원하는 AWS 서비스로는 Amazon Elastic Container Service(ECS), Amazon ECS on AWS Fargate, Amazon Kubernetes Service(EKS)가 있습니다. AWS App Runner Windows 컨테이너를 지원하지 않습니다.

참조: Amazon EC2 Windows 컨테이너

컨테이너의 이점

컨테이너는 다음과 같은 여러 실질적인 이점을 제공합니다.

경량

컨테이너는 가벼운 소프트웨어 패키지입니다. 게스트 운영 체제 이미지를 포함하지 않기 때문에 가상 머신보다 크기가 훨씬 작습니다. 대신 컨테이너는 호스트와 운영 체제를 공유합니다. 이러한 이유로 컨테이너는 보통 가상 머신보다 시작 속도가 더 빠릅니다.

표준화와 휴대성

컨테이너는 일관되고 휴대가 가능한 소프트웨어 환경을 제공합니다. 그래서 배포, 문제 조사 및 롤백 작업을 표준화할 수 있습니다.

원활한 이동

컨테이너는 이동이 원활합니다. 컨테이너화된 애플리케이션을 로컬 머신에서 프로덕션 환경으로, 온프레미스 환경에서 클라우드로 이동할 수 있습니다. 컨테이너는 일관성과 버전 제어 기능으로 인해 CI/CD 파이프라인 구현을 간소화할 수 있습니다.

더 빠른 제공

이동이 원활한 경량의 휴대용 컨테이너의 결합 효과는 민첩성입니다. 컨테이너를 사용하면 소프트웨어 종속성, 환경 설정 및 환경 차이 문제 해결에 소요되는 시간을 줄일 수 있으므로 개발 속도를 높일 수 있습니다. 예를 들어 Docker 사용자는 평균적으로 Docker를 사용하지 않는 사용자보다 7배 더 자주 제품을 제공합니다.

비용 절감

컨테이너를 사용하면 각 서버 인스턴스에서 더 많은 코드를 실행할 수 있습니다. 이렇게 하면 활용도가 향상되고 비용이 절감됩니다.

참조: AWS | Docker란 무엇인가요?, AWS | 컨테이너

AWS에서의 컨테이너가 제공하는 이점

AWS는 컨테이너에 인기 있는 클라우드입니다. 클라우드에 있는 전체 컨테이너의 거의 80%가 현재 AWS에서 실행되고 있습니다. 컨테이너의 고유한 이점 외에도 AWS에서 컨테이너를 호스팅하면 다음의 이점을 얻을 수 있습니다. 

보안

AWS는 보안, 규정 준수 및 거버넌스를 위한 200개 이상의 서비스와 주요 기능을 제공합니다. AWS는 강력한 보안 격리와 최신 보안 업데이트를 통해 컨테이너를 실행합니다. 각 컨테이너에 대해 세분화된 보안 권한을 설정할 수 있습니다.

안정성

AWS는 22개 리전에 69개의 가용 영역을 포함하는 글로벌 인프라를 제공하므로 전 세계에서 컨테이너를 실행할 수 있습니다. 모든 AWS 컨테이너 서비스에는 서비스 수준 계약(SLA)이 있습니다.

선택지

AWS는 관리형 서비스와 서버리스 서비스를 비롯한 다양한 컨테이너 서비스를 제공합니다. 이러한 서비스에는 Amazon Elastic Container Registry service(ECR), Amazon Elastic Container service(ECS), Amazon Elastic Kubernetes service(EKS), AWS Fargate, Amazon Elastic Compute Cloud(EC2), AWS App Runner가 있습니다.

또한 AWS는 App2Container 도구(A2C)를 제공하여 기존 .NET 및 Java 애플리케이션을 컨테이너화하고 마이그레이션하는 데 도움을 줍니다.

AWS 통합

AWS 컨테이너 서비스는 AWS와 긴밀하게 통합됩니다. 따라서 컨테이너 애플리케이션은 자동 확장, 네트워킹, 보안 및 모니터링에 AWS 서비스를 활용할 수 있습니다. 컨테이너의 민첩성과 AWS의 탄력성 및 보안이 결합됩니다.

참조: AWS 컨테이너 심층 분석

컨테이너 사용 사례

다음은 컨테이너에 대한 몇 가지 사용 사례입니다.

마이크로서비스

마이크로서비스는 잘 정의된 API를 통해 통신하는 소규모 독립 서비스로 구성된 소프트웨어의 개발 방식입니다. 이러한 서비스는 독립적인 소규모 팀에서 보유합니다. 마이크로서비스 아키텍처는 애플리케이션 확장이 간편하고 개발 속도가 빠릅니다. 이로 인해 혁신이 가능하고 새로운 기능의 출시 시간이 단축됩니다. 컨테이너는 마이크로서비스에 널리 사용되는 전략입니다. 모놀리스 애플리케이션은 컨테이너의 독립적인 구성 요소인 마이크로서비스로 나뉠 수 있습니다.

배치 처리

배치 처리 및 ETL(추출, 전환, 적재) 작업은 컨테이너에 적합합니다. 신속하게 시작할 수 있고 일정에 따라 또는 이벤트에 대한 응답으로 실행할 수 있습니다. 수요에 맞추어 동적으로 확장할 수도 있습니다.

기계 학습

컨테이너를 사용하면 기계 학습 모델을 신속하게 확장하여 훈련 및 추론을 수행하고 플랫폼에 상관없이 데이터 소스에 가까운 위치에서 실행할 수 있습니다.

하이브리드 애플리케이션

컨테이너는 코드가 배포되는 방식을 표준화하므로 온프레미스 및 클라우드 환경 사이에서 실행되는 애플리케이션에 대한 워크플로를 쉽게 구축할 수 있습니다. 

클라우드로 애플리케이션 마이그레이션

컨테이너는 클라우드로의 '리프트 앤드 시프트' 마이그레이션을 지원합니다. 전체 애플리케이션을 컨테이너로 쉽게 패키징하여 코드 변경 없이 클라우드로 이동할 수 있습니다. 클라우드 탄력성을 활용하여 컨테이너를 확장할 수 있습니다.

참조: AWS | 마이크로서비스

서버리스

서버리스 기술을 사용하면 서버에 대해 고민할 필요 없이 애플리케이션을 구축하고 실행할 수 있습니다. AWS는 코드 호스팅, 데이터 관리 및 애플리케이션 통합을 지원하며 서버 관리가 필요 없는 관리형 서비스를 제공합니다. Auto Scaling, 내장된 고가용성, 사용량에 따른 요금 결제 모델을 제공합니다. 

서버리스의 이점

서버리스 기술을 사용하면 인프라를 관리하는 대신 애플리케이션과 고객에 집중할 수 있습니다.

운영 오버헤드 제거

서버리스 기술을 사용하면 인프라 관리, 용량 프로비저닝, 패치를 처리할 필요가 없습니다. 이렇게 운영 오버헤드가 제거되면 신속한 릴리스와 피드백이 가능하며, 반복을 통해 더 빠르게 출시할 수 있습니다.

대규모 조정

서버리스 기술은 제로에서 최대 수요까지 자동으로 확장될 수 있습니다. 따라서 이 기술을 사용하면 고객의 요구에 신속하게 대응할 수 있습니다.

비용 절감

서버리스 기술은 제로에서 최대 수요까지 자동으로 확장될 수 있습니다. 이를 통해 고객의 요구에 그 어느 때보다 빠르게 적응할 수 있습니다.

더 우수한 애플리케이션을 보다 간편하게 구축

서버리스 기술은 다른 AWS 서비스와의 통합을 기본으로 제공합니다. 그래서 애플리케이션을 구성하는 대신 빌드하는 데 집중할 수 있습니다.

참조: AWS | 서버리스

서버리스 사용 사례

서버리스 기술은 다음과 같은 일반 사용 사례에 적합합니다.

웹 애플리케이션

웹 API 및 마이크로서비스를 비롯한 웹 애플리케이션은 서버리스 기술로 쉽게 만들 수 있습니다. 서버리스 컴퓨팅 서비스는 웹 트래픽에 맞게 자동 확장됩니다.

데이터 처리

Amazon Simple Storage Service(S3), Amazon DynamoDB, Amazon Relational Database Service Proxy(RDS Proxy), Amazon Aurora Serverless와 같은 서버리스 데이터 기술을 사용하면 거의 모든 규모의 데이터를 처리할 수 있습니다.

배치 처리

서버리스 기술은 일정에 따라 또는 이벤트에 대한 응답으로 배치 작업을 실행할 수 있습니다.

이벤트 수집

서버리스 함수를 실행하여 들어오는 비정형 데이터를 처리, 인덱싱 또는 분석하고 기계 학습 서비스를 적용할 수 있습니다.

컨테이너용 AWS 컴퓨팅 서비스

이제 컨테이너와 서버리스를 이해했으니 컨테이너를 지원하는 AWS 컴퓨팅 서비스를 살펴보겠습니다. 그중 일부는 서버리스도 지원합니다. 이러한 서비스는 모두 Docker Linux 컨테이너를 지원하고 일부는 Windows 컨테이너도 지원합니다. AWS 컨테이너 페이지에서 컨테이너용 AWS 서비스 및 도구의 전체 목록을 볼 수 있습니다. 이러한 서비스에 대한 모든 세부 정보를 알 필요는 없지만 서비스가 서로 어떻게 다른지 이해해야 합니다.

Container Registry: Amazon ECR

Amazon Elastic Container Registry(ECR)를 사용하면 컨테이너 소프트웨어를 공개 또는 비공개로 저장, 공유 및 배포할 수 있습니다. 보통 컨테이너를 ECR로 푸시합니다. ECR은 AWS App Runner, Amazon ECS 또는 Amazon EKS와 같은 AWS 컨테이너 컴퓨팅 서비스에 가까이 위치해 있습니다.

컨테이너 오케스트레이션: Amazon ECS, Amazon EKS, AWS Fargate

이러한 서비스는 컨테이너를 호스팅하고 오케스트레이션합니다. 즉, 컨테이너의 프로비저닝, 배포, 네트워킹, 확장, 가용성 및 수명 주기 관리를 자동화합니다.

Amazon Elastic Container Service(ECS)는 마이크로 서비스를 비롯한 컨테이너화된 애플리케이션의 손쉬운 배포, 관리 및 규모 조정을 지원하는 완전관리형 컨테이너 오케스트레이션 서비스입니다. ECS에서 매우 안전하고 안정적이며 확장 가능한 컨테이너를 실행할 수 있습니다.

Amazon Elastic Kubernetes Service(EKS)는 클라우드 또는 온프레미스에서 Kubernetes 애플리케이션을 실행하고 확장하기 위한 관리형 컨테이너 서비스입니다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 오픈 소스 시스템입니다. Amazon EKS는 Kubernetes를 시작 및 실행하고 확장하는 가장 신뢰할 수 있는 방법입니다.

AWS Fargate는 컨테이너에 적합한 서버리스 컴퓨팅입니다. Amazon ECS와 Amazon EKS는 모두 서버리스 형태로 제공되며, AWS Fargate와 결합하면 요금 모델도 달라집니다.

Amazon ECS와 Amazon EKS는 클라우드에서 컨테이너를 관리하는 것 외에도 Amazon ECS Anywhere 또는 Amazon EKS Anywhere 서비스를 통해 온프레미스에서 컨테이너 애플리케이션을 관리할 수도 있습니다.

서버리스 함수: AWS Lambda

AWS Lambda는 함수 실행을 위한 서버리스 이벤트 기반 서비스로, 컨테이너를 지원합니다.

서버 수준 제어: Amazon EC2 및 EC2 스팟 인스턴스

이러한 옵션을 사용하면 인프라 세부 정보를 가장 효과적으로 제어할 수 있을 뿐 아니라 AWS에서 컨테이너를 실행할 수 있는 관리 비용이 가장 적게 듭니다.

Amazon Elastic Compute Cloud(Amazon EC2)는 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 서비스입니다. EC2에서 서버 수준 제어로 컨테이너를 실행할 수 있습니다. 이렇게 하려면 EC2 인스턴스를 할당하고 해당 인스턴스에 Docker를 설치해야 합니다.

애플리케이션에 내결함성이 있는 경우 최대 90% 할인된 가격으로 제공되는 Amazon EC2 스팟 인스턴스에서 실행할 수 있습니다. 스팟 인스턴스를 사용하면 AWS 클라우드에서 미사용 EC2 용량을 활용할 수 있습니다. 스팟 인스턴스를 사용하려면 애플리케이션이 중단 가능해야 합니다. 데이터 분석, 배치 작업, 백그라운드 처리 또는 선택적 작업을 위해 스팟 인스턴스를 고려할 수 있습니다.

간단한 웹 애플리케이션: AWS Lightsail

AWS Lightsail은 고정된 월별 요금으로 실행하려는 간단한 컨테이너화된 애플리케이션에 적합합니다. 소규모 웹사이트와 데이터베이스를 보유한 학생, 중소기업 및 스타트업이 클라우드에서 시작하고 실행할 수 있는 좋은 선택지입니다. 

완전관리형: AWS App Runner

드디어 이 과정의 주제인 AWS App Runner까지 왔습니다. App Runner는 사전 인프라 경험 없이도 컨테이너화된 웹 애플리케이션 및 API를 대규모로 빠르게 배포할 수 있는 완전관리형 서비스입니다. 또한 App Runner는 서버리스이므로 컨테이너와 서버리스의 이점을 동시에 제공합니다. App Runner는 Linux 컨테이너에서 최신 .NET 워크로드를 실행할 수 있습니다.

AWS 컴퓨팅 서비스 선택

컨테이너용 AWS 컴퓨팅 서비스를 둘러보았으므로, 이제 AWS App Runner 또는 다른 서비스가 애플리케이션에 적합한지 결정하는 데 도움이 되는 몇 가지 주요 질문을 살펴보겠습니다. 표 1에는 AWS 서비스에 대한 고려 사항이 나와 있습니다.

표 1: AWS 컨테이너 컴퓨팅 서비스 의사 결정 표

컨테이너를 처음 사용하시나요, 아니면 컨테이너 사용이 익숙하신가요?

컨테이너 초보자라면 AWS App Runner를 고려해 보세요. 서비스 수준이 가장 높은 옵션이며 사전 인프라 경험이 필요하지 않습니다.

Windows 컨테이너가 필요하신가요?

컨테이너에서 레거시 .NET Framework 애플리케이션을 실행하려고 하면 Windows 컨테이너로 제한됩니다. Windows 컨테이너를 지원하는 AWS 서비스는 Amazon ECS, AWS Fargate를 사용하는 Amazon ECS, Amazon EKS입니다. 현대적 .NET을 실행하는 경우 Linux 컨테이너와 컨테이너를 지원하는 모든 AWS 컴퓨팅 서비스를 사용할 수 있습니다.

컨테이너 오케스트레이션은 현재 필요하나요, 향후 필요하나요?

단일 컨테이너 애플리케이션과 오케스트레이션해야 하는 컨테이너 조합 간에는 큰 차이가 있습니다. 컨테이너가 배열이 복잡하고 평생 관리가 필요한 경우 Amazon ECS 또는 Amazon EKS를 고려해 보세요. 

서버리스가 적합할까요?

애플리케이션이 서버리스 사용 사례에 적합하고 AWS에서 인프라와 서버리스 결제 모델을 관리하는 데 익숙하다면 AWS Lambda, AWS App Runner 또는 AWS Fargate와 같은 옵션을 고려해 보세요.

  1. 애플리케이션이 이벤트 기반 함수로 구성된 경우 AWS Lambda를 사용할 수 있습니다.
  2. 오케스트레이션이 필요한 경우 Amazon ECS 또는 Amazon EKS와 함께 AWS Fargate를 사용해야 합니다.
  3. 완전관리형 서비스를 선호한다면 AWS App Runner를 선택하세요.

주요 요점

이제 컨테이너와 서버리스, 그리고 각각의 이점에 대해 기본적으로 이해하셨을 것입니다. 다양한 AWS 컴퓨팅 서비스와 그 차별성에 대해 알아보았습니다. 또한 워크로드에 적합한 AWS 컴퓨팅 서비스를 결정하기 위해 어떤 질문을 해야 하는지도 배웠습니다.

결론

이 모듈에서는 먼저 컨테이너에 대해 알아봤습니다. 구체적으로, 컨테이너와 가상 머신의 차이점은 물론, Docker Linux 컨테이너와 Windows 컨테이너의 차이점에 대해서도 알아보았습니다. 컨테이너는 가볍고 표준화되어 있으며 휴대가 가능하고 이동이 원활하며 배포 시간을 단축하고 비용을 절감할 수 있습니다. AWS의 컨테이너는 안전하고 안정적이며 다양한 컨테이너 서비스를 통해 지원되며 AWS와 긴밀하게 통합됩니다.

그 다음으로는 서버에 대해 고민할 필요 없이 애플리케이션을 구축할 수 있는 서버리스 기술에 대해 배웠습니다. 제반 이점으로는 운영 오버헤드 제거, Auto Scaling, 비용 절감, 다른 AWS 서비스와의 기본적인 통합을 통한 애플리케이션 구축 용이 등이 있습니다. 사용 사례로는 웹 애플리케이션, 데이터 처리, 배치 처리, 이벤트 수집이 있습니다.

컨테이너용 AWS 컴퓨팅 서비스와 컴퓨팅 서비스 선택 방법에 대해 알아보았습니다. AWS App Runner는 컨테이너 호스팅을 위한 완전 관리형 서버리스 서비스라는 것을 알게 되었습니다.

이 페이지의 내용이 도움이 되었나요?