반응형

출처: https://news.hada.io/topic?id=19936

Vibe코딩에 대한 의견정리가 너무 와닿아서... 기억하자! 느끼자! 라는 차원으로 퍼옴.

생각하자...생각하고 실천하고 준비하자

 

Vibe 코딩과 개발자 종말론, 주니어 개발자의 성장 방향에 대한 생각

 (stdy.blog)
39P by spilist2 2달전 | ★ favorite | 댓글 11개
  • Vibe 코딩이 뜨면서 함께 "이제 개발자는 필요없다" vs "그래도 아직 멀었다" 논쟁도 활발함
  • 둘 다 일리가 있음. AI 발전 지켜보며, 프로덕 엔지니어로서 일하며 해왔던 생각을 정리했음
  • 다만 나는 AI 전문가도 아니고 그냥 개발자임. Vibe 코딩 경험도 적음. 그러나 다른 분들의 의견을 듣고 싶어서, 그리고 불안해하는 주니어 개발자 분들께 도움이 되길 바라며 글을 썼음

직접 경험해본 Vibe: 이정도까지 vs 이정도밖에

Vibe 코딩으로 주말동안 알까기 게임 제작해봄. 7살 딸아이랑 같이 해보려고 만듦. 90% 코딩을 프롬프트만으로 진행, 구현 시간이 비약적으로 감소함(4시간 만에 나쁘지 않은 퀄리티로 완성)

이 과정에서 '이런 간단한 것도 못해?'라는 실망감과 '이 정도 요구사항만으로도 이렇게 훌륭하게 만들어준다고?'라는 놀라움을 번갈아 느낌. 특히 전자는 AI가 '내 말을 따르게' 하는 게 쉽지 않았기 때문이 컸음

그러나 어쨌든 프롬프트 다듬고 기술이 더 발전한다면 '놀라움'의 비중이 훨씬 더 커질 것이고, 이게 확실하게 주니어 개발자 채용 급감을 불러올 것이라고 생각

이 느낌을 파레토 법칙과 제품 성숙도 개념으로 얘기해보겠음

절망편: 96%의 코드는 AI가 작성할지도 모른다

제품 성숙도를 3단계 (제로투원, 원투텐, 그 이상)으로 본다면, 제로투원 수준의 코딩 대부분이 AI로 대체 가능해졌다는 것에 충격받음

파레토 법칙으로 보면 개발자가 제품 개발을 위해 생산하는 코드의 80%가 이 제로투원을 위한 산출물 아니었을까 생각함.

  • 아이디어를 구현하고 PMF를 찾는 과정에서 나오는 코드들. 그리고 Vibe 코딩으로 비개발자도 쉽게 제작 가능한 코드들.

나아가 원투텐에서 필요한 80%를 잘 정의하고 쪼개서 제로투원 수준으로 처리 가능하다고 가정한다면...

  • 극단적으로는 코드 생산량의 약 96% (= 0.8 + 0.2 * 0.8) 는 AI가 대체할 수 있지 않나 하는 생각
  • Vibe 코딩을 소개한 Y Combinator 영상에서도 몇몇 창업자는 "제품 코드베이스의 95%를 AI가 작성했다"고 말했다던데 묘하게 숫자가 맞아떨어짐

이는 개발자 역량에 대한 기대치와, MVP 수준의 제품에 대한 기대치를 상향 평준화할 것으로 예상.

  • Bootstrap, TailwindCSS 이후 프론트엔드 개발자에게 '괜찮은 수준의 UI 스타일링'이 기본 소양으로 되어버린 것과 유사

그렇다면 이전에는 제로투원 단계의 제품을 만드는 개발 능력만으로도 존중받았을 개발자들에 대한 채용 슬롯이 줄어드는 건 당연해 보임. 그러니 "이제 개발자는 필요없다"는 말이 과장이 아니게 된 것....

...정말 그럴까?

희망편: 그래도 여전히 개발자가 할 일은 많다

1) 시장 크기가 훨씬 커져서 할 일이 많아짐

Vibe 코딩의 가장 큰 의의는 제품 개발의 진입장벽을 낮추는 데 있음

  • 기존에 제로투원을 위해 개발자가 손으로 해야 했던 일들의 대부분을 코딩 에이전트들이 극단적으로 적은 비용(시간/돈/사람)으로 대체.
  • 즉 개발자 없이도 아이디어 실행-검증 싸이클을 빠르게 돌릴 수 있게 됨

따라서 이전에는 등장하지 못했던 제로투원 (또는 그 이하) 수준의 제품이 폭발적으로 많이 등장하게 될 것이고, '나도 내 아이디어를 구현해보고 싶다'는 사람들도 훨씬 더 늘어남.

