아래 사이트에서 덤프를 볼 수 있다. 454문제.

 

www.examtopics.com/exams/amazon/aws-certified-cloud-practitioner/view/

 

문제 1

Under the shared responsibility model, which of the following is the customer responsible for?

공동 책임 모델의 경우, 다음 중 고객이 해야하는 것(책임을 갖는 것)은 무엇인가요?

  • A. Ensuring that disk drives are wiped after use.
    사용 후 디스크 드라이브를 지우도록 한다.
  • B. Ensuring that firmware is updated on hardware devices.
    하드웨어 장치의 펌웨어가 업데이트되도록 한다.
  • C. Ensuring that data is encrypted at rest.
    휴면데이터가 암호화 되도록 한다.
  • D. Ensuring that network cables are category six or higher.
    랜선이 카테고리 6이상 되도록 한다.

공동 책임 모델에 관한 문제이다.

 

보안과 규정 준수는 AWS와 고객의 공동 책임이다. 

사용이 끝난 디스크 드라이브를 지우고, 하드웨어 장치가 최신화되도록 하고, 랜선이 속도 규격에 맞도록 하는 그런 부분은, AWS가 책임 진다.

사용되지 않는 데이터를 암호화 하거나 권한문제, 방화벽 설정은 고객이 해야한다. 데이터를 다루는 것은 고객의 책임이다.

aws.amazon.com/ko/compliance/shared-responsibility-model/

 

공동 책임 모델 – Amazon Web Services(AWS)

보안과 규정 준수는 AWS와 고객의 공동 책임입니다. 이 공유 모델은 AWS가 호스트 운영 체제 및 가상화 계층에서 서비스가 운영되는 시설의 물리적 보안에 이르기까지 구성 요소를 운영, 관리 및 �

aws.amazon.com

 

문제 2

The use of what AWS feature or service allows companies to track and categorize spending on a detailed level?

어떤 AWS의 특징이나 서비스의 사용이 회사가 세부적으로 지출을 추적하고 분류할수 있게 하나요?

  • A. Cost allocation tags
    비용 할당 태그
  • B. Consolidated billing
    통합결제
  • C. AWS Budgets
    AWS 예산
  • D. AWS Marketplace
    AWS Marketplace

비용 할당 태그를 이용하면 리소스를 정리할 수 있고, 비용 할당 태그를 이용하면 AWS 비용을 더 자세히 추적할 수 있습니다. 비용 할당 태그를 활성화하면, AWS는 비용 할당 태그를 이용해 cost allocation report에서 리소스 비용을 정리하기 때문에 사용자는 쉽게 AWS 비용을 분류하고 추적할 수 있습니다.

 

통합 결제의 장점:

  • 하나의 청구서 – 여러 계정에 대해 하나의 청구서를 받습니다.

  • 추적 용이 – 여러 계정에 걸쳐 요금을 추적하고 비용 및 사용량 데이터 합계를 다운로드할 수 있습니다.

  • 사용량 통합 – 조직 내 모든 계정에 걸쳐 사용량을 통합하여 대량 구매 요금 할인, 예약 인스턴스 할인 및 Savings Plans를 받을 수 있습니다. 이를 통해 프로젝트, 부서 또는 회사에 청구되는 요금이 개별 계정 요금보다 낮아집니다. 자세한 정보는 대량 구매 할인 단원을 참조하십시오.

  • 추가 비용 없음 – 통합 결제는 추가 비용 없이 제공됩니다.

AWS Budgets을 사용하면 서비스 사용량, 서비스 비용 및 인스턴스 예약을 계획할 수 있습니다. 예산에서는 다음 정보를 볼 수 있는 방법을 제공합니다.

  • 계획이 예산 금액 또는 프리 티어 한도에 얼마나 근접한지

  • RI(예약 인스턴스) 중 사용한 양을 포함한 현재까지의 사용량

  • AWS의 현재 기준 예상 요금 및 예측된 사용량에 따라 월말에 발생할 요금의 액수

  • 사용된 예산의 양

AWS Marketplace는 고객이 솔루션 빌드 및 비즈니스 운영에 필요한 타사 소프트웨어, 데이터 및 서비스를 찾아보고 구입, 배포 및 관리를 쉽게 할 수 있도록 도와주는 엄선된 디지털 카탈로그입니다. 

 

 

문제 3

Which service stores objects, provides real-time access to those objects, and offers versioning and lifecycle capabilities?

어떤 서비스가 객체를 저장하고, 해당 객체에 대한 실시간 접근을 제공하고, 버전관리 및 수명주기 기능을 제공합니까?

  • A. Amazon Glacier
    아마존 글래시어 - 아마존 글래시어(빙하)는 데이터 아카이브 및 백업을 위한 스토리지를 제공하는 온라인 파일 스토리지 웹 서비스. 실시간 접근이 아닌 빙하처럼 데이터를 얼려서 보관하는 용도이다. 자유로운 CRUD는 어렵다.
  • B. AWS Storage Gateway
    AWS Storage Gateway는 온프레미스 환경과 AWS 스토리지 인프라 사이에 원활한 통합을 돕는 서비스.
  • C. Amazon S3 (Simple Storage Service)
    어디서나 원하는 양의 데이터를 저장하고 검색할 수 있도록 구축된 객체 스토리지
  • D. Amazon EBS
    아마존 Elastic Bloc Store는 EC2에서 사용할 수 있는 블록 수준 스토리지 볼륨을 제공한다. 형식이 지정되지 않은 원시 블록 디바이스처럼 동작한다. 이러한 볼륨을 인스턴스에 디바이스로 마운트할 수 있다. 하드나 SSD처럼 볼륨 드라이브처럼 사용.

문제 4

What AWS team assists customers with accelerating cloud adoption through paid engagements in any of several specialty practice areas?

고객이 여러 전문 업무 분야에서 유료계약을 통해 클라우드를 채택하도록 지원하는 AWS팀은 무엇일까요?

  • A. AWS Enterprise Support
    AWS 엔터프라이즈 지원. 컨시어지와 비슷한 서비스를 제공한다. 이 서비스를 사용하면, 엔지니어의 365일 24시간 기술지원을 받을 수 있고, 환경을 자동으로 관리할 수 있는 도구와 기술을 제공받는다. 애플리케이션 사용에 대한 컨설팅 형식의 도움도 받을 수 있다.
  • B. AWS Solutions Architects
    AWS 공인 솔루션스 아키텍트. 자격증. AWS를 사용하여 시스템을 설계한 경험이 있는 사람을 대상으로. 애플리케이션을 설계, 배포하는 방법에 대해 아는지 확인한다. 고객의 요구사항을 기반으로 아키텍처 설계 원칙으로 솔루션을 찾을 수 있어야한다. AWS자격증을 갖은 사람을 말하는 듯 하다.
  • C. AWS Professional Services
    AWS Professional Service 조직은 AWS 클라우드를 사용하여 원하는 비즈니스 성과를 달성할 수 있도록 도움을 주는 글로벌 전문가 팀이다. 전세계 기업을 대상으로 AWS 도입과 확산을 지원하는 전문 컨설턴트로 구성되어있다. 
  • D. AWS Account Managers
    고객을 담당하는 매니저이다. Account Manager는 기업들에게 AWS의 서비스와 기술을 소개하고, AWS를 활용하여 어떤 비즈니스 가치를 창출할 수 있는지 전달하는 역할을 한다.

문제 5

A customer would like to design and build a new workload on AWS Cloud but does not have the AWS-related software technical expertise in-house.

고객이 AWS 클라우드에서 새로운 워크로드를 설계하고 구축하려 하지만 사내에 AWS 관련 소프트웨어 기술 전문 지식이 없습니다.
Which of the following AWS programs can a customer take advantage of to achieve that outcome?

