클라우드 엔지니어 면접 질문 - keullaudeu enjinieo myeonjeob jilmun

메가존 클라우드 인턴 면접 후기

글을 시작하며

면접은 7월 9일 금요일 오후 5시~6시 한 시간 동안 간략한 기술 질문, 의사소통 방법, Q&A로 진행했습니다.
면접 과정에서 스스로에게 너무 실망했고 3일간 제가 보낸 42 과정을 회고하는 시간을 가졌습니다.
질문을 따로 기록하지 않아 질문의 정확도가 떨어집니다.

본문

자기소개 & 커리어 계획

간단한 자기소개 이후

Q: 어떤 엔지니어로 성장하고 싶은가? A: 데브옵스 엔지니어로 시작하거나, 클라우드 엔지니어 혹은 시스템 엔지니어로 시작해 데브옵스 엔지니어로 성장한 후 언젠가는 데브옵스 툴체인에 들어가는 프로그램을 개발하고 싶습니다.

신입이 데브옵스 엔지니어로 커리어를 시작하는 건 너무나도 어렵기에 커리어 계획을 수정하는 게 좋을 거라는 피드백을 받았습니다.

Q: 최근에 관심이 있거나 학습하고 있는 분야는? A: 20,12 Kubernets에서 dockershim deprecation 발표 이후 아주 조금씩 CRI-O, OCI를 이해하려고 공부하고 있습니다.

이쪽 분야에서 컨테이너를 잘 아는 것이 매우 중요하다는 피드백을 받았습니다.

기술 질문

주로 IaC와 관련된 질문과 그것을 어떻게 사용했는지에 대해 이야기를 했습니다.

Q: Terraform의 state, workspace가 무엇인가? A: .tf에 작성된 코드로 생성된 인스턴스 정보를 저장하고 관리하는 부분이 state며 workspace는 잘 모르겠습니다.

기술 질문 중 저에게 가장 도움이 되는 질문이었습니다.
면접 당시에는 workspace에 대해 대답하지 못했고 면접 종료 후 workspace에 대해 찾아보았습니다.
제가 항상 고민하던 gitflow에서 dev, stg, prod의 환경관리에 대해 Terraform은 이미 좋은 방법을 가지고 있다는 것을 학습할 수 있었습니다.

의사소통 방법

가장 많은 질문을 받은 부분이며 또한 스스로에게 가장 많이 실망한 부분이기도 합니다.
질문들을 구체적으로 적을 수는 없지만 크게 3가지에 대해 이야기를 했습니다.

  1. 개인과 개인
  2. 개인과 팀
  3. 팀과 팀

누구나 의사소통 과정에서 겪는 어려운 부분과 관련해 제가 어떻게 행동하는지에 질문을 받았습니다.
42를 진행하면서 했던 팀 서브젝트, 토이 프로젝트에서 제가 한 의사소통 과정들을 회고했습니다.
회고 과정에서 스스로 세운 원칙을 달성하지 못했다는것을 확인했습니다.

  1. 상당히 독선적인것
  2. 책임을 공유하기보단 책임 소재를 명확히 해 내 소관이 아니면 무신경한 것
  3. 사람과 사람의 의사소통이 우선인 영역을 툴을 이용해 해결하려는 점

초반 몇 개의 질문만으로도 스스로의 의사소통 과정에 위와 같은 문제가 많은 것을 깨달았고 스스로에게 화가 너무 많이 나 후반에 받은 질문에 대해서는 횡설수설했습니다.
면접 종료 이후 의사소통을 어떻게 해야 잘할지에 대해 다시 한번 고민하게 되었습니다.

Q&A

면접이 생각보다 일찍 끝나고 남은 시간 동안 업무와 관련된 기술 스택이 어떻게 사용되고 활용되는지 질문했습니다. 면접 전 받았던 질문이 아래와 같은 4가지였습니다.

  1. Gitlab을 사용해본적 있는가?
  2. Container를 잘 아는가?
  3. Linux를 잘 아는가?
  4. Network를 잘 아는가?