이 모든 게 '개발자가 돈을 벌 수 있는' 시장 크기를 키우는 효과를 가져올 것. 원래는 개발자들의 고객이 아니었던 사람들이 새로운 고객층으로 바뀜. 예를 들면

  • 비개발자, PM, 디자이너가 본인 아이디어를 실현할 수 있게 해주는 Vibe 코딩 교육
  • Cursor와 함께 90%는 만들었는데 완성까지는 못가고 있는 제품의 완성을 돕는 단기 외주
  • 어떻게든 만든 제품을 실제로 운영해서 지속적인 수익화로 이어지게 해주는 컨설팅
  • Vibe 코딩을 더 잘, 더 쉽게 하는 데 도움을 주는 여러가지 유료 도구 개발

회사 밖에서 이런 일로 부수입을 얻든, 이런 일들을 하는 기업이 생기든 간에 시장 변화의 수혜는 개발자들이 가장 많이 누릴 거라고 봄

2) 개발자가 코딩 외에도 할 수 있고 해야 하는 일이 많음

AI가 '코딩'의 90%를 대체한다 해서 개발자 90%를 해고할 순 없음

  • 코딩이 제품 개발, 더 나아가 프로덕 엔지니어링에서 차지하는 비중이 생각보다 크지 않기 때문

제품에 단 하나의 기능이 추가되기까지 대략 어떤 과정을 거치는지만 봐도 이렇게나 단계가 많음.

  1. 문제 인식
  2. 해결 아이디어 도출
  3. 기대효과 및 비용 예상, 개발 우선순위 결정
  4. 제품에 기능으로 녹이기 위한 기획
  5. UI/UX 디자인
  6. 아키텍처 설계
  7. 백엔드 + 프론트엔드 + 인프라 구현
  8. 코드리뷰, 자동화 테스트, QA
  9. 배포, 모니터링, 기능 홍보, A/B 테스팅
  10. 유저 피드백 수집, 운영, 개선

Vibe 코딩은 여기서 7과 8의 일부만 대신해줄 뿐임.

  • 탁월한 프로덕 엔지니어라면 이 모든 단계에 일정 수준 이상 개입해야 함
  • 코딩을 AI가 대신해주니 나머지를 잘 하는 사람들의 가치가 오히려 커지는 것

3) 코딩만 보더라도 여전히 유의미하게 할 일이 많음

굳이 프로덕 엔지니어링까지 가지 않아도 할 일 많음

  • 원투텐 코딩의 마지막 몇%를 마무리할 일도 많고
  • 개발자가 스펙 설계와 구조 설계, 작업 쪼개기 등을 도와주면 Vibe 코딩에 들어가는 비용도 줄어들 것

그리고 원투텐 이상의 제품에서는 Vibe 코딩에 한계가 많음

  • 코드베이스 커짐 -> 제한된 컨텍스트 윈도우
  • 높은 보안 수준을 지키고 성능 향상시키려면 전문가의 직접 개입 필요
  • AI가 학습 잘 하지 못했을 라이브러리나 언어로 코딩할 때도 마찬가지
  • https://news.hada.io/topic?id=19923 도 비슷한 문제를 얘기하고 있음

그러면 이제 주니어 개발자는 어떻게?

세상이 절먕편으로 가든 희망편으로 가든 너무 빠르게 변하고 있는 건 확실함. 특히 채용의 문이 급격히 좁아지는 상황에서 주니어들이 어떻게 학습/성장하면 좋을까?

<무엇이 탁월한 개발자를 만드는가?> 논문을 읽고, 탁월한 개발자의 5가지 핵심 역량을 이렇게 정의해봤음

  • 훌륭한 코드를 짠다
  • 근거 기반 의사결정을 연습한다
  • 동료의 효과적 의사결정을 돕는다
  • 작업의 현재 가치를 극대화한다
  • 효과적으로 꾸준히 학습한다

이는 AI 시대에도 여전히 중요. 이걸 희망편과 엮어볼 수 있음

1) 커지는 시장을 적극 활용하기

나라면 이런 걸 해볼 것

  • 프롬프트 엔지니어링 공부하기
  • 새로 등장하는 AI 앱들 하나씩 찍먹하기
  • 어떻게 작업을 쪼개야 코딩 에이전트가 내 요구사항을 잘 들어주는지 공부하고 실험하기
  • 나의 작은 문제를 해결하는 앱을 Vibe 코딩으로 구현해서 배포해보기
  • 비개발자 지인이 Vibe 코딩 하고 싶다고 하면 (돈 받으며) 과외해주기
  • 지인이 구현 마무리해서 배포하고 운영하는 것도 (역시 돈 받으며) 도와줘보기