다음 중 고객이 원하는 결과를 얻기 위해 활용할 수 있는 AWS 프로그램은 무엇일까요?

  • A. AWS Partner Network Technology Partners
    APN 기술 파트너는 AWS 클라우드에서 호스팅되거나 통합되는 하드웨어, 연결 서비스 또는 소프트웨어 솔루션을 제공한다. 협력업체를 말하는 듯하며, 서버 구축을 위한 하드웨어 장비회사, 서버간 연결을 위한 통신사, 클라우드 구축 및 제어를 위한 소프트웨어 솔루션 업체를 말한다.
  • B. AWS Marketplace
    고객에게 필요한 솔루션을 모아둔 카탈로그이며, 고객도 올릴 수 있는 듯 하다.
  • C. AWS Partner Network Consulting Partners
    고객이 AWS에서 워크로드 및 애플리케이션을 디자인, 구축, 마이그레이션, 관리할 수 있도록 지원하는 전문 서비스 회사. AWS를 적용하는데 도움을 주는 회사로 보인다. SI, 리셀러, 유통 등을 하는 회사. 기술지원 회사.
  • D. AWS Service Catalog
    서비스 카탈로그를 사용하는 조직은 AWS에서 사용할 수 있는 서비스 카탈로그를 생성할 수 있고 관리할 수 있다. 조직 내에서 사용할 수 있는 서비스를 제어하고, 관리, 하여 조직 내의 사용자가 원하는 서비스를 사용할 수 있도록 하는 것으로 보인다.

문제 6

Distributing workloads across multiple Availability Zones supports which cloud architecture design principle?

여러 가용성 영역을 사용해서 워크로드를 분산하는 것은 어떤 클라우드 아키텍처 설계 원리에 도움이 될까요?

  • A. Implement automation.
    자동화 구현
  • B. Design for agility.
    민첩성을 위한 디자인
  • C. Design for failure.
    실패를 위한 디자인
  • D. Implement elasticity.
    탄력성 구현 - 부하를 처리하기 위해 시스템을 확장할 수 있는 능력

여러 영역에 분산시킴으로써 실패, 오류, 재난 상황에 대처할 수 있다.

 

문제 7

Which AWS services can host a Microsoft SQL Server database? (Choose two.)

MS SQL 서버 데이터베이스를 호스팅할 수 있는 AWS서비스는 무엇일까요? 두가지 선택.

  • A. Amazon EC2. Elastic Compute Cloud
    탄력있는 컴퓨트 클라우드는 안전하고 크기조정이 가능한 컴퓨팅 파워를 클라우드에서 제공한다. IaaS(Infra as a Service)이다. 컴퓨터를 클라우드로 제공한다고 보면된다. 그러기에 사용자는 OS와 응용프로그램 설치 및 환경 설정을 해야한다.
  • B. Amazon Relational Database Service (Amazon RDS)
    클릭 몇번으로 클라우드에서 관계형 데이터베이스를 설정, 운영 및 확장할 수 있는 서비스. AWS는 아마존 Aurora, PostgreSQL, MySQL, MariaDB, Oracle Database, MS SQL Server를 비롯한 6개의 데이터 베이스 엔진 중에서 선택할 수 있다. (아마존의 AWS Datavase Migration Service를 사용해서 기존의 데이터베이스를 Amazon RDS로 쉽게 마이그레이션, 복제할 수 있다.)
  • C. Amazon Aurora
    아마존이 만든 관계형 데이터베이스. MySQL및 PostgreSQL과 호환된다고 한다. 분산 시스템으로 안전하고, 빠르고 좋다고 아마존은 말한다...
  • D. Amazon Redshift
    클라우드 데이터 웨어하우스. 아마존이 만든 데이터 웨어하우스로, AWS와 호환성이 좋고.. 성능이 좋고.. 비용이 저렴하다고 아마존은 말한다.
  • E. Amazon S3 (Simple Storage Service)
    객체 스토리지 서비스. 

 

문제 8

Which of the following inspects AWS environments to find opportunities that can save money for users and also improve system performance?

다음 보기 중, 사용자의 비용을 절감하거나 시스템의 성능을 향상할 기회를 찾기위해 AWS 환경을 검사하는 것은 무엇일까요?

  • A. AWS Cost Explorer
    AWS Cost Explorer는 시간에 따른 AWS 비용과 사용량을 시각화하고, 이해하고 관리하기 편한 인터페이스를 제공한다. 비용 및 사용량 대시보드.
  • B. AWS Trusted Advisor
    비용 절감, 성능 향상, 보안 강화. AWS Trusted Advisor는 AWS의 환경을 분석하여 비용 최적화, 성능, 보안, 내결함성, 서비스 한도의 권장사항을 제공한다.
  • C. Consolidated billing
    AWS 통합결제 기능을 사용하면 여러 AWS 계정이나 Amazon Internet Service 계정의 결제를 통합할 수 있다. 청구서가 하나로 통합되고, 여러 계정의 요금을 확인하기 쉬워지고, 대량구매 할인을 받을 수 있다. 이는 무료 서비스이다.
  • D. Detailed billing
    세부결제 보고서. 이는 2019년 8월 7일 이후 사용되지 않는다. 이는 Cost and Usage Report(비용 및 사용보고서)로 대체되었다. 시간별, 제품별, 직접 정의한 태그를 기준으로 비용을 구분한 보고서를 받을 수 있다. AWS는 이 보고서를 CSV형식으로 버킷(S3)에 업데이트 하며 최대 하루 3번 업데이트 한다.

문제 9

Which of the following Amazon EC2 pricing models allow customers to use existing server-bound software licenses?

다음 Amazon EC2 가격 모델 중 고객이 기존 서버에 귀속된 소프트웨어 라이센스를 사용할 수 있도록 하는 것은 무엇입니까?

  • A. Spot Instances
    AWS의 유휴 EC2를 활용하여 작업을 수행할 수 있는 서비스이다. 심야 전기 할인처럼, 아마존에서 제공하는 EC2가 수요가 적어 남는 시점에 컴퓨팅 능력을 저렴하게 빌려서 쓰는 거다. 배치성 작업을 좀 더 저렴하게 사용하고, AWS는 놀고있는 컴퓨팅 파워를 사용해 돈을 버는 구조이다.
  • B. Reserved Instances
    예약 인스턴스는 할인제도라고 보면 된다. 온디맨드 요금에 비해 비용을 절감할 수 있다. 지역, 인스턴스 유형, 플랫폼, 기간, 지불옵션등에 따라 가격 할인이 생긴다.
  • C. Dedicated Hosts
    전용 호스트. 기존 소프트웨어 라이센스를 지원하고, 규정을 준수하는 전용 하드웨어이다. 설정이 완료되면 AWS EC2 인스턴스 시작하듯이, 제공된 하드웨어에서 가상머신(인스턴스)를 사용할 수 있다.
  • D. On-Demand Instances
    약정없이 사용하는 컴퓨팅 파워에 대해 시간당 금액을 지불하는 방식. 언제부터 언제까지 사용하겠다고 정하지 않고, 사용자가 원하는 시점에 시작과 중지가 가능하다. 고정요금이다.

문제 10

Which AWS characteristics make AWS cost effective for a workload with dynamic user demand? (Choose two.)

동적 사용자 요구가 있는 작업에 대해 AWS를 비용 효율적으로 만드는 AWS 특성은 무엇입니까? (두 개 선택하세요.)

  • A. High availability
    고가용성. 서버와 네트워크, 프로그램과 같은 정보 시스템이 오랜 기간동안 문제 없이 정상운영이 가능한 성질을 말한다.
  • B. Shared security model
    공동 책임 모델. 보안과 규정 준수는 AWS와 고객의 공동책임이라는 것.
  • C. Elasticity
    탄력성. 부하를 탄력적으로 처리할 수 있는 것. 클라우드는 고객이 원하는 만큼 컴퓨팅 파워를 늘리고 줄이고 할 수 있게 되어 탄력성이 좋다.
  • D. Pay-as-you-go pricing
    종량제. 간만큼 내는 것. 사용한 만큼만 내는 것이다. 기존의 온프레미스 상황에서는 사용하지 않아도 장비를 가지고 있어 감가 상각이 일어나고, 특정 시간만 큰 컴퓨팅 파워가 필요한 경우에도 높은 비용을 들여 고성능 고가 장비를 구해야했다. 클라우드로 인해, 원하는 만큼 원하는 시간에 사용하여 비용을 줄이게된다.
  • E. Reliability
    신뢰성. 분산 시스템 환경으로 안정성이 높아지고, 재난에 대비한 데이터 센터 설계로 신뢰성이 높아진다.