3,4번의 중요성은 너무나 잘 알고 있었고 1,2번이 구체적으로 어떻게 활용되는지 알고 싶어 질문을 했습니다.

  1. Gitlab이 Github보다 CI/CD파이프라인에서 엄청난 강점을 보인다는데 구체적으로 어떤 이유인지?
  2. Container를 어떻게 사용하고 활용하는지?

1번 질문

Gitlab은 Github와 달리 third-party를 사용하지 않고도 CI/CD파이프라인 세팅이 용이해 많은 회사들이 처음 개발환경에 구축에 있어 Gitlab을 도입하며 Github에서 Gitlab으로 변경하는 회사들도 있어 migration과 관련해 학습을 해보면 좋을 것 같다는 피드백을 받았습니다.

2번 질문

Container의 활용과 관련해서
검색으로 얻어지는 부분의 대다수는 default한 부분이며
고객의 요구사항인 private한 부분에서 요구사항을 달성하기 위해 다른 영역의 지식과 결합해 다양한 방식으로 활용됨으로 관심 있다면 현업에서 일하며 배우는 게 가장 좋은 방법일 거라는 피드백을 받았습니다.

위의 질문 외에도 Cloud, DevOps 관련 질문들을 했고 많은 궁금증들 해소할 수 있었습니다.

글을 마치며

면접 이후 3일간 회고를 하면서 내가 생각한 방향과 실질적으로 가고 있는 방향이 다르다는 것을 확인할 수 있었습니다.
특히 의사소통을 잘하는 데브옵스 엔지니어를 생각하며 데브옵스 툴체인에 집착하지 말고, 툴체인을 사용하는 사람에 집중하자라고 스스로 정한 원칙을 무시하고 툴체인에 집착하며 프로세스 획일화에만 집착했다는 것을 알 수 있었습니다.
면접이 끝난 이후 4일 뒤에 쓴 글이라 의사소통 부분에서 받았던 질문을 자세히 적을 순 없지만 42Cadet여러분들이 동료평가를 하면서 했던 의사소통, 팀 서브젝트를 진행하면서 팀원과 했던 의사소통, 토이 프로젝트를 진행하면서 팀원과 진행한 의사소통 과정을 회고해보며 자신의 의사소통 과정의 장단점을 스스로 분석해보고 단점을 개선하려고 노력한다면 제가 받았던 질문들에 대해 더 잘 대답할 거라고 생각합니다.

Post navigation

클라우드 컴퓨팅이란?

구름처럼 둥둥 떠다녀 언제든지 인터넷만 연결이 되어 있다면 언제든 연결 가능한 서버 혹은 네트워크

추가.

클라우드 네이티브

쉽게말해서, 클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식을 의미합니다.

DevOps

애플리케이션 개발-운영 간의 협업 프로세스를 자동화하는 것을 말하며, 결과적으로 애플리케이션의 개발과 개선속도를 빠르게 합니다.

CI/CD

지속적인 통합(Continous Intergration)은 개발자가 작업한 코드를 자동으로 테스트 하고 테스트에 통과하면 코드를 통합하여 저장합니다.
지속적인 배포(Continous Deployment)은 작업한 코드 및 변경사항들을 테스트를 거쳐 리포지토리로 업그레이드 되고 실 서비스 배포로 릴리즈 까지 자동화 하는 것을 말합니다.

DevOps와 CI/CD

DevOps는 '개발과 IT'운영간의 프로세스를 통합하여 궁극적으로는 '고객에게 뛰어난 품질의 서비스를 빠르게 제공한다.' 는 개발 방법론 입니다.

그렇다면 개발(Dev)와 운영(Ops)의 업무는 다른데 왜 통합을 하려고 할까요?

과거 새로운 서비스를 출시하기 위해서 오랜기간 작업 후 배포했던 것과 달리, 현재는 서비스 출시 속도가 다르고 업데이트 주기 또한 빈번해 졌습니다. 그렇기 때문에 개발된 소프트웨어가 시스템의 안정성을 유지하면서 사용자에게 빠르게 제공될 수 있도록[개발 - 테스트 - 배포 - 운영]의 업무 사이클을 자동화된 단일 워크 플로우로 통합할 필요성이 생기게 된 이유 입니다.