2) 프로덕 엔지니어로서 역량 갖추기

나라면 이런 걸 해볼 것

  • 문제 인식, 아이디어, 기획, 설계, 테스트, 운영 등 제품 전반에 관심 가지기
  • 솔로 창업가처럼 앱 제작/운영해보면 프로덕 엔지니어링 역량 자연스레 성장할 것
  • 팀 협업 통해 제품 개선 노력하면서 협업 + 프로덕 엔지니어링 역량 향상 시도

나는 개발자 채용해서 오퍼레터 작성할 때 항상 '당신이 미니 CTO라고 생각하고 일해주기를 바란다'는 내용을 넣곤 했음

  • 적어도 당신이 맡은 프로젝트에서는 당신이 기술적 의사결정의 최종 책임자다
  • 그 프로젝트를 성공시키는 데 있어서 필요한 모든 단계에 개입하라
  • 기술적이든 비기술적이든 동료가 효과적 의사결정과 행동을 할 수 있게 도와라

3) 개별 기술에 대해 깊이 이해하고 코딩 센스 키우기

개별 기술을 깊이 이해하는 개발자는 꾸준히 수요가 있음. PMF를 넘어 유니콘/데카콘 기업으로 가려면 Make it Right & Fast가 필수니까.

여기엔 왕도가 없음. (AI 도움 받으면서) 시간 투자해서 노력해야 함.

  • 프레임워크/라이브러리 내부 탐구, 역사적 맥락 이해, 오픈소스 기여, 라이브러리 직접 제작, 버그 추적/수정, 웹 표준/성능 개선 등

동시에 좋은 코드에 대한 자신만의 기준을 세우고, 좋은 코드를 알아보는 '코딩 센스'가 더욱 중요해질 것. AI의 잘못된 Vibe를 인지하고, 멈추고, 개입해야 하기 때문.

코딩 센스를 기르려면 의도적 수련 필요. 여기서도 시간과 노력 들여야 함

  • 좋은 코드를 많이 보고, 내가 짠 코드에 대해 AI든 시니어 개발자든 피드백을 많이 받아보고, AI나 동료가 작성한 코드를 보며 '이대로 가면 어떤 문제가 생길 것 같은지' 예상하고, 실제와 비교해보기

 

 

반응형
반응형

(출처: 패스트캠퍼스 "Kubernetes와 Docker로 한 번에 끝내는 컨테이너 기반 MSA" 강의를 들으며 내용 정리한 것임을 밝힙니다)

도커와 쿠버네티스를 야기 하고자 하려면, 우선적으로 컨테이너를 언급해야 한다.

 

#1. 컨테이너 기술의 발전

 

1. 컨테이너 등장배경

1) 전통방식

     [  H/W -> OS ] -> Framework -> Library       => APP

    - 하나의 서버에 app1, app2, app3 을 running 시킬때  framework , library 버젼등에 대한 제약이 발생하여 유연하게 사용이 어렵다

    - 갖고 있는 자원을 효율적으로 사용하기는 한계가 있다.

 

2) 가상머신 

     [  H/W -> OS ] ->[ HyperVisor ]-> Framework -> Library       => APP

     - 가상머신을 running 하기 위한 자원 overhead 가 발생

     - 전통방식에 대비 성능이 떨어짐????? why???

 

3) 컨테이너 

    1번과 2번의 단점/문제점을 해결할 수 있는 방법이 필요...좀더 효율화

    [  H/W -> OS ] ->[ Container Engine(Docker) ]-> Framework -> Library       => APP

    - host 입장에서의 하나의 process 와 유사 (= container)

    - 각 container 간 격리 (파일시스템 등) 되어 각 container 간 의존성 충돌 문제 없어짐

 

4) 쿠버네티스 (k8s)

     Container Orchestration System     

      - Container Engine : 하나의 서버내에서 Container 를 어떻게 관리할 수 있을까? 하는 관리 소프트웨어

      - Container Orchestration System : 여러서버들로 구성된 클러스터 환경에서 Container들 을 어떻게 하면 잘 관리할 수 있을까? 하는 관리하기 위한 기술 , 소프트웨어 를 의미

 

2. 컨테이너 기술 발전 흐름도

   1) docker 릴리즈 : 2013.3.20

   2) k8s : 2014

 

(계속 작성중....) not complete....

 

 

 

반응형
반응형

출처: https://seongjin.me/how-to-prepare-cka-exam/

 

Certified Kubernetes Administrator(CKA) 자격증 합격 후기 및 유용한 팁 (2022.02, v1.23)