문제 11

Which service enables risk auditing by continuously monitoring and logging account activity, including user actions in the AWS Management Console and AWS SDK?

어떤 서비스가 계정 활동(AWS관리 콘솔과 SDK의 활동을 포함)을 지속적으로 모니터링하고 로깅하여 리스크 감사를 가능하게 할까요?

  • A. Amazon CloudWatch
    AWS와 온프레미스에서 AWS 리소스와 애플리케이션을 관찰할 수 있다. 로그, 지표, 이벤트 정보를 수집하고 모니터링하여 사용자에게 필요한 정보를 제공한다.
  • B. AWS CloudTrail
    사용자 활동 및 API 사용 추적. AWS계정의 거버넌스, 규정준수, 운영감사, 위험감사를 지원하는 서비스이다. AWS인프라에서 계정 활동과 관련된 작업을 기록하고 지속적으로 모니터링하며 보관할 수 있다.
  • C. AWS Config
    AWS 리소스 구성 기록 및 평가. 리소스 구성을 측정, 감사 및 평가할 수 있는 서비스.
  • D. AWS Health
    리소스 성능과 AWS 서비스 및 계정의 가용성에 대한 지속적인 가시성을 제공한다.

 

문제 12

Which of the following are characteristics of Amazon S3? (Choose two.)

다음중 아마존 S3의 특징은 무엇일까요? 2개 선택

  • A. A global file system
  • B. An object store
    아마존 S3는 객체 스토리지 서비스이다.
  • C. A local file store
  • D. A network file system
    파일 시스템이 아니다.
  • E. A durable storage system
    99.99999999%의 내구성을 위해 설계되었다.

문제 13 - 정확한 답을 모르겠음.

Which services can be used across hybrid AWS Cloud architectures? (Choose two.)

하이브리드 클라우드 아키텍쳐에서는 어떤 서비스를 사용할 수 있나요? (2개 선택)

  • A. Amazon Route 53
    Amazon Route 53은 가용성이 높고 확장 가능한 DNS 웹 서비스입니다.
  • B. Virtual Private Gateway
  • C. Classic Load Balancer
    Classic Load Balancer는 여러 Amazon EC2 인스턴스에서 기본적인 로드 밸런싱을 제공하며, 요청 수준 및 연결 수준에서 작동합니다. Classic Load Balancer는 EC2-Classic 네트워크 내에 구축된 애플리케이션을 대상으로 합니다.
  • D. Auto Scaling
  • E. Amazon CloudWatch default metrics
    지표는 CloudWatch의 기본 개념입니다. 지표는 CloudWatch에 게시된 시간 순서별 데이터 요소 세트를 나타냅니다. 지표는 모니터링할 변수로, 데이터 요소는 시간에 따른 변수의 값을 나타내는 것으로 간주합니다.

하이브리드 클라우드

AWS와 온프레미스 환경의 조합. 하이브리드 클라우드 아키텍처는 기관이 온프레미스 및 클라우드 운영을 통합하여 온프레미스 및 클라우드 환경에서 클라우드 서비스, 도구 및 API의 일반 집합을 사용하여 광범위한 사용 사례를 지원하도록 돕습니다

 

문제 14

What costs are included when comparing AWS Total Cost of Ownership (TCO) with on-premises TCO?

AWS TCO와 온프레미스 TCO를 비교할 때 어떤 비용이 포함될까요?

  • A. Project management
  • B. Antivirus software licensing
  • C. Data center security
  • D. Software development

나머지는 비용이 동일하게 들 것이고, 데이터 센터 보안 비용은 AWS가 알아서 관리하기에 절감할 수 있다.

 

문제 15

A company is considering using AWS for a self-hosted database that requires a nightly shutdown for maintenance and cost-saving purposes. Which service should the company use?

한 회사가 유지보수와 비용절감을 목적으로 밤마다 종료가 필요한 자체 호스팅 데이터베이스에 AWS사용을 고려하고 있습니다. 어떤 서비스를 사용하는 게 좋을까요?

  • A. Amazon Redshift
    가장 널리 사용되고 가장 빠른 속도의 클라우드 데이터 웨어하우스
  • B. Amazon DynamoDB
    어떤 규모에서든 빠르고 유연한 NoSQL 데이터베이스 서비스
  • C. Amazon Elastic Compute Cloud (Amazon EC2) with Amazon EC2 instance store
    EC2 인스턴스 스토어는 인스턴스에 블록 수준의 임시 스토리지를 제공합니다. 스토리지는 호스트 컴퓨터에 물리적으로 연결된 디스크에 위치합니다. 인스턴스 스토어는 버퍼, 캐시, 스크래치 데이터 및 기타 임시 콘텐츠와 같이 자주 변경되는 정보의 임시 스토리지나 로드가 분산된 웹 서버 풀과 같은 여러 인스턴스상에서 복제되는 데이터에 가장 적합합니다.
  • D. Amazon EC2 with Amazon Elastic Block Store (Amazon EBS)
    EBS는 EC2에서 SSD나 하드처럼 사용할 수 있는저장 장치이다.

문제 16

Which of the following is a correct relationship between regions, Availability Zones, and edge locations?

다음 중 리전, 가용영역, 엣지 로케이션 간의 올바른 관계는 무엇일까요?

  • A. Data centers contain regions.
  • B. Regions contain Availability Zones.
  • C. Availability Zones contain edge locations.
  • D. Edge locations contain regions.

리전은 다른 리전과 격리되도록 설계되어있다. 그래서 내결함성과 안정성을 얻는다.

가용영역은 리전에 존재하는 격리된 위치이다. 

로컬 zone은 사용자와 지리적으로 가까이 위치해 지연시간을 줄여주도록 도와준다. 리전을 사용자와 가깝게 확장한다고 보면 된다.

AWS Wavelength는 통신사업자의 5G네트워크 에지에 배포하여 최종 사용자에게 매우 짧은 지연 시간을 제공하는 애플리케이션을 구축하도록 돕는다.

AWS Outposts는 AWS 인프라, 서비스, API 및 도구를 고객 구내로 확장하는 완전 관리 형 서비스이다.

 

문제 17

Which AWS tools assist with estimating costs? (Choose three.)

비용을 추정하는데 도움을 주는 AWS 툴은 무엇인가?  정답 3개

  • A. Detailed billing report
  • B. Cost allocation tags
  • C. AWS Simple Monthly Calculator
  • D. AWS Total Cost of Ownership (TCO) Calculator
  • E. Cost Estimator

비용을 예측하려면 AWS Cost Explorer를 사용하십시오 . 비용 할당 태그 를 사용 하여 리소스를 그룹으로 나눈 다음 각 그룹의 비용을 추정합니다.

온 프레미스 인프라를 AWS로 마이그레이션하는 데 드는 비용을 추정하려면 AWS 총 소유 비용 (TCO) 계산기를 사용하십시오 .

청구액을 추정하려면 AWS 요금 계산기를 사용하십시오 . 선택 견적을 작성 하고 서비스 계획 한 자원을 선택합니다. AWS 요금 계산기는 월별 예상 비용을 제공합니다.

 

문제 18

Which of the following are advantages of AWS consolidated billing? (Choose two.)

다음 중 AWS 통합결제의 장점은 무엇입니까?

  • A. The ability to receive one bill for multiple accounts
  • B. Service limits increasing by default in all accounts
  • C. A fixed discount on the monthly bill
  • D. Potential volume discounts, as usage in all accounts is combined
  • E. The automatic extension of the master account's AWS support plan to all accounts

