클라우드와 컨테이너의 기초

컨테이너를 실현하는 네임스페이스와 cgroups, 이미지와 레이어와 카피 온 라이트, Dockerfile의 명령(RUN·CMD·ENTRYPOINT·COPY), 빌드 캐시와 명령의 순서, 포트 공개, 볼륨과 바인드 마운트, 태그와 다이제스트, 멀티 스테이지 빌드, Kubernetes의 Pod·Deployment·Service·Ingress·Secret, 조정(reconcile)과 롤링 업데이트, readiness/liveness 프로브, 오토 스케일링 계산, requests와 limits, 공동 책임 모델, 가용 영역, 서버리스, 스토리지의 종류, 종량 과금과 예약의 손익분기점, 데이터 전송 요금, IaC, 이뮤터블 인프라스트럭처, 블루-그린과 카나리, 관측 가능성을 객관식 문제로 학습합니다.

10문제 연습하기이 분야에서 무작위 10문제 · 약 5분 이 분야 연습하기이 분야의 모든 문제를 무작위 순서로 풀어요 취약 문제최근에 틀린 문제만 다시 풀어요

클라우드와 컨테이너의 기초: 핵심 정리

웹 서비스나 사내 시스템의 상당수는 이제 클라우드 위에서, 컨테이너로 묶은 애플리케이션으로 동작합니다. 컨테이너는 호스트 OS의 커널을 공유하면서 프로세스를 격리하는 구조로, Docker로 이미지를 만들고 Kubernetes 같은 기반으로 다수의 머신에 배치하여 개수를 유지하고 업데이트합니다.

여기서는 네임스페이스와 cgroups, 이미지의 레이어와 카피 온 라이트, Dockerfile의 명령과 빌드 캐시, 포트 공개, 볼륨과 바인드 마운트, 태그와 다이제스트, 멀티 스테이지 빌드에서 시작하여 Kubernetes의 Pod·Deployment·Service·Ingress·Secret, 바람직한 상태의 선언과 조정(reconcile), 롤링 업데이트의 계산, readiness 프로브와 liveness 프로브, HorizontalPodAutoscaler의 계산, requests와 limits와 Pod의 배치를 다룹니다. 이어서 클라우드의 공동 책임 모델, 리전과 가용 영역, 서버리스와 콜드 스타트, 블록·파일·오브젝트 스토리지, 종량 과금 요금과 예약의 손익분기점, 데이터 전송 요금, IaC와 이뮤터블 인프라스트럭처, 블루-그린 배포와 카나리 릴리스, 산출물을 한 번만 빌드하는 사고방식, 환경 변수에 의한 설정, 관측 가능성을 확인합니다. 계산 문제의 값은 오답 선택지의 값까지 포함하여 Python으로 계산해 확인했습니다. 가격은 모두 가상의 값입니다. 하이퍼바이저와 컨테이너와 가상 머신의 차이는 'OS와 하드웨어', IaaS·PaaS·SaaS, 스케일 아웃, 이중화, 라이브 마이그레이션, CDN은 '시스템 구성과 신뢰성 설계', 로드 밸런서와 세션은 '웹 기술 기초', CI/CD는 '소프트웨어 개발과 프로젝트 관리', SLA는 '서비스 관리와 시스템 감사', 셸과 환경 변수는 'Linux와 커맨드 라인 기초' 분야에서 다룹니다.