CKA는 쿠버네티스 클러스터 관리 능력을 검증하는 대표적인 국제 자격증 중 하나다. 엔지니어 경험이 없는 초심자로서 이 CKA 자격증 시험에 도전하여 합격한 과정과 후기를 공유한다. 같은 시험

seongjin.me

 

 

CKA 자격증 시험은 쿠버네티스 기술을 관리하는 Linux Foundation 산하의 Cloud Native Computing Foundation(CNCF)에서 주관하며, 컨테이너 관리 도구인 쿠버네티스 클러스터의 관리 능력 검증을 목적으로 한다. 따라서 쿠버네티스 클러스터의 설치와 운영, 내부 리소스 배포 및 네트워크 설정, 그리고 클러스터에 발생한 문제 해결에 이르기까지 넓은 범위의 응용 지식을 다룬다. 또한 단순 이론 암기를 지양하고 철저한 실습 위주로 검증하므로 배움의 과정 자체에서도 얻을 것이 많다.

시험 진행 방식

시험 개요

  • Hands-on Practical Lab 형식의 온라인 원격 시험이다.
  •  120분 동안 약 15~20문제 가량을 풀어야 한다.
  • 100점 만점(100%) 중 66점(66%) 이상을 얻어야 한다.
  • 시험은 항상 최신 버전의 쿠버네티스 환경에서 진행된다. 만약 새 버전이 릴리즈 될 경우 시험 환경에는 4-8주 이내에 반영된다.
  • 1회 등록시 1년 이내에 총 2회까지 응시 가능하다. 1차에서 불합격해도 2차 기회가 주어진다.
  • 자격 유효기간은 3년이다.

응시 환경 체크

온라인 원격 시험이므로 시험을 치르는 주변 환경에 대해 상당히 엄격한 점검이 이루어진다. 아래 사항들을 꼼꼼히 살펴서 미리 준비해두자.

  • 응시자 외에 아무도 없는 격리된 개인 공간이어야 한다. 공공장소는 허용되지 않는다.
  • 시험 공간 4면에 책장, 액자, TV 등 시선을 끌만한 요소가 없어야 한다.
  • 책상 위의 불필요한 물품을 모두 치워야 한다. 내 경우엔 신분증도 신분 확인 후엔 치워야 했다. 단, 라벨 없는 투명한 물병은 허용되었다.
  • 신분 인증을 위해서는 시험 등록시 입력한 이름을 직접 확인 가능한 국가 공인 신분증이 필요하다. 어떤 언어로 입력했느냐에 따라 준비해야 할 신분증이 달라진다. 국문으로 입력했다면 주민등록증이나 국문 운전면허증으로 인증 가능하다. 만약 영문으로 입력했다면 여권 또는 영문 운전면허증을 반드시 준비하자. 얼굴 사진과 이름을 한 번에 확인 가능한 신분증이  권장된다.
  • 웹캠이 필수다. 별도의 웹캠이 없다면 가급적 15인치 이상의 대형 노트북 사용을 권장한다.
  • 시험 화면과 응시자 얼굴이 모두 실시간으로 감독관에게 전송된다. 인터넷 회선 속도와 연결 감도를 반드시 사전 점검해야 한다.
  • 8080/tcp, 4505/tcp, 4506/tcp 포트가 열려있어야 한다. 방화벽 이슈가 있는지 꼭 확인해보자.
  • 현재는 오직 1대의 모니터만 사용 가능하다. 노트북에 외장 모니터를 연결하는 것은 허용되지 않는다.
  • 내 경우에는 노트북 거치대와 블루투스 키보드, 터치패드 사용이 허용되었다.
  • 체크 과정에서 소요되는 시간은 주어진 시험 시간(120분)에 영향을 주지 않으므로 편안한 마음으로 진행하자.

시험 진행 환경 및 주의사항

실제 시험은 아래와 같은 UI 환경에서 진행된다. 이 내용은 2022년 8월, 쿠버네티스 v1.24 환경 기준으로 업데이트 된 내용임을 밝힌다.

