1. 클라우드 컴퓨팅이란 무엇인가?

구성 가능한 컴퓨팅 자원(예: 컴퓨터 네트워크, 데이터 베이스, 서버, 스토리지, 애플리케이션, 서비스)에 대해 어디서나 접근 할 수 있는, 주문형 접근(on-demand availability of computer system resources)을 가능케하는 모델이며 최소한의 관리 노력으로 빠르게 예비 및 릴리스를 가능케 한다.

 

2. 스케일 아웃(Scale-out)과 스케일 업(Scale-up)의 차이를 설명하라.

인프라 업그레이드를 위한 두 가지 방안으로,

스케일 업은 기존 서버의 자원 및 성능을 보다 업그레이드 하는 것을 의미한다.

단 적인 예로, 자원 및 성능 증강을 목적으로 서버의 디스크를 직접 구매해 추가하거나 , 동일한 방법으로 CPU나 메모리를 추가로 장착해 업그레이드 시킨다.

 

스케일 아웃

기존 서버만으로 요청이나 성능의 한계가 도달했을 때, 서버를 더 증설해 처리할 수 있는 양을 더 늘리거나,

한 서버에 무리가 가지 않도록 부하를 분담 할 수 있다.

 

EC2 에서는 Auto Scaling 그룹이 있으며 ECS 클러스터 생성시 지정해줄 수도 있다. (최소 갯수, 최대 갯수 지정 가능)

스케일 아웃 기준은 로드밸런서 부하량, CPU 사용량, 메모리 사용량 등이 있으며 필요에 따라 선택할 수 있다.

3. MSA(Micro Service Architecture)의 개념을 설명하라.

마이크로서비스란 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스이다.

마이크로서비스로 독립적으로 실행되는 각 서비스들은 서로의 서비스에 영향을 끼치지 않으며,

각각 배포 및 관리가 가능하고, 각각 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능하다.

리눅스 컨테이너 기술이 핵심이다.

 

4. MSA의 장점은 무엇인가? 기존 방식에 비해 어떤 Benefit을 가져올 수 있는가? 그리고 그에 따른 단점이나 리스크가 있는가?

각각 독립적으로 실행되는 서비스를 통해, 하나의 서비스가 장애를 일으켜도 SPoF(단일 장애점)을 회피 할 수 있고,

동일한 서비스를 컨테이너화하여 여러 환경에 배포 및 운영을 하며 고가용성을 유지 할 수 있다는 장점이 있다.

또한 서비스 별로 필요한 기술 스택을 달리 할 수 있다.

 

대표적인 단점으로는 수많은 마이크로 서비스를 관리할 수 있는 운영 도구가 있다지만, 실제로 서비스 간 통신이라던지 실제 요구 사항에 맞는 서비스를 분할하며 아키텍쳐를 설계한다는 게 단점인 것 같다. 또한 서비스 아키텍처에 대해 러닝커브가 높고 많아지면 많아질수록 전체 서비스에 대한 복잡도가 올라갈 수 있다.

 

5. 컨테이너란 무엇인지 설명하라.

소프트웨어 서비스를 실행하는 데 있어 , 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속성과 애플리케이션 코드를 함께 포함하는 경량 패키지라고 할 수 있다.

 

운영체제 수준에서 호스트 OS의 커널을 통해 CPU, 메모리, 스토리지, 네트워크 리소스를 호스트 환경의 프로세스와 동일하게 취급당하며

또한 실행 환경에서 애플리케이션을 추상화 할 수 있는 논리 패키징 메커니즘을 제공한다.

 

6. 컨테이너를 위한 운영 환경에는 어떠한 것들이 있는가? 가장 많이 사용되는 것은 무엇인가?

대표적인 컨테이너 오케스트레이션 도구로는 도커 스웜, 쿠버네티스 , 도커 컴포즈가 있으며, 가장 많이 사용되는 것은 쿠버네티스라 할 수 있다.

7. 쿠버네티스가 가장 선호되는 이유가 무엇이라고 생각하는가?

아무래도 쿠버네티스는 주요 클라우드 서비스에서 매니지드 서비스 형태로 제공되는 게 큰 이유인 것 같다.

명령행 도구로 명령을 입력하기만 해도 여러 대의 노드를 갖춘 쿠버네티스 클러스터를 즉석에서 생성할 수 있기 때문이고, 또한 노드 역할을 하는 가상 머신의 관리까지 맡아준다. 또한 쿠버네티스에선 스웜과 달리 세세하게 설정할 수 있는 기능이 많기 때문이기도 하다. 예를 들어 블루-그린 배포나 자동 스케일링, 역할 기반 접근 제어 같은 기능을 쿠버네티스에 쉽게 적용이 가능하다.

8. 쿠버네티스 클러스터의 기본 아키텍처에 대해 설명하라.

마스터 노드와 워커 노드로 구성되며 마스터 노드는 배포할 서비스 스케줄링, 워커 노드 갯수 관리, API 엔드 포인트 제공 등을 담당하며,

워커 노드는 여러 개의 파드로 구성되며 각 파드는 여러 서버로 구성될 수 있고 각각 여러 컨테이너들을 함께 실행이 가능하다.

9. 모니터링 툴을 사용해본 적이 있는가? 있다면 그에 관해 설명하라.

오픈소스 APM으로 핀포인트를 사용해본 경험이 있다. 핀포인트는 애플리케이션의 코드에 직접 수정을 하지 않고, BCI ( Byte Code Instrumentation ) in Java로 클래스 로드 시점에 애플리케이션 코드를 가로채 성능 정보와 분산 트랜잭션 추적에 필요한 코드를 주입하는 것이었다. 그렇게 추적된 트랜잭션은 요청이 들어올 시 실시간으로 확인이 가능하며, 특정한 시간대에 모든 요청들의 샘플링도 할 수 있을 뿐더러,  콜스택을 자세하게 볼 수 있는것이 흥미로웠다.

10. 쿠버네티스에서 Auto Scaling의 원리에 대해 설명하라.

애플리케이션의 부하나 트래픽 증가에 따라 인스턴스 수를 동적으로 조절한다. 쿠버네티스는 주어진 조건으로 각 파드의 리소스 사용량을 모니터링하고 필요한 경우 파드의 복제본 수를 조절한다. 예를 들어 CPU 사용률이 높아지면 쿠버네티스 컨트롤 플레인은 파드의 복제본 수를 늘려서 자동으로 부하를 분산시켜준다. 이때 , 새로운 파드를 생성하거나 기존 파드를 삭제 할 수도 있다.

컨트롤 플레인이 스케일링 결정을 내린 후, 각 연결된 워커노드에 파드의 크기를 조절하는 작업을 수행한다.

 

 

질문 출처 : https://artist-developer.tistory.com/15

+ Recent posts