통합 결제의 장점:

  • 하나의 청구서 – 여러 계정에 대해 하나의 청구서를 받습니다.

  • 추적 용이 – 여러 계정에 걸쳐 요금을 추적하고 비용 및 사용량 데이터 합계를 다운로드할 수 있습니다.

  • 사용량 통합 – 조직 내 모든 계정에 걸쳐 사용량을 통합하여 대량 구매 요금 할인, 예약 인스턴스 할인 및 Savings Plans를 받을 수 있습니다. 이를 통해 프로젝트, 부서 또는 회사에 청구되는 요금이 개별 계정 요금보다 낮아집니다. 자세한 정보는 대량 구매 할인 단원을 참조하십시오.

  • 추가 비용 없음 – 통합 결제는 추가 비용 없이 제공됩니다.

문제19

Which of the following Reserved Instance (RI) pricing models provides the highest average savings compared to On-Demand pricing?

다음 예약 인스턴스 (RI) 요금 모델 중 온 디맨드 요금에 비해 평균 절감액이 가장 높은 것은 무엇입니까?

  • A. One-year, No Upfront, Standard RI pricing
  • B. One-year, All Upfront, Convertible RI pricing
  • C. Three-year, All Upfront, Standard RI pricing
  • D. Three-year, No Upfront, Convertible RI pricing

1년 혹은 3년 가능 오래할 수록 할인.

선결제는 더 할인.

표준형은 최대72% 전환형은 최대 54%할인.

 

문제 20

Compared with costs in traditional and virtualized data centers, AWS has:

기존 가상화된 데이터 센터의 비용과 비교하면, AWS는 다음을 제공합니다.

  • A. greater variable costs and greater upfront costs.
    더 큰 가변비용과 더 큰 선행 비용
  • B. fixed usage costs and lower upfront costs.
    고정 사용 비용과 낮은 선행 비용
  • C. lower variable costs and greater upfront costs.
    낮은 가변 기용과 더 큰 선행 비용
  • D. lower variable costs and lower upfront costs.
    낮은 가변 비용과 낮은 선행 비용

문제 21

A characteristic of edge locations is that they:

edge locations의 특징은 다음과 같습니다.

  • A. host Amazon EC2 instances closer to users.
    Amazon EC2 인스턴스를 유저에게 더 가까이 호스팅합니다.
    이건 로컬 zone의 특징이다.
  • B. help lower latency and improve performance for users.
    지연시간을 줄이고, 향상된 성능을 제공합니다.
  • C. cache frequently changing data without reaching the origin server.
    원본서버에 도달하지 않고 자주 변경되는 데이터를 캐시합니다.
    자주 변경되는 데이터를 캐시하지 않고, 정적인 데이터를 캐시한다.
  • D. refresh data changes daily.
    매일 변경된 데이터를 refresh 합니다.

문제 22

Which of the following can limit Amazon Storage Service (Amazon S3) bucket access to specific users?

다음 중 특정 사용자가 S3 버킷에 접근하는 것을 제한할 수 있는 것은 무엇인가요?

  • A. A public and private key-pair
    EC2접근용 키 생성. 공용키-개인키 방식.
  • B. Amazon Inspector
    AWS에 배포된 애플리케이션의 보안 및 규정 준수를 개선하는데 도움이 되는 자동 보안 평가 서비스
    애플리케이션의 노출, 취약성 및 편차를 자동으로 평가한다.
  • C. AWS Identity and Access Management (IAM) policies
    AWS IAM은 AWS 서비스 및 리소스에 대한 액세스를 안전하게 관리한다.
  • D. Security Groups
    Virtual Private Cloud에서 보안 그룹은 제어 인-아웃 바운드 트래픽에 대한 가상 방화벽 역할을 한다.

문제 23

Which of the following security-related actions are available at no cost?

다음 중 무료로 사용할 수 있는 보안 관련 조치는 무엇입니까?

  • A. Calling AWS Support
    AWS 지원에 전화하기
  • B. Contacting AWS Professional Services to request a workshop
    AWS Professional Services에 연락하여 워크샵 요청하기
  • C. Accessing forums, blogs, and whitepapers
    포럼, 블로그, 백서 참고하기
  • D. Attending AWS classes at a local university
    지역 대학의 AWS 수업 참석하기

문제 24

Which of the Reserved Instance (RI) pricing models can change the attributes of the RI as long as the exchange results in the creation of RIs of equal or greater value?

어떤 예약 인스턴스 가격 모델이 (교환으로 RI의 가치가가 같거나 그 이상인 경우라면) RI의 속성을 바꿀 수 있나요?

  • A. Dedicated RIs
  • B. Scheduled RIs
  • C. Convertible RIs
  • D. Standard RIs

RI의 유형을 여러가지이다. 요구사항에 따라 적절한 유형을 선택할 수 있다.

Standard RIs: On-Demand방식과 비교하면 최대 72% 저렴하다. 항상 구동되는 경우 적절하다. 스탠다드 RI는 속성을 수정할 수 만 있다. 가용영역 및 범위, 네트워크 플랫폼, 인스턴스 크기.

Convertible RIs: 컨버터블 RI는 수정할수 있을 뿐만 아니라 교환할 수 있다. 비슷하거나 그 이상되는 RI로 교환하여, 적용될 인스턴스를 유연하게 변경할 수 있습니다. 더 낮은 가치의 인스턴스로 변경하는 경우, 차액에 해당하는 비용 결제가 필요할 수 있습니다. 온디맨드와 비교해서 최대 54%할인됩니다 . 꾸준히 작동하는 상태에 적합합니다.

Scheduled RIs: 예약한 기간 내에 작동될 수 있습니다.

 

문제 25

Which AWS feature will reduce the customer's total cost of ownership (TCO)?

고객의 총 소유 비용을 줄이는 AWS 특징은 무엇일까요?

  • A. Shared responsibility security model
    공동 책임 모델
  • B. Single tenancy
    Single Tenacy는 리소스를 한 고객에게 제공하는 구조이다.
  • C. Elastic computing
    유연한 컴퓨팅.
  • D. Encryption
    암호화.

문제 26

Which of the following services will automatically scale with an expected increase in web traffic?

다음 중 웹 트래픽 증가를 예상하여, 자동으로 스케일(규모 변경)하는 서비스는 무엇인가요?

  • A. AWS CodePipeline
    빠르고 안정적인 업데이트를 위한 지속적 전달( CD ) 파이프라인 자동화. 빌드 테스트 배포 단계를 자동화한다.
  • B. Elastic Load Balancing
     확장성, 성능 및 보안을 보장하여 애플리케이션의 내결함성을 확보한다. 들어오는 애플리케이션 트래픽을 EC2인스턴스, 컨테이너, IP주소, 람다 함수와 같은 여러 대상에 자동 분산시킨다.
  • C. Amazon EBS - EC2용 저장 볼륨.
  • D. AWS Direct Connect
    온프레미스에서 AWS로 전용 네트워크 연결을 쉽게 설정할 수 있는 클라우드 서비스 솔루션. 네트워크 비용을 줄이고, 대역폭 처리량을 늘려 안정성을 확보한다.

문제 27

Where are AWS compliance documents, such as an SOC 1 report, located?

SOC 1 보고서와 같은  AWS 규정 준수 문서는 어디에 있습니까?

  • A. Amazon Inspector - AWS에 배포된 애플리케이션 자동 보안 평가 서비스
  • B. AWS CloudTrail - 사용자 활동 및 API 사용 추적. 계정활동과 관련된 작업을 모니터링.
  • C. AWS Artifact
    AWS 규정 준수 보고서에 접근할 수 있도록 무료로 제공되는 셀프 서비스 포털. SOC 보고서와 PCI보고서, 그리고 여러 지역의 기구, 기관에서의 보안관련 인증서가 포함되어있다.
  • D. AWS Certificate Manager
    AWS 서비스와 연결된 내부 리소스에 사용할 퍼블릭 및 프라이빗 SSL/TLS 인증서를 손쉽게 프로비저닝, 관리 및 배포. 