새로 개편된 CKA 시험의 ExamUI 환경 (출처: Linux Foundation)

  • 응시자는 PSI Bridge Secure Browser를 통해 리눅스 기반의 VM에 원격 접속하여 시험을 치른다. 원격 응시 가능한 시스템 사양은 여기서 확인할 수 있다.
  • PSI Bridge Secure Browser 상단의 -, + 버튼으로 VM 화면의 글자 크기를 조정 가능하다. 이밖에 시험 화면 조정을 위한 방법도 함께 숙지하면 좋다.
  • VM에 포함된 터미널(Terminal)을 이용하여 문제 풀이를 진행한다.
  • 오픈북 용도로 VM에 포함된 브라우저(Firefox)를 이용할 수 있다. 오직 지정된 경로의 문서들만 이용 가능하다. 이밖의 다른 웹사이트 접속은 막혀있다. 번역본 문서 열람이 허가되지 않는 경우도 있었다고 하니 영문 문서에 익숙해지는 것이 좋다. 대신 이제는 한 번에 여러 탭으로 여러 문서를 동시에 참고할 수 있다.
  • 사전에 정리해 둔 북마크는 더 이상 사용할 수 없다. 미리 초기화 된 VM에 접속해서 시험을 치르므로 어쩔 수 없는 부분이다.
  • 시험용 VM의 터미널에서 복사/붙여넣기 단축키는 Ctrl+SHIFT+C, Ctrl+SHIFT+V 를 이용해야 한다. 이 단축키는 오직 터미널 안에서만 동작한다. 터미널 바깥에서는 Ctrl+C, Ctrl+V 를 이용한다. 단축키가 잘 듣지 않을 때엔 마우스 오른클릭을 이용하는 것이 좋다.
  • VM 내 브라우저(Firefox)에서 터미널로 복사-붙여넣기를 할 때 “Unsafe Paste” 경고가 뜬다. 이 경고는 그냥 무시해도 된다. 터미널의 Edit > Preferences > General 에서 Show unsafe paste dialog 옵션을 찾아 해제하면 경고가 뜨지 않는다.
  • 시험 화면의 우측 상단에 메모장(notepad) 기능이 있지만, 이전과 달리 VM 화면과 메모장 사이의 텍스트 복사 기능이 막혀있으므로 쓸 이유가 거의 없다.
  • 대신 VM에 포함되어 있는 텍스트 편집기(Mousepad)를 이용하자. 공식 문서의 샘플 YAML을 여기로 복사해서 편집한 뒤, 터미널의 vi 또는 vim 화면에 붙여넣는 식으로 활용할 수 있다.
  • VM 화면의 우측 상단에 보면 여러 개의 작업공간(Workspace)을 만들어 전환할 수 있는 버튼이 있다. 이걸 잘 활용하면 문서 참고용 Firefox 화면, YAML 편집 화면, 터미널 화면을 각각 넓게 구성해서 쓸 수 있다.
  • 각 문제마다 kubectl config set-context <컨텍스트명> 형태로 문제를 수행할 클러스터를 지정하도록 되어 있다. 이전 문제와 같은 클러스터에서 작업하게 되더라도 실수를 줄이는 차원에서 꼭 다시 실행해주자.
  • 2022년 8월 기준으로 시험용 클러스터의 OS는 Ubuntu 20.04로 지정되어 있다. 따라서 클러스터 설치 또는 업데이트 과제 수행시 패키지 관리를 apt로 해야 한다.
  • 각 문제마다 참고할 만한 공식 문서 링크가 함께 첨부되어 있다. 그러나 큰 도움은 되지 않으므로 https://kubernetes.io/docs/에서 필요한 문서를 직접 검색하는 것이 좋다.
  • 감독관과는 오직 채팅으로만 대화할 수 있다.

 

시험 준비 방법

리눅스 CLI 환경과 편집기에 적응하기

CKA 시험은 실제 구동되는 쿠버네티스 클러스터 환경에 직접 접속해서 문제를 해결하는 구성을 갖고 있다. 따라서 리눅스의 CLI 환경, 그리고 CLI를 통해 직접 사용 가능한 텍스트 편집기의 기초 사용법에 먼저 익숙해져야 한다. 리눅스 경험이 부족했던 내 경우에는 공부 기간 중 방송통신대학교에서 UNIX시스템 과목 수강을 병행하면서 파일 및 디렉터리 관리, 그리고 텍스트 탐색 및 편집 방법을 우선적으로 익혔다. 이 과정이 없었다면 이후의 학습 진행은 불가능했을 것이다.

CLI 환경에서의 텍스트 편집기는 vi 또는 vim을 주로 사용하게 된다. 이에 대한 사용법은 아래 블로그 포스팅들을 참고하여 익혔다.

컨테이너 기초 다지기

쿠버네티스는 컨테이너 오케스트레이션을 구현한 기술이다. 따라서 컨테이너와 도커, 네트워크에 대한 사전 지식이 필요하다.

내 경우에는 도커/쿠버네티스 온라인 부트캠프에서 조경민 매니저님께서 진행하신 도커 강의와, Eric Han님의 기술 블로그가 무척 큰 도움이 되었다. 만약 도커가 처음이라면, 아래 Eric Han님의 두 포스팅을 참고하면 좋다. 시간이 걸리더라도 차근차근 읽어보자.

