중간
[1] 클라우드 컴퓨팅의 탄생 배경을 Public Cloud 제공업자의 측면에서 설명합니다.
AWS를 예시로 들 수 있는데, 온라인 쇼핑몰을 위한 회사 내에서의 Private 클라우드를 사용하면서 사용자들이 온라인 쇼핑몰을 사용하지 않는 시간의 경우 노는 리소스들이 많았다. 해당 시간대에 사용하지 않는 리소스들을 수익을 얻으며 임대함으로써 Public 클라우드 컴퓨팅이 탄생했다.
[2] 클라우드 컴퓨팅의 서비스 모델 3가지를 나열하고, 각각 무엇을 제공하는지 설명합니다.
SaaS(Software as a Service) : 구글 독스, 유튜브 등 소프트웨어를 서비스로 제공한다. PaaS(Platform as a Service) : 개발자가 API를 활용해 더 편리하게 개발할 수 있도록 라이브러리, 툴들을 서비스로 제공한다. IaaS(Infrastructure as a Service) : 기초적인 컴퓨팅 자원을 제공해 스스로 제어하며 사용하도록 한다.
[3] 클라우드 컴퓨팅에서 Public Cloud, Private Cloud 및 Hybrid Cloud가 무엇인지 설명합니다.
Public Cloud는 구글, 아마존과 같이 제 3자의 클라우드를 대가를 지불하고 사용하는 것을 말한다. Private Cloud는 다수의 사용자들로 구성된 조직이 소유하고, 조직 내에서 사용하는 형태를 말한다. Hybrid Cloud는 Private Cloud를 가지면서 필요에 의해 Public Cloud를 선택적으로 활용하는 형태를 말한다.
[4] Pet 모델과 Cattle 모델은 무엇이며, 실제 Container의 운영시 어떻게 적용되는지 설명합니다.
Pet 모델은 각 서버를 고유한 시스템으로 인식하고 이름을 붙여 직접 점검하고 관리하는 모델을 말한다. Cattle 모델은 서버는 동일한 시스템으로 인식하고 태그로 구분되며 문제가 생길 경우 해당 컨테이너를 재시작하여 사람의 개입없이 해결한다.
[5] IaC가 무엇이며, 기존의 데이터센터를 구축하고 소프트웨어를 운영하는 방식과 어떻게 다른지 설명합니다.
IaC는 Infrastructure as Code로, 코드를 통해서 필요한 환경을 구축하는 것을 말한다. 과거에는 데이터센터를 구축할 때 하드웨어를 수동으로 설정하고, 소프트웨어를 배포하는 등 작업을 사람이 직접 수동으로 구축해야 했지만, IaC는 서버, 네트워크 등 infrastructure를 소프트웨어로 다루면서 설정 코드를 통해 자동으로 동일한 환경을 설정할 수 있다.
[6] Mutable infrastructure와 Immutable infrastructure는 무엇이며, 왜 Immutable infrastructure를 지향하는지 설명합니다.
여러 서버를 통해 서비스를 제공하면서 Mutable은 끊임없이 각 서버에 대해 업데이트하고 조정되는 환경을 말하고, Immutable은 변화하지 않고 각 서버의 환경을 동일하게 유지하는 것을 의미한다. Mutable의 경우 각 서버가 업데이트되기 때문에 각 서버마다 서비스에서 차이가 생기고, 관리하기 어렵다. 하지만, Immutable의 경우 동일한 환경을 갖기 때문에 업데이트를 한 번에 해주고, 다시 롤백하는 등 관리가 쉽다는 측면에서 Immutable을 지향한다.
[7] Hypervisor를 수업에서 두 가지 타입으로 정의하였습니다 (type.1 & type.2). 각각이 어떻게 동작하는 지 설명합니다.
Type1은 하드웨어 위에 바로 Hypervisor가 올라간 모양이고, Type2는 Host OS 위에 Hypervisor가 올라간 방식이다.
[8] Guest Linux OS over Host Linux OS 문제가 무엇인지 설명합니다.
데이터 센터의 경우 Public Cloud를 제공하는데, 기본적으로 무료인 리눅스를 사용한다. 사용자에게 서버를 임대할 경우 사용자가 원하는 환경을 갖춰줘야 하므로 VM을 사용한다. 이때 Guest OS로 리눅스가 올라갈 경우 동일한 OS가 중복되는 경우가 발생해 더 많은 비용을 사용하게 되는 문제를 말한다.
[9] 데이터센터에서의 소프트웨어 개발과 운영에서, Container 기술이 가상 머신 기술의 대안이 될 수 있는 이유를 설명합니다.
Guest Linux OS over Host Linux OS의 OS 중복 문제로 인해 더 많은 비용을 소모하나, 컨테이너 기술은 OS를 호스트 OS와 공유하고 프로그램 코드, 라이브러리를 패키징하여 각 컨테이너마다 독립된 프로세스로 동작할 수 있다는 점에서 빠른 속도, 적은 용량의 장점을 가지고 있기 때문에 비용도 감소하는 효과를 가져오며 가상 머신 기술의 대안이 될 수 있다.
[10] Docker를 구성하는 CLI/Daemon 및 REST API에 대해서, 각각 무엇인지 설명합니다.
CLI(Command-Line Interface)는 글자로 입력해 컴퓨터에 명령을 내리는 방식으로, 도커의 클라이언트 역할을 한다. Daemon은 클라이언트로부터 온 명령을 듣고 명령을 수행한다. REST API는 클라이언트가 서버에게 요청을 보냈을 때 그에 따른 응답을 돌려주는 형식을 의미한다.
[11] IaC는 소프트웨어 개발과 유사한 과정을 거치는 것으로 설명하게 됩니다. Docker container를 개발하고 실행하는 과정을 python/C++ 등의 프로그램을 개발하고 실행하는 과정과 비교하여 설명해 봅니다.
python/C++의 소스코드를 만드는 것과 같이 필요한 커멘드를 포함한 Dockerfile을 만든다. Dockerfile을 이용해 이미지를 만들고, python/C++의 컴파일, 빌드로 실행파일을 만드는 것과 같이 이미지를 이용해 컨테이너를 만든다. 이후, 프로그램을 실행하는 것과 같이, 컨테이너에 실행 명령을 주어 컨테이너를 실행시킨다.
[12] Docker compose는 복수의 컨테이너(서비스)를 하나의 어플리케이션처럼 구동하도록 합니다. 네트워크 측면에서 이를 위하여 어떤 기능을 수행하는지 간단하게 설명합니다.
복수의 컨테이너를 구동하기 때문에 컨테이너 DNS(Domain Name Service) 서버를 만들어 이름으로 컨테이너를 구분할 수 있도록 한다.
[13] PAT가 무엇인지 설명하고, Docker 컨테이너에서 왜 필요한지 설명합니다.
PAT(Port Address Translation)는 private 포트와 public 포트를 연결하는 역할을 한다. 컨테이너는 호스트와 떨어져 독립적으로 패키징되었기 때문에 포트를 설정해도 외부에서는 내부의 포트를 인식하지 못한다. 때문에, 내부의 포트도 외부의 통신과 연결할 수 있도록 private 포트와 public 포트를 연결해 통신이 가능하도록 만든다.
[14] curl 프로그램이 무엇이며, 수업에서 어떤 용도로 활용할 수 있는지 설명합니다.
curl(Client URL) 프로그램은 여러 프로토콜을 사용하는 데이터들을 전송하기 위한 라이브러리, 커멘드 라인 도구를 제공하는 소프트웨어 프로젝트이다. 서버 클라이언트를 띄웠을 경우 서버에 데이터를 요청하고 받아오는 http 프로토콜을 사용할 수 있다.
[15] Docker에서 Volume은 어떤 용도로 활용하며, 물리적으로 어떻게 구현되는지 설명합니다.
Volume은 컨테이너를 생성해 사용하거나, 데이터 복사본을 저장해 사용하고, 컨테이너를 삭제했을 때 데이터가 없어지지 않게 하기 위해 사용하고, 호스트 파일시스템의 한 부분을 도커가 점유하여 저장된다.
[16] Docker에서 Bind Mounts는 어떤 용도로 활용하며, Volume과의 차이점은 무엇인지 설명합니다.
Bind Mounts는 호스트 컴퓨터의 스토리지 중 특정 위치를 지정해 연결한다. 민감한 파일에 접근하거나, 컨테이너가 만들어지기 전에 생성된 파일을 사용할 때 활용한다. Volumn의 경우 도커 프로세스가 아니라면 파일을 수정해서는 안 되지만, Bind Mounts는 도커 프로세스가 아니더라도 언제나 수정할 수 있다.
[17] Docker Machine은 어떤 기능을 수행하며, 어떤 용도로 활용하는지 설명합니다.
가상 머신에 도커 엔진을 설치할 수 있도록 한다. 도커 머신은 오래된 리눅스 데스크탑을 가지고 있고, 맥이나 윈도우에서 도커를 실행하고 싶은 경우. 혹은 원격 시스템에 도커 호스트를 공급하고 싶은 경우에 활용한다.
[18] Jenkins를 사용하여 CI/CD를 구현할 수 있다는 것은 어떤 의미인지 설명합니다.
코드 작성을 마치고 깃허브에 올린 후 컴파일, 빌드, 테스트, 배포 등의 작업을 사람의 개입 없이 자동으로 수행하는 과정을 구현할 수 있다는 것을 의미한다. 시간을 설정해서 배포하는 등 설정할 수 있다.
기말
[1] Docker Swarm에서 manager와 worker(slave)는 어떤 역할을 수행하는지 설명합니다.
manager는 Worker와 논리적 연결을 만들고 Worker들을 관리한다.
Worker는 Swarm의 서비스를 실행하는 역할을 수행한다.
[2] Docker Swarm에서 join과 leave는 어떤 기능을 수행하는지 설명합니다.
join은 Worker가 Manager에게 등록되어 Manager의 관리를 따를 수 있도록 한다. leave는 Manager에서 등록된 Worker가 분리되도록 한다.
[3] Monolithic architecture 대비 Microservice architecture란 어떤 것인지 설명합니다.
Monolithic architecture는 하나의 커다란 서비스를 만드는 것을 말하고, Microservice architecture는 하나의 커다란 서비스를 쪼개서 독립적으로 분리하고 서로 정보를 주고 받는 형태의 기술
[4] Monolithic architecture 대비 Microservice architecture가 Scalability, Availability (Fault tolerance), Agility, Polyglot persistence, Maintainability가 높다는 것이 어떤 내용인지 각각에 대해서 설명합니다.
모놀리틱은 한 가지 기능을 확장하려면 다른 99가지 기능들도 함께 연결되어 확장해야 하지만 마이크로서비스는 독립적이기 때문에 영향 없이 확장 가능하다. 모놀리틱은 한 서비스에 문제가 발생한 경우 다른 서비스에 영향을 주어 모두 문제가 발생하나, 마이크로서비스는 미치는 영향이 적다. 모놀리틱은 모두 하나로 연결되어 모두가 기능 제작을 완료해야 배포할 수 있지만 마이크로서비스는 각 기능마다 따로 빌드, 배포를 할 수 있다는 점에서 Agility가 높다. 모놀리틱은 통합적인 한 가지 도구를 사용해야 하지만 마이크로서비스는 각자의 경우에 맞는 도구를 사용할 수 있다. 모놀리틱에 비해 마이크로서비스는 기능을 분리했기 때문에 감소된 코드 양으로 인해 유지 보수하기 편리하다.
[5] Kubernetes의 Pod과 Docker의 Container에 대해서, 기술적이 유사점(공통점 등)과 차이점을 설명합니다.
컨테이너가 프로그램, 스토리지, 환경 변수 등을 묶어 사용하는 것과 같이 팟도 다양한 컨테이너를 하나로 묶어 사용한다는 점에서 유사하다.
컨테이너는 각각이 개별적으로 생성하고 작동하지만 쿠버네티스의 팟은 여러 컨테이너를 묶어 스토리지, 네트워크 등의 다른 역할을 하는 컨테이너를 함께 사용한다는 점에서 차이점을 갖는다.
[6] Kubernetes의 Ingress는 무엇이고, 어떤 기능을 수행하는지 설명합니다.
Ingress는 서비스에 대한 외부 접근을 다루는 객체이다. 클러스터와 외부의 통신을 수행하고 받은 요청을 어떤 팟으로 보낼 지 조정하는 load balancing, 한 대의 컴퓨터가 여러 이름을 받아 해당하는 라벨로 전달하는 name-based virtual hosting을 수행한다.
[7] Kubernetes의 NodePort는 무엇이고, 어떤 기능을 수행하는지 설명합니다.
NodePort는 특정 노드에 포트를 뚫어 노드가 외부와 통신할 수 있도록 하는 방식이다. NodePort를 통해 외부에서 서비스로 요청을 보내 팟에서 처리할 수 있도록 한다.
[8] Kubernetes에서 서비스 운영시 IP 어드레스를 사용하지 않도록 하는 이유와, IP 어드레스를 사용하지 않는 경우 무엇을 사용해야 하는지에 대해서 설명합니다.
쿠버네티스의 팟들은 오류가 발생해도 고쳐서 사용하지 않고 종료하고 새로 생성하는 cattle 방식이다. 때문에 새로 생성될 때마다 새로운 IP 주소를 받기 때문에 IP 주소를 매번 지정해줄 수 없어 IP 주소를 사용하지 않는다. IP 주소 대신 Label을 설정해서 이름을 지정하고 label을 사용해 동작을 지정한다.
[9] Replica Controller의 역할과 이의 구동을 위한 yaml 화인 안의 selector, template, replicas가 어떤 의미인지 설명합니다.
selector : 운영자가 요구한 무언가를 명령할 대상을 지정하기 위한 이름을 설정한다.
replicas : 생성하고자 희망하는 팟의 개수를 설정한다.
template : 복제할 새로운 팟의 데이터를 구체적으로 작성한 템플릿을 설정한다.
[10] Deployment는 어떠한 경우에 사용하는지 수업에서의 활용 사례를 기준으로 설명합니다.
기존 버전 1의 Replication Controller가 버전 1 팟을 만들어 사용하고 있을 때 새로운 버전 2의 Replication Controller를 생성해 버전 2의 팟을 만들어 사용하는 등 2개 이상 복수의 ReplicaSet Controller를 사용할 때 Deployment를 사용한다.
[11] Kubernetes의 Client API란 무엇이며, 왜 필요하고, 어떤 용도로 활용하는지 설명합니다.
Client API는 쿠버네티스의 객체 생성, 삭제 등의 동작을 특정 명령을 통해서 동작시킬 수 있도록 하는 방식이다.
API를 사용하지 않는다면 내가 원하는 동작을 하는 코드를 프로그램으로 구성해야 하지만 API를 통해서 간단한 명령어를 통해 동작시킬 수 있다는 점에서 필요하다.
내가 작성한 프로그램에서 쿠버네티스 API를 사용할 수 있고 kubectl을 통해 CLI에서도 쿠버네티스 API를 호출해 원하는 명령을 내릴 수 있다.
[12] Kubernetes의 object라는 것이 무엇이고, 어떤 용도로 활용하는지 설명합니다. 그리고 왜 프로그래밍 언어에서의 object와 유사하다고 하는지 추가 설명합니다.
Object는 리소스 타입의 하나의 인스턴스를 말한다. 객체를 생성함으로써 쿠버네티스 시스템에 클러스터의 desired state를 입력할 수 있다.
프로그래밍 언어에서 일정 틀의 클래스를 정의하고 그 인스턴스 object를 생성하는 것과 같이 쿠버네티스도 클래스와 유사한 리소스 타입을 정의하고 그 인스턴스 객체를 생성해 사용하기 때문에 유사하다.
[13] Kubernetes에서 imagePullPolicy에는 어떤 것들이 있으며, 각각 어떻게 동작하는지 설명합니다.
IfNotPresent : 이미지가 Local, 해당 노드에 있지 않다면, 이미지를 pull하여 실행한다.
Always : 이미지를 팟이 시작되는 때에 항상 pull한다. (수시로 업데이트가 되고 최신 이미지를 사용하고 싶은 경우)
Never : Remote의 레지스트리를 사용하지 않고 Local에 있는 것만 사용한다. (보안 상의 경우)
[14] Kubernetes의 Cluster IP, Node Port, Ingress는 무엇이며, 어떤 용도로 활용하는지 설명합니다.
Cluster IP는 클러스터 안에서 유효한 IP 주소를 지정하는 객체이다. 클러스터 내부의 다른 팟과 통신하기 위한 내부 IP 주소이다.
NodePort는 노드에 포트를 뚫는 객체이다. 포트를 통해 외부와의 통신이 가능하도록 만든다.
Ingress는 클러스터에서 서비스에 대한 외부 접근을 다루는 객체이다. 각 서비스로 트래픽을 나누는 load balancing, 한 대의 컴퓨터에 여러 이름을 갖는 name-based virtual hosting을 수행해 라벨에 따라 전달해주는 용도로 활용한다.
[15] Kubernetes의 Storage인 emptyDir, hostPath, PVC(Persistent Volume Claim)에 대해서, 각각 물리적인 위치가 어디이고, 활용 용도는 무엇인지 설명합니다.
emptyDir는 팟에 위치한다. 임시적으로 컨테이너가 작업하기 위한 것들을 저장하기 위해 사용한다. hostPath는 노드에 위치한다. 노드에 위치해 노드의 특정 파일이나 디렉토리를 컨테이너 파일시스템에 마운트한다. PVC는 클러스터에 위치한다. PV 사용 요청을 통해 PV를 사용하기 위해 활용한다.