프로비저닝은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.

 

문제 28

Under the AWS shared responsibility model, which of the following activities are the customer's responsibility? (Choose two.)

아래 공동 책임 모델에서 고객의 책임은 무엇일까요? 정답 2개.

  • A. Patching operating system components for Amazon Relational Database Server (Amazon RDS)
  • B. Encrypting data on the client-side
  • C. Training the data center staff
  • D. Configuring Network Access Control Lists (ACL)
  • E. Maintaining environmental controls within a data center

접근 제어 목록(access control list, ACL)은 객체에 적용되어 있는 허가 목록을 말한다. 이 목록은 누가 또는 무엇이 객체 접근 허가를 받는지, 어떠한 작업이 객체에 수행되도록 허가를 받을지를 지정하고 있다.

 

문제 29

Which is a recommended pattern for designing a highly available architecture on AWS?

AWS에서 고 가용성 아키텍처를 설계하는데 권장되는 패턴은 무엇인가요?

  • A. Ensure that components have low-latency network connectivity.
  • B. Run enough Amazon EC2 instances to operate at peak load.
  • C. Ensure that the application is designed to accommodate failure of any single component.
    응용 프로그램이 단일 구성 요소의 오류를 수용하도록 설계되었는지 확인합니다.
    단일 컴포넌트의 에러도 수용할 수 있도록 설계되었는지 확인한다.
  • D. Use a monolithic application that handles all operations.

고가용성이란 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다. 

 

문제 30

According to best practices, how should an application be designed to run in the AWS Cloud?

모범사례에 따르면, AWS클라우드에서 실행될 애플리케이션은 어떻게 디자인되어야할까요?

  • A. Use tighly coupled components.
  • B. Use loosely coupled components.
    종속적이지 않아야한다.
  • C. Use infrequently coupled components.
  • D. Use frequently coupled components.

 

목적

회사에서 AWS를 도입하기 시작.

 

Cloud Practitioner는 가장 기본 자격증.

 

이 자격증은 AWS 클라우드에 대한 전반적인 이해가 있고 관련 지식과 기술을 갖춘 사람을 대상으로 한다.

 

아마존 웹 서비스에 나와있는 자격증으로 검증 되는 능력은 다음과 같다.

  • AWS 클라우드와 기본 글로벌 인프라가 무엇인지 정의
  • 기본 AWS 클라우드 아키텍처 원칙을 설명
  • AWS 클라우드 가치 제안을 설명
  • AWS 플랫폼의 주요 서비스 및 관련 일반 사용 사례를 설명 (예를 들면 컴퓨팅, 분석 등에 사용하는 것)
  • AWS 플랫폼의 기본 보안 및 규정 준수 측면과 공동 보안 모델을 설명
  • 결제, 계정 관리 및 요금 모델을 정의
  • 설명서 또는 기술 지원 소스를 식별 (예: 백서, 지원 티켓 등)
  • AWS 클라우드에서 배포 및 운영할 때의 기본/주요 특성 설명

 

공부 방향

시험 후기를 보면

 

1. 어떤 서비스/정책/아키텍처의 특징을 나열하고, 이게 어떤 서비스/정책/아키텍처인지 고르기

2. A에 대한 설명으로 맞는 것은?

 

이런식으로 출제된다고 한다.

 

단순하기 때문에 깊게 공부할 필요가 없다고한다.

그저 열심히 읽고 외우면 된다.

 

넓고 얕은 수준으로 AWS의 서비스, 아키텍쳐, 보안등에 대한 특징을 암기하도록 한다.

시험범위가 생각보다 넓기 때문에, 백서를 한번 보는 것이 좋다.

 

한글 백서 1회, 영문 최신 백서 1회

 

단순 시험 합격만을 최우선으로 한다면, AWS강좌와 한글 백서를 통해 많은 내용을 정리하자.

AWS 서비스 뿐만 아니라 아키텍처, 비용, 지원 등과 같이 전범위적으로 숙지해야한다.

구버전 https://www.aws.training/Details/Curriculum?id=18404

한글 강좌 https://www.aws.training/Details/Curriculum?id=32442

 

https://brunch.co.kr/@moondol/313

 

아마존웹서비스(AWS) 기초 자격증 시험 합격 후기

AWS Certified Cloud Practitioner 이번엔 합격! | https://brunch.co.kr/@moondol/308 지난번 불합격했던 아마존웹서비스(AWS) 기초 자격증 시험을 다시 봤습니다. 영어로는 AWS Certified Cloud Practitioner입니다. 한 번 시�

brunch.co.kr

 

계획

합격 후기들을 보면서, 일단 아마존에서 제공하는 강의를 듣고 백서를 통해 복습하고 덤프를 구해서 풀어보도록 한다.

회사에서 제공하는 강의도 있는데, 일단 필요하다면 그것까지 듣는걸로..

부족하다면 Udemy도 확인해보자...

 

아래 사이트에서 문제 풀어보는 게 좋다고 한다

www.examtopics.com/exams/amazon/aws-certified-cloud-practitioner/view/

 

AWS Certified Cloud Practitioner Exam – Free Actual Q&As, Page 1 | ExamTopics

Which service stores objects, provides real-time access to those objects, and offers versioning and lifecycle capabilities? A. Amazon Glacier B. AWS Storage Gateway C. Amazon S3 D. Amazon EBS Reveal Solution Hide Solution   Discussion   9 Correct Answer:

www.examtopics.com

 

TODO:

아마존 제공 강의듣기

백서 구해서 암기( 한글, 영문 모두)

덤프 풀어보기

부족하다면 Udemy..?

 

 

한글 백서

https://mlmlml.tistory.com/4

 

AWS 한글백서

한글 버전 백서가 2017버전이후로 업데이트 되지 않아 조금 오래된 감이 있지만 큰 틀의 변화는 없기 때문에 Cloud Practitioner와 Solutions Architect Association 자격증을 공부하는 입장에서 큰 도움이 된다

mlmlml.tistory.com

 

PL/SQL이란?

Procedural Language / Structured Query Language의 약어입니다. 바로 해석하자면 절차적 언어/ 구조화 질의어.

 

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위한 목적으로 설계된 프로그래밍 언어인데,

PL/SQL은 오라클이 SQL에 절차적 요소를 추가하여 만든 절차적 프로그래밍 언어입니다.

 

PL/SQL에는 조건문과 반복문과 같은 절차적 요소가 포함되어 있습니다. 상수, 변수, 프로시저, 함수, 트리거등을 선언할 수 있고, 예외처리가 가능합니다. 컬렉션(연관배열, 중첩 테이블, 가변배열)도 존재합니다.

 

PL/SQL의 일반적인 구문은 ADA와 Pascal 언어를 기반으로 만들어졌습니다.

 

-환경

PL/SQL 프로그램을 실행하려면, 오라클 RDBMS Server가 설치되어있어야합니다.

 

JSON과 직렬화

웹서버와 통신하지 않거나 데이터를 저장하지 않는 모바일 앱은 상상이 가지 않습니다. 네트워크에 연결되는 앱을 만드는 경우에, JSON을 사용해야하는 기회가 찾아옵니다.

 

이 가이드는 Flutter에서 JSON을 사용하는 방법을 살펴봅니다. 다양한 시나리오에서 사용하기 위한 JSON 솔루션과 왜 그렇게 하는지에 대해서 설명합니다.

 

용어 :

인코딩과 직렬화 - 데이터 구조를 문자열로 바꾸는 것.

디코딩과 역직렬화 - 반대로, 문자열을 데이터 구조로 바꾸는 것.

하지만, 직렬화는 일반적으로 데이터 구조를 읽기 쉬운 형식으로 변환하는 전체 프로세스를 말합니다.

혼동을 피하기 위해 이 문서는 전체 프로세스를 직렬화라고 하고, 특정 프로세스를 찝어서 언급할 때는 인코딩이나 디코딩이라고 합니다.

 

 