DevOps의 업무

  1. 소스 코드 제어(SCM: Source Code Management)
    서비스는 주로 팀 단위로 개발이 되는데, 서로 다른 팀에서 개발한 코드에 대한 버전과 이력을 관리해야 한다.

  2. CI/CD
    지속적인 통합과 배포를 통해 애플리케이션 개발 단계를 자동화 하여 고객에게 보다 짧은 주기로 서비스를 제공하고 개선하는 방법 입니다.

  3. 모니터링
    업데이트 빈도가 늘어남에 따라 일반적으로 요구되는 엄격한 테스트를 매번 수행할 필요가 없습니다. 따라서, 데브옵스 환경에서는 실시간으로 앱 성능 모니터링을 통하여 오류, 개선사항을 찾아 해결하는 것이 중요합니다.

컨테이너 기반 인프라

가상화 기술 중 하나로, 시스템을 가상화 하는 것이 아니라 애플리케이션을 구동할 수 있는 컴퓨팅 작업을 패키징하여 가상화 한 것 입니다.

Microservice

애플리케이션을 구성하는 서비스들을 독립적인 단위로 분해하여 구축하고 각 구성 요소들을 네트워크로 통신하는 아키텍쳐로 서비스 안정성과 확장성(Scaling)을 지원합니다.

Serverless

우선 서버리스를 설명하기 전 현재의 컴퓨팅 환경이 어떻게 발전되어져 왔는 지에 대해서 알필요가 있다.

컴퓨팅 환경

디지털 전환 시대에 다양한 업종의 기업 및 조직내에서 IT 관리자들은 시시각각 수요가 급변하는 IT자원을 준비하고 운영하는 많은 노력에서 벗어나고자 클라우드를 선택하였다. 위에서 DevOps 개발환경이 왜 나오게 되었는지와 같은 이유라고 생각한다. 개발과 운영이 너무 거대해지고 신경쓸 부분이 많아지다 보니, 관리를 해주는 환경과, 서비스를 만들게 되었고 이게 DevOps와 클라우드 시스템이 나오게 된 배경이라고 생각이 된다.

서버리스란?

클라우드가 점차 정착이 되어 성숙기 단계까지 오게 되었다. 클라우드가 가지고 있는 많은 인스턴스를 관리 해야 하는 문제가 생기게 되었다. (여기서 인스턴스는 가상머신 하나를 인스턴스 라고 한다.) 운영체제와 어플리케이션의 패치와 버전 업그레이드와 더불어 또 다른 IT 서비스에 대한 클라우드 용량 산정 등 지속적인 관리의 피로에서 좀 더 자유로워 질 수 있는 방법을 연구하게 되었고 그 중 가장 많이 언급되는 방법이 '서버리스 컴퓨팅'이다.

서버리스 컴퓨팅은 IT 인프라를 데이터센터 또는 클라우드에 준비 없이, 필요한 기능을 함수(Function) 형태로 구현하고, 자동 스케일링 방식으로 시시각각 변하는 자원 수요를 지원하며 전통적인 백엔드를 대신한다. 따라서 서버리스 컴퓨팅을 FaaS(Function as a Service) 라고도 하고 백엔드 시스템을 보이지 않는 서비스로 추상화하였기 때문에 BaaS(Backend as a Service) 라고도 합니다.

-> 클라우드가 성숙기에 이르면서 클라우드가 가지고 있는 인스턴스에 대한 관리를 좀 더 효율적이고 최소화 하기 위해 언급되는 방법 입니다. 서버리스 컴퓨팅이란 IT 인프라를 데이터센터 또는 클라우드에 준비 없이 필요한 기능을 함수로 구현해서 관리하는 것을 의미 합니다. 따라서 FaaS 혹은 백엔드 시스템을 보이지 않은 서비스로 추상화 하였기 때문에 BaaS 라고도 합니다.