클라우드와 컨테이너의 기초 전체 문제 (40)

  1. Linux의 컨테이너를 실현하는 커널 기능 중 네임스페이스(namespaces)와 cgroups(컨트롤 그룹)의 역할의 조합으로 올바른 것은?
  2. Linux 호스트에서 Docker를 사용하여, 호스트와는 다른 배포판을 바탕으로 한 이미지로 컨테이너를 시작하고, 그 안에서 uname -r(커널의 릴리스를 표시하는 명령)과 cat /etc/os-release(배포판 정보를 표시하는 명령)를 실행했다. 결과의 설명으로 올바른 것은?
  3. 컨테이너 이미지와 컨테이너의 관계에 대한 설명으로 올바른 것은?
  4. 어떤 이미지로 시작한 컨테이너 안에서, 이미지에 포함된 설정 파일 /etc/app.conf를 수정했다. Docker의 일반적인 스토리지 구조(overlay2 등)에서 일어나는 일로 올바른 것은?
  5. 500 MB의 아카이브 data.tar.gz를 풀기 위해 위의 Dockerfile로 이미지를 만들었다. 압축을 푼 뒤 같은 RUN 안에서 아카이브를 삭제했는데도, 이미지 크기는 아카이브만큼 큰 채로였다. 이유와 대책의 조합으로 가장 적절한 것은?
  6. 같은 베이스 이미지(120 MB) 위에 각각 고유한 레이어를 30 MB씩 겹친 5개의 이미지가 있다. 레이어의 압축이나 메타데이터의 용량은 생각하지 않는다. 서버 1대에 이 5개의 이미지를 모두 가져왔을(pull) 때, 이미지가 사용하는 디스크 용량으로 올바른 것은?
  7. 위의 Dockerfile에서 docker build로 이미지를 만들 때 실행되는 명령과, docker run으로 컨테이너를 시작할 때 실행되는 명령의 조합으로 올바른 것은?
  8. 위의 Dockerfile로 만든 이미지 pinger를 docker run pinger example.com으로 시작했다. 컨테이너 안에서 실행되는 명령으로 올바른 것은?
  9. 포트 80에서 대기하는 웹 서버의 이미지 nginx로부터 위의 명령으로 컨테이너를 시작했다. 호스트의 IP 주소는 192.0.2.10이고 방화벽 등의 제한은 없다고 하자. 같은 네트워크에 있는 다른 PC의 브라우저에서 이 웹 서버에 접속하는 URL로 올바른 것은?
  10. 위의 Dockerfile(B)은 COPY . . 뒤에 RUN npm ci를 두었던 Dockerfile(A)을, 의존성 파일만 먼저 복사하는 순서로 바꾼 것이다. npm ci에는 120초, npm run build에는 30초, COPY . .에는 2초가 걸리고, 다른 명령의 시간은 무시할 수 있다고 하자. 하루에 20회, src 아래의 소스 코드만 바꾸어(package.json과 package-lock.json은 바꾸지 않고) 이미지를 다시 만든다. 이전 빌드의 캐시를 사용할 수 있을 때, 하루 빌드 시간의 합계에서 B가 A보다 짧아지는 시간으로 올바른 것은?
  11. Docker에서 컨테이너가 쓴 데이터를 남기기 위한 명명된 볼륨과 바인드 마운트의 설명으로 올바른 것은?
  12. 이미지를 registry.example.com/team/web:1.4로 지정하여 가져온다(pull). 이 지정의 각 부분이 뜻하는 바의 조합으로 올바른 것은?
  13. scratch는 파일을 하나도 포함하지 않는 빈 이미지이다. 위의 멀티 스테이지 빌드 Dockerfile로 만든 최종 이미지에 포함되는 것으로 올바른 것은?
  14. Kubernetes에서 배포하고 관리하는 최소 단위로, 하나 이상의 컨테이너를 묶어 같은 IP 주소와 볼륨을 공유하게 하는 것은?
  15. Kubernetes에서 replicas: 3을 지정한 Deployment의 Pod가 3개 동작하고 있다. 이 중 하나의 Pod를 kubectl delete pod로 삭제했을 때 일어나는 일로 올바른 것은?
  16. Kubernetes의 Deployment에서 Pod 템플릿의 컨테이너 이미지를 새 버전으로 변경했다. 기본 업데이트 방식(RollingUpdate)에서 일어나는 일로 올바른 것은?
  17. replicas: 10인 Deployment에서 롤링 업데이트 설정을 maxSurge: 25%, maxUnavailable: 25%로 했다. 업데이트 도중의 Pod 총수의 상한과 이용 가능한 Pod 수의 하한의 조합으로 올바른 것은?
  18. Kubernetes에서 Pod는 다시 만들어질 때마다 IP 주소가 바뀐다. 다른 애플리케이션이 라벨로 고른 여러 Pod에, 바뀌지 않는 이름과 주소로 접속하여 부하를 분산할 수 있게 하는 리소스는?
  19. Kubernetes 클러스터에서 하나의 호스트 이름으로 도착한 HTTPS 요청 중 경로가 /api로 시작하는 것은 api의 Service로, 그 밖의 것은 web의 Service로 분배하고 싶다. 이 분배 규칙을 정하는 데 적합한 리소스는?
  20. Kubernetes의 Secret에 데이터베이스의 비밀번호를 저장한다. Secret의 설명으로 올바른 것은?
  21. 어떤 웹 애플리케이션은 시작한 뒤 캐시를 읽어 들일 때까지의 약 60초 동안은 요청을 처리할 수 없고, 그동안은 /ready에 503을 반환한다. Pod의 컨테이너에 위의 설정을 추가했을 때의 효과로 올바른 것은?
  22. Kubernetes의 웹 애플리케이션에서, liveness 프로브의 확인 처리 안에서 의존 대상인 데이터베이스에 접속할 수 있는지까지 조사하도록 했다. 이 설정으로 일어날 수 있는 문제로 가장 적절한 것은?
  23. Kubernetes의 HorizontalPodAutoscaler에서 Pod의 CPU 사용률 목표를 70%, Pod 수의 범위를 1~10으로 했다. 현재 5개 Pod의 평균 CPU 사용률이 30%이다. 필요한 Pod의 수를 ⌈현재 수 × 현재 사용률 ÷ 목표 사용률⌉(⌈ ⌉은 올림)로 구할 때, 필요한 Pod의 수로 올바른 것은?
  24. Pod의 컨테이너에 위의 설정을 한 Deployment에서 Pod가 4개 동작하고 있으며, 모든 Pod가 CPU를 400m(0.4코어)씩 사용하고 있다. HorizontalPodAutoscaler의 CPU 사용률 목표를 60%로 하고, 필요한 Pod의 수는 ⌈현재 수 × 현재 사용률 ÷ 목표 사용률⌉로 구한다고 하자. 필요한 Pod의 수로 올바른 것은?
  25. Kubernetes에서 컨테이너에 설정하는 자원의 requests와 limits의 설명으로 올바른 것은?
  26. 할당 가능한 자원이 CPU 4코어, 메모리 8 GiB인 노드가 있다. 각 Pod의 컨테이너에는 requests로 CPU 500m·메모리 1.5 GiB, limits로 CPU 1코어·메모리 2 GiB를 설정했다. 다른 Pod나 시스템 예약은 없다고 하자. 이 노드에 둘 수 있는 Pod의 최대 수로 올바른 것은?
  27. 클라우드의 관리형 데이터베이스 서비스(사업자가 데이터베이스 소프트웨어를 운용하는 서비스)를 사용한다. 공동 책임 모델의 관점에서 일반적으로 이용자의 책임으로 남는 것은?
  28. 클라우드에서 같은 리전 안의 여러 가용 영역에 웹 서버와 데이터베이스의 복제본을 나누어 두는 주된 목적으로 적절한 것은?
  29. 서버리스 함수(FaaS)에서, 한동안 호출되지 않았던 함수의 첫 호출만 응답이 수백 밀리초에서 수 초 늦어지는 경우가 있다. 이 현상의 설명으로 올바른 것은?
  30. 클라우드 스토리지를 ① 가상 머신에 디스크로 연결하여 파일 시스템을 만들고 데이터베이스의 데이터 파일을 둔다, ② 여러 서버에서 동시에 마운트하여 공유 디렉터리로 사용한다, ③ HTTP의 API로 키(이름)를 지정하여 대량의 이미지를 읽고 쓰며, 용량을 미리 정하지 않고 늘린다는 세 가지 용도로 사용한다. ①~③에 적합한 스토리지 종류의 조합으로 적절한 것은?
  31. 1시간당 40엔(가상의 단가)으로, 사용한 시간만큼만 요금이 드는 가상 머신을 사용한다. 평상시에는 2대를 1개월(30일) 동안 계속 가동하고, 평일 20일은 매일 6시간만 부하에 맞추어 4대를 추가한다. 1개월의 요금으로 올바른 것은?
  32. 어떤 가상 머신은 사용한 시간만큼 지불하는 온디맨드로는 1시간당 50엔, 1년분의 이용을 미리 약정하는 예약으로는 사용한 시간과 관계없이 1년에 262,800엔이 든다(둘 다 가상의 가격). 1년을 8,760시간이라고 하면, 1년간의 이용 시간이 어떤 시간을 넘었을 때 예약 쪽이 저렴해진다. 그 시간으로 올바른 것은?
  33. 많은 퍼블릭 클라우드의 데이터 전송 요금의 사고방식으로 일반적으로 들어맞는 것은?
  34. 선언적인 IaC(Infrastructure as Code) 도구로, 네트워크와 가상 머신 2대의 구성을 정의한 파일을 적용하여 환경을 만들었다. 그 직후에 아무것도 바꾸지 않고 같은 파일을 한 번 더 적용했을 때 일어나는 일로 적절한 것은?
  35. 이뮤터블 인프라스트럭처의 사고방식에 따른, 운영 서버의 소프트웨어 업데이트 방법으로 적절한 것은?
  36. 운영 환경과 같은 구성의 환경을 두 개 준비하여, 한쪽에서 현재 버전을 실행한 채로 다른 쪽에 새 버전을 넣어 확인한 다음, 로드 밸런서가 향하는 곳을 한 번에 전환한다. 문제가 있으면 향하는 곳을 되돌려 즉시 원래 버전으로 돌아간다. 이 릴리스 방법은?
  37. 1시간에 12,000건의 요청을 받는 서비스에서 새 버전을 카나리 릴리스하여, 요청의 5%만 새 버전으로 보냈다. 새 버전에는 받은 요청의 3%가 실패하는 결함이 있었고, 1시간 뒤에 알아차려 모든 요청을 원래 버전으로 되돌렸다. 이 1시간 동안 결함으로 실패한 요청의 건수로 올바른 것은?
  38. CI/CD 파이프라인에서 만든 컨테이너 이미지를 스테이징 환경에서 시험하여 합격했다. 이 이미지를 운영 환경에 내보내는 방법으로 가장 적절한 것은?
  39. 위와 같이 데이터베이스의 접속 대상을 이미지에 써 넣지 않고, 컨테이너를 시작할 때 환경 변수로 전달하도록 했다. 이 설계의 주된 이점으로 가장 적절한 것은?
  40. 여러 서비스가 연계하여 동작하는 시스템에서, 이용자의 요청 하나가 어떤 서비스를 어떤 순서로 거쳤고 각각에서 시간이 얼마나 걸렸는지 조사하고 싶다. 관측 가능성을 위한 데이터 중 가장 적합한 것은?

컴퓨터 시스템의 다른 분야