나에게 맞는 JSON 직렬화 방법은 무엇일까?

이 글은 JSON을 다루기 위한 두가지 방법을 다룹니다.

  • 수동 직렬화
  • 코드 생성을 사용한 자동 직렬화

프로젝트마다 상황이 다릅니다. 개념을 확인하기 위한 작은 프로젝트나 프로토타입 프로젝트의 경우에는 코드 생성기를 사용하는게 과할 수 있습니다. JSON모델이 많은 앱은 손으로 인코딩하는 것이 지루하고 반복적이라 많은 에러가 발생할 수 있습니다.

 

 

소규모 프로젝트에는 수동 직렬화를 사용하세요.

수동 JSON 디코딩은 dart:convert의 내장 JSON 디코더를 사용하는 것을 말합니다. JSON문자열을 jsonDecoder() 함수를 사용해서 Map<String, dynamic>을 받아 원하는 값을 찾는 것을 수동 JSON 디코딩이라 합니다. 이는 외부 종속성을 추가하지 않아도 되고 특별히 설정할 것도 없습니다. 빠르게 데모용 프로젝트에 사용하기 좋습니다.

 

프로젝트가 커지면 수동 디코딩이 제대로 작동하지 않습니다. 디코딩 로직을 직접 작성하면 관리하기 어렵고 오류가 발생하기 쉽습니다. 존재하지 않는 JSON 필드에 접근할 때 오타가 있으면 실행중에 코드에서 오류가 발생합니다.

 

프로젝트에 JSON 모델이 별로 없는 경우 수동 직렬화를 사용하는 것이 좋습니다. 수동 인코딩의 예는 dart:convert를 사용한 수동 직렬화를 참고하세요.

 

 

중대형 프로젝트에는 코드생성을 사용하세요.

코드 생성을 사용한 JSON 직렬화는 외부 라이브러리가 인코딩 코드를 자동으로 생성하게 하는 것을 의미합니다. 초기 설정을 하고, 모델 클래스로부터 코드를 만드는 file watcher를 실행합니다. 예를 들어 json_serializablebuilt_value는 외부 라이브러리의 하나입니다.

 

이러한 방법은 큰 프로젝트에 적합합니다. 직렬화를 위한 상용구 코드를 직접 작성하지 않아도 되고, JSON필드에 접근하는 코드에 오타가 있다면 컴파일 할때 발견되어 문제가 생기지 않습니다. 코드 생성의 단점은 초기 설정이 필요하다는 것입니다. 그리고 생성된 소스파일은 프로젝트 탐색기를 보기 힘들게 할 수 있습니다.

 

중간 규모 이상의 프로젝트인 경우 JSON직렬화를 위해 코드 생성을 사용하기 원할 것 입니다. 코드 생성을 통한 JSON 인코딩의 예제는 코드생성 라이브러리를 통한 JSON 직렬화를 참고하세요.

 

 

Flutter에 GSON/Jackson/Moshi와 같은 것이 있나요?

간단히 말하면 없습니다.

 

이런 라이브러리는 runtime reflection을 사용해야합니다. 근데 runtime reflection은 플루터에서 사용되지 않습니다. Runtime reflection은 Dart가 오랬동안 지원해왔던 Tree shaking을 방해합니다. Tree shaking을 사용하면 릴리즈용으로 빌드할 때 사용하지않는 코드를 shake off(흔들어서 떨어뜨리는 의미)할 수 있습니다. 이렇게하면 앱의 크기가 크게 최적화됩니다.

 

reflection은 모든 코드를 암시적으로 사용하기 때문에 tree shaking을 어렵게만듭니다. tree shaking용 툴은 runtime에 사용되지 않는 코드를 알기 힘들어져 제거하기 어려워집니다. 그래서 reflection을 사용하면 앱 크기를 최적하하기 어렵습니다.

 

Flutter에서 runtime reflection을 사용할 수 없지만, 몇몇 라이브러리는 유사한 쉬운 API를 제공합니다. 이는 코드 생성기반입니다. 이 방식은 코드 생성 라이브러리를 다루는 섹션에서 자세히 설명합니다.

 

 

dart:convert를 사용한 수동으로 JSON 직렬화하기

Flutter의 기본 JSON 직렬화는 간단합니다. Flutter에는 간단한 JSON 인코더와 디코더가 포함된 내장 라이브러리 dart:convert 라이브러리가 있습니다.

 

다음 샘플 JSON은 간단한 유저 모델을 구현한 것 입니다.

{
  "name": "John Smith",
  "email": "john@example.com"
}

 

dart:convert를 사용하면, 당신은 JSON모델을 두가지 방법으로 직렬화할 수 있습니다.

 

 

JSON 인라인 직렬화

dart:convert문서를 보면, JSON을 jsonDecode()를 사용해서 디코드할 수 있는 것을 확인할 수 있다. JSON 문자열을 매개변수로 사용한다.

 

Map<String, dynamic> user = jsonDecode(jsonString);

print('Howdy, ${user['name']}!');
print('We sent the verification link to ${user['email']}.');

 

아쉽게도, jsonDecode()Map<String, dynamic>를 반환합니다. 즉, 런타임까지 값의 타입을 알 수 없습니다. 이 방법을 사용하면 정적 타입 언어 기능(타입 안전, 자동완성 그리고 가장 중요한 컴파일 타임 예외)을 대부분 사용할 수 없습니다. 코드에 오류가 생기기 쉬워집니다.

 

예를 들어, 이름이나 이메일 필드에 접근할 때마다 오타가 발생할 수 있습니다. JSON이 맵구조이기 때문에 컴파일러가 발견하지 못하는 오타입니다.

 

 

모델 클래스 내에서 JSON 직렬화하기

유저라는 일반적인 모델 클레스를 사용해 위에서 언급된 문제를 해결해봅시다.

유저 클래스 안에서 다음과 같은 것이 있습니다:

  • 맵 구조로부터 새로운 인스턴스를 만들어내는 User.fromJson() 생성자.
  • 유저 인스턴스를 map으로 바꾸는 toJson()메서드.

 

이 방식을 사용하면, 타입 안전, 필드 자동완성 그리고 컴파일 타임 예외가 가능해집니다. 올바른 문자열이 아니거나, 필드를 정수로 처리하면 런타임에 앱이 중단되는 것이 아니라 컴파일 되지 않습니다.

 

user.dart

class User {
  final String name;
  final String email;

  User(this.name, this.email);

  User.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        email = json['email'];

  Map<String, dynamic> toJson() =>
    {
      'name': name,
      'email': email,
    };
}

 

디코딩 로직의 책임은 이제 모델에게 넘어갔습니다. 이 새로운 방식을 사용하면 유저를 쉽게 디코드할 수 있습니다.

 

Map userMap = jsonDecode(jsonString);
var user = User.fromJson(userMap);

print('Howdy, ${user.name}!');
print('We sent the verification link to ${user.email}.');

 

유저를 인코딩하려면 User객체를 jsonEncode()함수에 전달하세요. jsonEncode()로 작동되므로, toJson()메서드를 호출하지 않아도 됩니다.

 

String json = jsonEncode(user);

 

이 방식을 사용하면 위 메서드를 호출하는 부분의 코드는 JSON 직렬화에 대해 전혀 신경쓸 필요가 없습니다. 하지만 모델 클래스는 신경써야할 것이 남아있습니다. 생성된 앱에서, 직렬화가 올바르게 작동하는지 확인하고 싶을 것 입니다. 실제로 User.fromJson()User.toJson() 메서드가 올바르게 작동하는지 확인하기 위해 유닛테스트가 필요합니다.

 

The cookbook contains a more comprehensive worked example of using JSON model classes, using an isolate to parse the JSON file on a background thread. This approach is ideal if you need your app to remain responsive while the JSON file is being decoded.

 