도커를 통해 컨테이너 기반의 간단한 애플리케이션 배포를 직접 시험해보고 싶은 경우를 위해 예전에 연재했던 블로그 포스팅들도 함께 공유한다.

모두가 아는 '그 강의'로 시작하기

CKA 시험 후기를 찾아보면 반드시 언급되는 강의가 있다. 모두가 알고 모두가 추천하는 그 강의, 바로 Mumshad Mannambeth의 Certified Kubernetes Administrator (CKA) with Practice Tests다. 실제 수강해보니 그 명성 답게 유익한 강의였다.

이 강의는 쿠버네티스의 핵심 컨셉은 물론 클러스터의 주요 리소스들에 대한 기초적인 운용 방법을 명료하게 안내해준다. 커리큘럼이 체계적으로 잘 정비되어 있고, 영상 강의 내용을 복기할 수 있는 간편한 실습 환경도 함께 겸비하고 있다. KodeKloud를 통해 수십 가지 유형의 클러스터 실습 환경을 제공하며, 실제 시험 문제와 유사한 구성을 갖춘 Mock Exams  Lightning Labs도 포함되어 있다. 할인가 기준 2만 원 미만의 가격이 믿기지 않을 정도다.

아는 내용이라고 건너뛰지 말고 가급적 하나하나 찬찬히 들여다보길 권한다. 빽빽하게 구성된 커리큘럼 특성상 중간에 대충 넘겨짚고 넘어갔다가 나중에 어려움을 겪을 수 있다. 또한 강의 영상에서 한글 자막이 지원되지 않으므로 영어 독해 및 청해 능력이 필요하다. 영문 자막도 자동 생성 기반이어서 때때로 부정확한 내용이 출력될 수 있다는 점에 유의하자.

배운 것을 내 언어로 정리하기

모든 공부의 과정이 대체로 그렇듯이, 초반의 기초 지식을 익히는 시간이 가장 지루하고 힘들다. 그러나 이 단계를 잘 넘겨서 내것으로 소화해야 이후에 익혀야 할 정보량에 압도되지 않는다. 특히 클러스터의 주요 구성요소들에 대한 개괄적인 이해가 있어야 최근 시험에서 비중이 높아진 트러블슈팅 상황에도 빠르게 대처할 수 있다.

이 블로그에서는 쿠버네티스의 기초 구성요소에 대해 그동안 공부하고 익힌 내용을 kubernetes 태그에 모아두고 있다. 어디선가 얻은 내용을 단순 요약하기보단 시간이 걸리더라도 부족하게나마 내 언어로 정리하기 위해 애썼다. 지난한 과정이었지만, 덕분에 실습 단계에서도 내게 필요한 정보를 빠르게 캐치하여 배움을 수월하게 이어갈 수 있었다.

비록 자격증 시험의 모든 범위를 다루고 있진 않지만, 입문 과정에서 조금이라도 도움이 될 수 있으리라 생각되어 작성글 목록을 공유한다. 앞서 소개한 Mumshad의 강의에서도 이 내용들을 대부분 다루고 있다.

실습, 그리고 또 실습하기

터미널에서 직접 클러스터를 다루며 평가받는 시험이므로 반복적인 실습이 반드시 필요하다.

위에서 소개한 유데미 강의를 수강했다면 Mock Exams  Lightning Labs를 꼭 진행해보자. 문제를 풀어나갈 시험 환경이 어떤 형태로 구성되는지, 어떠한 문제 유형을 다루게 되는지 미리 적응할 수 있는 좋은 기회다. 실제로 경험해보니, 2022년 2월 기준으로 Mock Exam 2 Mock Exam 3의 난이도가 실제 시험에서 중간 또는 낮은 난이도의 문제들과 수준이 비슷했다. 틀리는 문제 없이, 넉넉한 여유 시간을 두고 풀 수 있을 때까지 반복 연습하는 것을 권한다. 높은 난이도의 문제를 대비하려면 아래에서 소개할 killer.sh를 이용하는게 좋다.

유데미 강의 없이 시험을 준비할 경우, 실습환경을 직접 구성해보는 것도 가능하다. 아래의 깃허브 리포지터리를 참고하자.

killer.sh 시뮬레이터 도전하기

CKA 시험을 등록하면 killer.sh 에서 문제 풀이 실습을 해볼 수 있는 무료 세션 2회분이 제공된다. 지금까지 배우고 연습한 것을 총정리한다는 마음으로 도전해보자.