그림으로 보게 되면 '컴퓨팅 환경', '하드웨어', 'IT서비스의 형태' 4가지로 구분이 되어 있는 것을 볼수 있다.

초기 컴퓨팅 환경

컴퓨팅 환경의 초기 단계인 '서버'의 의미를 보게 되면 클라이언트에게 네트워크 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램 혹은 장치를 의미한다.

서버는 클라이언트의 요청에 의하여 서비스를 하는데 이와 같이 구성된 시스템을 '클라이언트 - 서버' 시스템이라고 한다.

이런 클라이언트의 수가 5 ~ 20명일 정도의 소규모 LAN인 경우에는 한 대의 서버로 충분히 모든 서비스를 소화할 수 있으나, 대규모 LAN의 경우에는 여러대의 서버를 배치해야한다. 그래서 초기에는 각 기업마다 서버실있거나, 데이터 센터가 있었다.

모놀리틱

간단히 말해, 'Monolitic' 이라는 말 그대로 하나의 Massive 한 Context 형태의 아키텍쳐를 의미하며 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍쳐를 가질 때, 'Monolitic' 하다고 한다.

모놀리틱

On-Premise

On-premise는 이러한 서비스를 사용하지 않고 있는 상태를 의미, 전형적으로 회사건물 안에 서버룸을 두고 제공하는 방식을 의미합니다.

컴퓨팅 환경 (2 단계)

가상머신

말 그대로 서버를 가상화해서 사용하는 방식을 의미합니다. 그럼 왜 사용하게 되었는가?

주된이유는 서버 통합입니다. 서버를 가상화 하면 각 물리서버에 수많은 가상 서버를 배치하여 하드웨어 활용률을 개선할 수 있습니다. 이렇게 하면 하드 디스크와 같이 물리적 리소스를 추가로 구매할 필요가 없어 질 뿐만 아니라 데이터센터내 전력, 공간 및 냉각의 필요성이 줄어듭니다.

코로케이션 방식

사업자가 직접 서버를 관리하지 않고 인터넷서비스를 제공하는 사업자가 초고속 인터넷 백본망에 서버를 연결해주고 관리해주는 사업형태를 의미합니다.

즉 사업자와 서버를 관리해주는 사람이 분리되어 있는 형태를 의미합니다. 그래서 직접 서버실이 회사내에 있는 형태에서 바뀌었다.

N-tier (다층 구조)

비즈니스 로직을 완전히 분리하여 데이터베이스 시스템과 클라이언트 사이에 배치한 클라이언트 서버의 일종이다. 일반적인 3층 구조로 쓰인다.

다층구조(N-Tier)

IaaS, PaaS, SaaS

클라우드 서비스의 종류라고 생각하면 된다. 2단계가 되면서 코로케이션의 상태가 되면서 이러한 서비스가 상품이 되었다.

클라우드 서비스 종류

컴퓨팅 환경(3단계)

컨테이너

컨테이너란 운영체제 상에서 소프트웨어를 독립적으로 실행 할 수 있는 일종의 OS 가상화 기술이다. 2단계에서는 가상머신이 하드웨어를 했다면 컨테이너는 OS와 어플리케이션 또는 소프트 웨어를 분리해서 관리할 수 있다.

컴퓨팅 환경 (현재)

오늘날의 클라우드 서비스 환경이다. 서버리스 단계로서 개발자가 관리를 하는 것에 대해서 최소화 하기 위해 서버 -> 가상머신 -> 컨테이너 그리고 함수로 컴퓨팅 환경이 바뀌게 되었다.

서버리스

서버를 사용하지 않고 애플리케이션과 서비스를 구축하고 실행할 수 있습니다.

서버리스

FaaS(Function as as Service)

AWS의 lambda와 같이 함수로 서버를 돌리고 배포를 하는 형식을 가진 IT 상품입니다.

AWS - lambda

서버리스 컴퓨팅 관련

Toplist

최신 우편물

태그