그러나 실제 시나리오가 항상 간단하지 않습니다. JSON API 결과가 자체 모델클래스를 통해 파싱해야하는 중첩된 JSON 객체 클래스를 포함해 JSON API 결과가 더 복잡한 경우도 있습니다.

 

JSON 인코딩과 디코딩을 처리해주는 무언가가 있다면 좋을 것 입니다. 다행히도 있습니다.

 

 

코드생성 라이브러리를 사용한 JSON 직렬화

사용할 수 있는 여러가지 라이브러리가 있지만, 이 가이드에서는 json_serializable를 사용합니다. JSON 직렬화 boilplate를 만들어 주는 자동 소스코드 생성기 입니다.

 

라이브러리 선택하기: pub.dev에 JSON 직렬화 코드를 생성하기 위한 Flutter Favorite 패키지는 두개가 있습니다. json_serializablebuilt_value. 두 패키지 중에서 어떤것을 골라야 할까요? json_serializable 패키지는 annotation을 사용해 일반 클래스를 직렬화 합니다. built_value 패키지는 immutable value classes를 정의하는 고 수준의 방법을 제공합니다.

 

직렬화 코드가 수동으로 작성되거나 유지관리 되지 않으므로, 런타임에 직렬화 오류가 발생할 위험을 줄입니다.

 

 

프로젝트에서 json_serializable 설정하기

프로젝트에 json_serializable을 추함하려면 하나의 정규 종속성과 두개의 개발 종속성이 필요합니다. 간단히 말해 개발 종속성은 앱 소스코드에 포함되지 않은 개발환경에서만 사용되는 종속성입니다.

 

JSON 직렬화할 수 있는 예제에서 pubspec file파일을 보면 이러한 필수적인 종속성의 최신 버전을 볼 수 있습니다.

 

pubspec.yaml

dependencies:
  # Your other regular dependencies here
  json_annotation: <latest_version>

dev_dependencies:
  # Your other dev_dependencies here
  build_runner: <latest_version>
  json_serializable: <latest_version>

프로젝트 루트 폴더에서 flutter pub get을 터미널에서 입력하거나, 에디터에서 패키지 가져오기를 클릭해 새로운 종속성을 사용할 수 있게 해주세요.

 

 

json_serializable 방식으로 클래스 모델 작성하기

다음은 유저 클래스를 json_serializable 클래스로 변환하는 방법을 보여줍니다. 코드의 단순성을 위해 이전 예제의 단순화된 JSON 모델을 사용합니다.

 

user.dart

import 'package:json_annotation/json_annotation.dart';

/// This allows the `User` class to access private members in
/// the generated file. The value for this is *.g.dart, where
/// the star denotes the source file name.
part 'user.g.dart';

/// An annotation for the code generator to know that this class needs the
/// JSON serialization logic to be generated.
@JsonSerializable()

class User {
  User(this.name, this.email);

  String name;
  String email;

  /// A necessary factory constructor for creating a new User instance
  /// from a map. Pass the map to the generated `_$UserFromJson()` constructor.
  /// The constructor is named after the source class, in this case, User.
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  /// `toJson` is the convention for a class to declare support for serialization
  /// to JSON. The implementation simply calls the private, generated
  /// helper method `_$UserToJson`.
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

 

이 설정으로 소스코드 생성기는 JSON에서 이름, 이메일 필드를 인코딩/디코딩하기 위한 코드를 생성합니다.

 

명명법을 바꾸고싶다면 쉽게 설정할 수 있습니다. 예를들어, API가 snake_case를 사용하여 객체를 반환하고 모델에서 lowerCamelCase를 사용하려고 하는 경우 name 매개변수와 함께 @JsonKey 주석을 사용할 수 있습니다.

 

/// Tell json_serializable that "registration_date_millis" should be
/// mapped to this property.
@JsonKey(name: 'registration_date_millis')
final int registrationDateMillis;

 

가장 좋은 방법은 서버와 클라이언트 모두 동일한 명명법을 사용하는 것입니다. @JsonSerializable()은 dart 필드들을 JSON 키로 변환하기 위해 fieldRename enum을 제공합니다.

 

@JsonSerializable(fieldRename: FieldRename.snake)를 수정하는 것은 각 필드에 @JsonKey(name: '')를 추가하는것과 같습니다.

 

때때로 서버 데이터가 불확실하므로 클라이언트의 데이터를 확인하고 보호해야합니다. 일반적으로 사용되는 @Jsonkey annotation은 다음과 같습니다.

/// Tell json_serializable to use "defaultValue" if the JSON doesn't
/// contain this key or if the value is `null`.
@JsonKey(defaultValue: false)
final bool isAdult;

/// When `true` tell json_serializable that JSON must contain the key, 
/// If the key doesn't exist, an exception is thrown.
@JsonKey(required: true)
final String id;

/// When `true` tell json_serializable that generated code should 
/// ignore this field completely. 
@JsonKey(ignore: true)
final String verificationCode;

 

코드 생성 유틸리티 실행하기

json_serializable클래스를 처음 만들면, 아래 이미지에 표시된 것과 유사한 오류가 발생합니다.

 

IDE warning when the generated code for a model class does not exist yet.

 

이런 오류는 정상입니다. 단순히 모델 클래스에 대해 생성된 코드가 없어서 생긴 오류입니다. 이 문제를 해결하려면 직렬화 boilerplate를 작성하는 코드 생성기를 실행하세요.

 

코드 생성기를 실행하는 방법에는 두가지가 있습니다.

 

 

일회성 코드 생성

터미널로 프로젝트 루트에서 flutter pub run build_runner build빌드를 실행하면 필요할 때마다 JSON직렬화 코드를 생성하세요. 이렇게하면 소스파일을 거쳐 관련 파일을 선택하고 필요한 직렬화 코드를 생성하는 일회성 빌드가 작동합니다.

 

이 방법은 편리하지만, 모델클래스를 변경할 때마다 빌드를 수동으로 실행하지 않는 경우에 좋습니다.

 

 

지속적으로 코드 생성하기

watcher는 소스코드 생성 프로세스를 편리하게 만들어 줍니다. 프로젝트 파일의 변경사항을 감시하고 필요한 경우 파일을 자동으로 작성합니다. 프로젝트 루트에서 flutter pub run build_runner watch를 실행해 watcher를 작동시킵니다.

 

watcher를 작동시키고 백그라운드에 두어도 괜찮습니다.

 

json_serializable 모델 사용하기

JSON문자열을 json_serializable 방식으로 디코딩하기 위해서, 기존 코드를 변경할 필요가 없습니다.

 

Map userMap = jsonDecode(jsonString);
var user = User.fromJson(userMap);

 

인코딩도 마찬가지 입니다. 호출 API는 이전과 같습니다.

 

String json = jsonEncode(user);

 

json_serializable을 사용하면 수동 JSON를 직렬화를 잊을 수 있습니다. 소스코드 생성기는 user.g.dart라는 파일을 만듭니다. 이 파일은 직렬화에 필요한 모든 로직을 가지고 있습니다. 직렬화가 잘 작동하는지 확인하기위해 더이상 자동화된 테스트를 작성할 필요가 없습니다. 이제 직렬화가 제대로 작동하는지 확인하는 것은 라이브러리의 책임입니다.

 

 

중첩 클래스를 위한 코드생성하기

클래스 안에 중첩클래스가 있을 수 있습니다. 이런 경우, (파이어베이스와 같은)서비스의 인수로 JSON형식의 클래스를 전달하려 하면, Invalid argument(잘못된 인수) 오류를 경험할 수 있습니다.

 

다음 Address 클래스를 참고하세요:

 

import 'package:json_annotation/json_annotation.dart';
part 'address.g.dart';

@JsonSerializable()
class Address {
  String street;
  String city;

  Address(this.street, this.city);

  factory Address.fromJson(Map<String, dynamic> json) => _$AddressFromJson(json);
  Map<String, dynamic> toJson() => _$AddressToJson(this);
}

 

주소 클래스는 유저 클래스안에 중첩됩니다.

 

import 'address.dart';
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';

@JsonSerializable()
class User {
  String firstName;
  Address address;