이름부터 살벌한 시뮬레이터, killer.sh 접속 화면

많은 후기글에서 소개된 것처럼 killer.sh의 난이도는 상당히 높다. 그러나 대개는 하나의 문제 안에서 이것저것 해결해야 할 사항이 많거나, 일반적인 자격증 관련 강의에서 잘 다루지 않는 리소스 및 제약사항을 이용해야 하기에 까다로운 경우들에 속했다. 이를테면 podAntiAffinity를 이용하여 DaemonSet처럼 동작하는 Deployment를 구현하는 식이다. 실제로 경험해보니 시간만 충분하다면 쿠버네티스 공식 문서를 참고하며 풀어나갈 수 있는 문제들이었다.

killer.sh의 시뮬레이터는 리소스 디자인 및 배포, 정보 탐색, 클러스터 문제 해결 등 다양한 부문에서 빠른 시간 안에 실력을 점검하고 보완하기 좋은 구성을 갖췄다. 그러니 1회차에는 시간 제한에 얽매이지 말고 모든 문제들을 직접 스스로 풀어본 뒤, 2회차에서 시간 내 완료에 도전해보길 권한다. 나는 시험 전날 2회차를 진행하면서 25개 중 21개의 문제를 120분 안에 해결했고, 다음날 시험 과정에서 아무런 어려움을 겪지 않았다.

시험에 유용한 팁 소개

kubectl 단축어와 자동 완성기능 이용하기

2022년 들어 기존 시험 환경에 응시자의 편의를 위한 요소들이 새로 추가되었다.

  • kubectl에 대한 단축어(alias) k를 모든 클러스터에서 바로 사용할 수 있다.
  • kubectl 명령에 대한 셸 자동완성(Bash autocompletion) 기능도 바로 사용할 수 있다.
  • YAML 또는 JSON 작업을 위한 jq, 그밖에 tmux와 curl, wget, man이 기본 지원된다.

vim 설정파일 추가하기

아래 내용은 2022년 7월 전후로 시험 환경에 기본 적용된 사항이다. 그러나 만약을 대비하여 설정 방법을 남겨둔다.

시험 특성상 대부분의 문제 풀이 과정에서 YAML 파일을 편집하게 된다. 따라서 시험이 시작되면 처음 1분을 에디터 환경 편집에 할애하면 좋다. vim 기준으로 시험 과정에서 내가 사용한 설정값은 다음과 같다.

# tab을 2칸으로 설정
set tabstop=2

# tab 사용시 발생하는 공백을 띄어쓰기(스페이스)로 채움
set expandtab

# shift(>, >>, <, << 등)를 2칸으로 설정
set shiftwidth=2

위 내용을 외워서 과제 수행용 노드에 ~/.vimrc 파일로 저장해 두면 편집 작업이 한결 수월해진다.

kubectl의 달인이 되기

17개 내외의 문제를 해결하기에 120분의 시간은 조금 빡빡한 편이다. 조금이라도 시간을 절약하려면 가능한 한 많은 리소스 작업을 kubectl 명령 만으로 해결해낼 수 있어야 한다.

시험에서 다루는 리소스들 가운데 멀티 컨테이너 파드와 PV, PVC, 그리고 NetworkPolicy 정도를 제외하면 대부분 kubectl을 이용하여 빠르게 생성할 수 있다. 또한 --dry-run=client -o yaml 플래그와 결합하면 쿠버네티스 공식 문서 없이도 필요한 리소스의 기본 골격을 바로 뽑아서 편집할 수 있게 된다. 쿠버네티스 자격 시험에서 시간 관리의 성패는 결국 kubectl을 얼마나 빠르게 잘 활용하느냐에 달려 있다.

kubectl Cheat Sheet를 반드시 참고하자. 실제로 몇몇 문제는 여기에 기재된 명령어 만으로 바로 해결이 가능한 경우도 있었다.

JSONPath 익히기

CKA 시험에는 클러스터/노드/리소스 관련 특정 정보를 찾아 양식에 맞게 가공하여 제출하는 문제가 반드시 출제된다. kubectl get <리소스+리소스명> -o json 명령으로 받아온 출력물을 뒤져서 답안을 한땀한땀 써내려 가는 것은 촉박한 시험 환경에선 무척 수고로운 일이다.

이럴 때 내게 필요한 정보만 가공해서 빠르게 출력시키는 수단으로 JSONPath를 익혀두면 도움이 된다. 내 경우에는 시험 중에 특정 리소스의 정보를 찾아 주어진 조건대로 정렬해서 파일로 제출하는 형태의 문제를 자주 만났는데, 이걸 익혀둔 덕분에 정말 많은 시간과 노력을 절약할 수 있었다.

아래의 공식 문서에서 kubectl 명령과 JSONPath를 어떻게 결합하여 쓸 수 있는지 확인할 수 있다. 보다 디테일한 사용 방법 또한 다른 포스팅에서 정리하여 두었으니 함께 참고하면 도움이 될 것이다.

실수 줄이기

긴장도가 높은 환경에서 시간 제한을 두고 문제를 풀다 보면 의도치 않게 실수가 생길 수도 있다. 아래의 체크리스트를 반드시 떠올리자.

  1. 내 리소스가 올바른 클러스터(컨텍스트)에 만들어졌는가?
  2. 내 리소스가 올바른 네임스페이스에 만들어졌는가?
  3. 내 리소스가 문제에 제시된 대로 잘 동작하고 있는가?
  4. 내 리소스의 이름에 오탈자는 없는가?
  5. 파일로 제출하는 답안의 경우, 해당 파일에 필요한 내용이 올바르게 들어가 있는가?

알아두면 좋은 핵심 문제 유형

etcd 스냅샷 생성 및 복구

지정된 클러스터의 마스터 노드 etcd 백업 및 복원 방법을 반드시 익혀두자. 배점도 크기 때문에 놓치면 눈물 난다. 나는 etcdctl API의 버전 3 기준으로 CA인증서, 서버인증서 및 키파일 경로를 포함하여 snapshot 생성하고 복원하는 명령어 전체를 매뉴얼 없이 바로 입력 가능하도록 연습했다.

클러스터 노드 업그레이드

마스터 또는 워커 노드의 업그레이드 절차를 숙지하자. 공식 문서에 방법이 상세하게 안내되어 있으므로 참고하여 차근차근 진행하면 된다. 특히 업그레이드 과정 중간에 노드의 drain과 cordon, uncordon 절차를 반드시 따라야 한다.

파드 간 네트워크 구성

Service와 Ingress, 그리고 NetworkPolicy를 이용한 파드 간 네트워크 구성을 반드시 실습해보기 바란다. 이 유형은 위에서 소개한 유데미 강의 만으로는 커버되지 않으므로 killer.sh 또는 직접 구성한 클러스터를 통해 실습하는 것이 좋다. 내 경우에는 아래의 공식 문서에서 많은 도움을 얻었다.

로그 스트리밍용 사이드카(Sidecar) 컨테이너 구현

emptyDir 또는 hostPath 유형의 공유 볼륨을 이용하여 로깅 에이전트 기능을 하는 사이드카(Sidecar) 컨테이너 구현도 꼭 연습해보자. 이를 위해서는 멀티 컨테이너 파드를 구성하는 방법, 그리고 이 컨테이너들이 함께 공유하는 볼륨 설정법을 알아야 한다. 아래의 공식 문서와 블로그 포스팅을 각각 참고하자.

트러블슈팅(Troubleshooting)

2020년 9월부터 트러블슈팅이 CKA 시험에서 가장 큰 채점 비중(30%)을 차지하게 되었다. 66% 이상의 점수를 획득해야 하는 시험 구조상, 트러블슈팅 문제를 반드시 준비해야만 합격을 기대할 수 있다.

CKA 과정에서 다루게 되는 트러블슈팅의 유형은 크게 네 가지로 나뉜다.

  1. 애플리케이션(파드/컨테이너) 구동 문제
  2. 컨트롤 플레인 구성 요소의 구동 문제
  3. 워커 노드의 구동 상태 확인 및 복원 문제
  4. 네트워크 문제

2022년 2월 기준으로, 내 경우에는 위의 1, 2, 3번 유형에 해당하는 트러블슈팅 문제를 모두 경험했다. 특히 컨트롤 플레인 관련 트러블이 해결되지 않으면 이어지는 2개 정도의 문제가 연이어 해결 불가능한 구조로 출제되었다. 따라서 각 유형 별로 문제의 근원을 탐지하는 방법을 반드시 학습해 두어야 한다. 유데미 강의 또는 killer.sh에서 트러블슈팅을 실습해 볼 수 있으며, 아래의 공식 문서들 또한 문제 해결에 도움이 된다.

반응형

'DevOps' 카테고리의 다른 글

k8s Architecture  (0) 2023.06.15
Iaas, paas, saas 차이  (0) 2019.12.18
CentOS 에서 yum-config-manager: command not found  (0) 2019.09.02
centos 7 virtualbox guest additions 해결및 공유폴더설정완료  (0) 2019.08.26
Devops roadmap  (0) 2019.06.25

+ Recent posts