  User(this.firstName, this.address);

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

 

flutter pub run build_runner build를 실행하면 *.g.dart파일이 생성되지만 _$UserToJson() 함수는 다음과 같습니다:

 

(
Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
  'firstName': instance.firstName,
  'address': instance.address,
};

 

괜찮아 보이지만, 유저 객체에서 print()를 사용하는 경우:

 

Address address = Address("My st.", "New York");
User user = User("John", address);
print(user.toJson());

 

 

그 결과는 다음과 같습니다.:

{name: John, address: Instance of 'address'}

 

아마 당신이 원하는 것은 다음일 것 입니다:

{name: John, address: {street: My st., city: New York}}

 

이 작업을 수행하려면, 클래스에 @JsonSerializable() annotation을 통해 explicitToJson: true를 전달하세요.

 

import 'address.dart';
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';

@JsonSerializable(explicitToJson: true)
class User {
  String firstName;
  Address address;

  User(this.firstName, this.address);

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

 

자세한 정보는, json_annotation 패키지의 JsonSerializable 클래스에서 explicitToJson를 참조하세요.

 

 

추가로 참고할 문서

자세한 내용은 다음 문서를 참고하세요.

출처 : https://flutter.dev/docs/development/data-and-backend/json

 

JSON and serialization

How to use JSON with Flutter.

flutter.dev

 

문서를 읽다보니 dart는 tree shaking을 지원한다는 문장이 있었는데, tree shaking의 뜻을 알지 못했다.

 

프로젝트에 있지만 사용되지 않은 (죽은)코드를 제거하는 것을 말한다.

전체 라이브러리를 가져와서 함수를 하나만 사용하는 경우, 컴파일 코드의 크기를 줄여준다.

 

죽은 코드를 제거하여, 코드 크기를 줄이고 성능을 향상시킨다.

개발을 위해 문서를 찾다보면 종종 만나는 용어.

단순 번역을 하면 상용구 코드라고 나온다.

 

구글링 결과

단순한 결과를 얻기위해 반복적으로 사용되는 코드라고 한다.

 

자바에서 getter, setter 메서드와 같이 단순한 결과를 얻기 위해, 변하지 않고 반복적으로 사용되는 코드를 말한다.

아래 코드에서 변수(name, owner) 선언빼고는 모두 보일러플레이트 코드라고 할 수 있다.

public class Pet {
    private PetName name;
    private Person owner;

    public Pet(PetName name, Person owner) {
        this.name = name;
        this.owner = owner;
    }

    public PetName getName() {
        return name;
    }

    public void setName(PetName name) {
        this.name = name;
    }

    public Person getOwner() {
        return owner;
    }

    public void setOwner(Person owner) {
        this.owner = owner;
    }
}

 

스택오버플로우에서 찾은 여러 방법 중 이게 제일 깔끔하게 작동했다..

 

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    View view = getCurrentFocus();
    if (view != null && (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) && view instanceof EditText && !view.getClass().getName().startsWith("android.webkit.")) {
        int scrcoords[] = new int[2];
        view.getLocationOnScreen(scrcoords);
        float x = ev.getRawX() + view.getLeft() - scrcoords[0];
        float y = ev.getRawY() + view.getTop() - scrcoords[1];
        if (x < view.getLeft() || x > view.getRight() || y < view.getTop() || y > view.getBottom())
        ((InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow((this.getWindow().getDecorView().getApplicationWindowToken()), 0);
    }
    return super.dispatchTouchEvent(ev);
}

 

출처:https://stackoverflow.com/questions/8697499/hide-keyboard-when-user-taps-anywhere-else-on-the-screen-in-android/8697635

 

hide keyboard when user taps anywhere else on the screen in android

I need to hide the softkeypad in android when user click on anywhere other than a Edittext. There are many help for iphone but not for android. I tried this code but its not working :( final

stackoverflow.com

 

간단한 예제를 통해 6분만에 이해해보자.

 

콜백이란?

간단: 다른 함수의 실행이 완료된 후 실행되는 함수입니다. - call after라고 하는 사람도 있음.

 

좀 더 자세히: 자바스크립트에서 함수는 객체입니다. 그렇기에, 함수는 다른 함수의 인자가 될 수 있고 반환될 수 도 있습니다. 콜백 함수를 호출하는 함수를 고차함수라고 하며, 인자로 전달된 함수를 콜백함수라 합니다.

 

더 자세히 알아보기 위해 예제를 살펴보겠습니다.

 

왜 콜백이 필요할까요?

중요한 이유중 하나 - 자바스크립트는 이벤트 중심 언어입니다. 이벤트를 수신하는동안 계속 작동합니다.

기본 예제를 봅시다:

 

function first(){
  console.log(1);
}
function second(){
  console.log(2);
}
first();
second();

당신이 예상하듯이 first함수가 먼저 실행되고 second가 실행되어 다음과같이 콘솔에 출력됩니다.

1
2

 

지금까지 잘 작동했습니다.

 

그런데, 함수 first에 즉시 실행할 수 없는 코드가 포함되어있다면 어떨까요? 예를 들면, 요청을 보낸뒤 응답을 기다려야하는 API 호출처럼...

 

이러한 상황을 시뮬레이션하기 위해 일정시간이 지난 후 함수를 호출하는 Javascript의 setTimeout을 사용합니다. API 호출을 시뮬레이션하기 위해 500ms동안 함수를 지연시킵니다. 그 코드는 다음과 같습니다:

 

function first(){
  // Simulate a code delay
  setTimeout( function(){
    console.log(1);
  }, 500 );
}
function second(){
  console.log(2);
}
first();
second();

setTimeout이 어떻게 작동하는지는 지금 중요하지 않습니다. 중요한 것은 우리가 500ms지연시킨 console.log(1)의 결과를 확인하는 것이죠. 이제 함수를 호출하면 어떻게 될까요?

first();
second();

2
1

first를 먼저 호출했지만 second함수 이후에 결과가 출력되었습니다.

 

순서대로 함수가 호출되지 않고, Javascript는 first의 응답을 기다리지 않고 second를 실행합니다.

 

당신은 순서대로 호출하고 싶더라도 일반적인 방법으로는 할 수 없음을 확인했습니다.

콜백은 다른 코드의 작동이 끝난 뒤 실행되도록 할 수 있습니다.

 

 

콜백 만들기

콜백을 만들어 봅시다.

 

먼저 크롬 개발자 콘솔을 열고(윈도우: Ctrl + Shift + J, 맥: Cmd + Option + J) 콘솔에 다음과 같이 함수를 선언하세요.

function doHomework(subject) {
  alert(`Starting my ${subject} homework.`);
}

 

위의 doHomework 함수는 과목이라는 하나의 변수를 가집니다. 콘솔에 다음과 같이 입력하여 함수를 호출하세요.

 

doHomework('math');
// Alerts: Starting my math homework.

 

이제 콜백함수를 추가해봅시다. doHomework 함수의 매개변수로 콜백함수를 전달할 수 있습니다.

 

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}

doHomework('math', function() {
  alert('Finished my homework');
});

 

위의 코드를 콘솔에 입력하면 볼수 있듯이, 경고창이 2회 뜨게됩니다.: starting homework 경고와 finished homework

 

콜백 함수는 다음과 같이 따로 정의될 수 있습니다.

 

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}
function alertFinished(){
  alert('Finished my homework');
}
doHomework('math', alertFinished);

 

 

콜백함수는 어떤 작업이 끝나고 나서 작동하길 원하는 작업이 있는 경우 사용합니다.

 

 

출처:

https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced

 

JavaScript: What the heck is a Callback?

Learn and understand the basics of callbacks in just 6 minutes with easy examples.

codeburst.io

 

'개발 > 개념' 카테고리의 다른 글

SOLID 원칙을 위한 완전한(Solid) 가이드  (0) 2020.03.24

+ Recent posts