오늘날 소프트웨어 개발 업계는 끊임없이 변화하고 있습니다. 생성형 인공지능(AI)을 비롯한 신기술은 하루가 멀다 하며 쏟아지고 있고요. 이는 엔지니어의 개발 방식, 문화, 환경을 뒤흔들죠. 특히 DevOps 엔지니어는 이러한 환경 변화에 능동적으로 대처하고, 기술 발전에 뒤처지지 않도록 꾸준히 공부해야 합니다. DevOps가 여전히 과도기에 머문 조직도 적지 않고요. DevOps 엔지니어는 내부에 DevOps를 잘 정착시켜야 할 책임이 있습니다. 이로써 DevOps 엔지니어는 조직에서 시장과 고객 요구에 부합하는 ‘훌륭한 프로덕트’를 만들도록 기여해야 하죠. 그러려면 DevOps 엔지니어가 기술 트렌드 변화를 계속 확인하고, 조직에서 개발 모범 관행을 만드는 역량도 쌓아야 합니다.
인포그랩 기술 블로그 독자 가운데에는 DevOps 엔지니어로 커리어를 이제 막 시작했거나, 이미 DevOps 엔지니어로 일하며 관련 지식과 정보를 구하려는 분들이 많은데요. 인포그랩에서는 이러한 분들이 현업에서 DevOps 실무를 원활하게 수행하는 데 도움이 되도록 ‘DevOps Expert Labs’라는 서비스를 최근 선보였습니다. DevOps Expert Labs는 실무자를 위한 DevOps 교육 서비스 인데요. 이는 손으로 조작하며 직접 따라 해 보는 ‘핸즈온’ 교육 방식을 취합니다. 학습자는 이 서비스로 DevOps 기반 기술, DevOps 시스템 아키텍처 구성, 지속적 통합/테스트/배포 자동화 파이프라인 구축 등을 클라우드 네이티브 기반과 프로덕션 수준 환경에서 직접 실습하고요. 기술 관행까지 배울 수 있죠. 이 글에서는 DevOps 엔지니어로 일할 때 알아야 할 지식과 인포그랩의 DevOps Expert Labs로 이를 잘 학습하는 방법을 소개하고자 합니다.
DevOps 엔지니어가 알아야 할 지식
출처=픽사베이DevOps 엔지니어는 개발팀과 운영팀의 업무를 유기적으로 연결하고요. 조직이 시장과 고객 요구에 맞는 ‘훌륭한 프로덕트’를 선보이도록 업무 생산성과 효율성을 끌어올리는 데 주효한 역할을 합니다. 따라서 DevOps 엔지니어는 개발 지식과 운영 지식, 조직의 업무 흐름을 모두 알아야 하고요. 이러한 지식을 활용해 개발, 운영 업무를 자동화하고, 정책을 강제하는 역할도 수행해야 하죠.
DevOps는 소프트웨어 개발 라이프사이클 전반을 아우르는데요. 업무 범위가 포괄적인 만큼 DevOps 엔지니어가 알아야 할 지식도 무수히 많습니다. DevOps 엔지니어가 반드시 알아야 하는 지식은 다음과 같습니다.
1.개발 방법론과 모범 관행
DevOps 엔지니어로서 첫걸음은 **‘조직의 업무 흐름을 정확히 이해하는 것’**입니다. 이를 바탕으로 더 나은 팀 구성이나 협업 방법을 조직에 제시해야 합니다. 그러려면 DevOps 엔지니어가 ‘워터풀 모델’, ‘애자일’과 같은 기존 개발 방법론을 정확히 숙지해야 하고요. 개발 관행, 문서 작성 관행, 운영 관행 등 **여러 모범 관행(best practice)**을 찾아야 합니다. ‘조직이 가장 잘 협업하는 환경’을 만드는 데 이러한 관행을 활용해야 하고요.
2.프로그래밍 언어와 스크립트 언어
개발이 끝난 애플리케이션을 프로덕션 환경에 신속하게 배포하는 일도 DevOps 엔지니어의 중요한 업무입니다. 보통 개발팀이 애플리케이션을 개발하지만 DevOps 엔지니어도 빌드 시스템을 이해하고 스크립트를 개발해야 하죠. 운영에서 다른 서비스와 통합할 때도 개발을 이해하고 스크립트를 만들어 작업할 때가 많은데요. 스크립트를 작성하려면 Shell Script 혹은 Python을 능숙하게 다뤄야 하고요. Java와 Gradle, JavaScript, NPM 같은 프로그래밍 언어와 빌드 시스템도 잘 이해해야 합니다.
3.버전 관리 / IaC(Infrastructure as Code) / 구성 관리
사용자의 요구사항 변화에 맞춰 코드도 끊임없이 변해야 합니다. 코드는 단위 테스트나 인수 테스트 등 여러 검증 절차도 거쳐야 하고요. 이를 오류 없이 배포하려면 여러 가지를 설정해야 하죠. 이 모든 정보를 적절히 관리하고 협업하려면 반드시 정보의 버전을 관리해야 하는데요. Git, GitLab 같 은 도구로 버전을 관리할 수 있습니다. DevOps 엔지니어는 이를 활용한 버전 관리 방법을 알아야 합니다.
특히 Git을 사용하면 소스 코드의 버전을 관리할 수 있고요. 또 애플리케이션의 구성 정보와 인프라 정보의 버전을 통합적으로 관리할 수 있죠. 이를 **‘IaC’**라고 하는데요. Terraform을 사용하면 클라우드 인프라를 코드로 관리하며, 이를 자동으로 배포하거나 변경할 수 있습니다. 또 Ansible, Chef와 같은 구성 관리 도구를 사용하면 서버에 설치된 패키지나 설정을 명시적인 파일로 관리할 수 있죠. DevOps 엔지니어는 이러한 도구를 활용한 IaC, 구성 관리 방법도 익혀야 합니다.
4.CI/CD
프로덕트를 신속하게 제공하려면 개발/테스트/배포 절차를 자동화해야 합니다. 이를 ‘지속적 통합/지속적 배포(CI/CD)’라고 하는데요. DevOps 엔지니어는 코드를 작성하고 테스트하며 서버에 배포하는 과정을 자동화하는 방법을 반드시 숙지해야 합니다. 참고로 CI/CD는 주로 Git과 연동되어 동작하는데요. 가장 대표적인 서비스는 GitLab CI/CD와 GitHub Actions입니다. DevOps 엔지니어라면 이러한 서비스를 활용해 개발/테스트/배포 절차를 자동화하는 방법을 알아두면 더 좋죠.
5.IT 하드웨어와 인프라
배포를 촉진하고 안정적으로 운영하는 것도 DevOps의 중요한 과제입니다. DevOps 엔지니어는 이를 위해 서버와 애플리케이션의 보안, 네트워크, 구성을 설정, 관리하고요. 문제가 있으면 트러블슈팅도 해야 하죠. 따라서 서버, 네트워크, 운영체제 등 IT 하드웨어와 인프라 영역 전반을 깊이 있게 알아야 합니다.
6.보안 조치
DevOps 환경에서는 언제나 신속하고 안전하게 배포해야 합니다. DevOps 엔지니어는 이를 위해 애플리케이션 보안, 인프라 보안, 데이터 암호화 작업 등 여러 보안 조치를 신속하게 실행하는 방법을 숙지해야 하죠. 아울러 DevOps 엔지니어는 보안/감사 정책이 배포마다 적용되도록 자동화할 줄도 알아야 합니다. 특히 SAST, Secret Detection, Dependency scanning 같은 보안 관행을 자동화해 프로젝트에 적용하는 업무의 중요성도 유념해야 하고요.
7.Docker / Kubernetes / 클라우드
클라우드가 보편화되면서 애플리케이션을 Docker로 빌드해 Kubernetes에 배포하는 업무도 DevOps 엔지니어의 중요한 역할이 됐습니다. DevOps 엔지니어는 Docker의 동작 원리와 빌드, 캐싱 지식을 반드시 알아야 하고요. Kubernetes에서 각종 리소스를 생성하고 관리하는 일에도 익숙해져야 하죠. Terraform으로 인프라를 구축하려면 AWS, GCP 같은 클라우드 지식도 익혀야 하고요. GitOps 방식으로 배포한다면 Argo CD 같은 도구도 능숙히 다뤄야 합니다.
8.서비스 통합
요즘은 데이터베이스나 메시징 기능을 개발해 사용하기보다 Redis, Kafka 같은 외부 서비스를 많이 사용합니다. 또 애플리케이션을 기능 단위로 잘게 쪼개서 배포하는 마이크로서비스 관행도 확산됐는데요. DevOps 엔지니어는 이를 고려해 Redis, Kafka 같은 도구를 설치, 구성, 사용하는 방법을 알아야 합니다. 또 서비스의 연결 상태를 관리하는 Service Mesh 기술도 잘 이해하고 운용해야 하죠. DevOps 엔지니어의 목표는 리소스와 서비스의 전체적인 관점을 확립하고 이것이 원활히 상호 운영되 도록 하는 것이기 때문입니다.
9.모니터링 / 옵저버빌리티
애플리케이션이 정상적으로 배포되었더라도 ‘동작에 문제가 없는지’ 계속 확인해야 합니다. 메모리, CPU, I/O 등 시스템의 기본 정보를 모니터링하는 과정은 필수고요. **로그, 메트릭, 트레이스를 수집하고 시각화해 능동적으로 시스템을 분석하는 옵저버빌리티(Observability)**도 적용해야 하죠. 이를 위해 DevOps 엔지니어는 Prometheus, Grafana와 같은 도구를 설치, 구성할 줄 알아야 하고요. Sentry로 애플리케이션 에러를 추적, 분석할 수 있어야 합니다. 마지막으로 시스템이 이상(abnormal) 수치를 보이면 자동 조치(self-remediation)하거나 담당자에게 이메일 또는 Slack으로 알림(alert)을 보내는 시스템도 구축해야 하고요.
10.평가 분석
DevOps 엔지니어는 조직의 DevOps 성숙도를 면밀히 평가하고 개선하는 로드맵을 제시해야 합니다. 성숙도를 평가하는 방법은 여러 가지인데요. 가장 대표적인 지표가 DORA 메트릭이죠. DORA 메트릭에서는 **‘배포 빈도’, ‘변경 리드 타임’, ‘평균 복구 시간’, ‘변경 실패율’**을 측정하는데요. DevOps 엔지니어는 이러한 지표를 효과적으로 수집하고 분석하는 방법을 익히고요. 이를 토대로 조직의 DevOps 관행을 더 나은 방향으로 인도해야 합니다.
DevOps 실무 역량 강화에 필요한 것
DevOps Expert Labs 홈페이지 메인 화면앞서 살펴봤듯 DevOps 엔지니어가 학습해야 할 지식은 무척 많습니다. 이론을 충분히 아는 것도 중요하지만 직접 명령을 작성하고 인프라를 구축하는 실무 경험이 가장 중요한데요. 초심자라면 유튜브나 책만 봐서는 실무 역량을 쌓기 어렵죠.
현업에서 활동하는 DevOps 엔지니어도 실전 업무 경험만으로 실무 역량을 키우기에는 한계가 있습니다. 물론 실전 경험이 빠른 성장에 도움이 될 수는 있습니다. 그러나 조직에 DevOps 팀이 없거나, 도움받을 시니어 DevOps 엔지니어가 없다면 어떨까요? 이런 상황에 부닥친 DevOps 엔지니어는 올바른 방향으로 실무 역량을 기르기 어려울 수 있습니다. 작업을 잘못 수행해도 이를 피드백하거나, 바로 잡아줄 사람이 없고요. 그러면 ‘뭐가 문제인지’ 모른 채 어긋난 방향으로 계속 일할 수 있죠. 즉, 조직에서 DevOps 엔지니어 선후배 또는 동료와 교류하면서 ‘제대로’ 배우지 못하고요. 성장은 어느 시점에 정체될 수 있습니다.
이런 환경에서 생긴 지식과 노하우 공백을 뭐로 채울 수 있을까요? DevOps 전문 교육 프로그램은 이 공백을 메우는 대안이 될 수 있습니다. 그렇다면 아무 교육 프로그램이나 수강하면 될까요? 아니죠. 경력이 풍부하고, 산전수전 겪으며 DevOps 역량을 쌓은 숙련된 DevOps 엔지니어의 교육이 필요합니다. 앞서 이야기했듯 조직에 DevOps 팀이 없고, 도움받을 시 니어 DevOps 엔지니어가 없다면 외부에서 이런 엔지니어와 교류하며 지도받아야 합니다. 교육으로 이 문제를 해결하려면 조직에서 DevOps 팀을 이끄는 시니어 엔지니어에게서 교육받는 게 중요하고요. 그래야 이론에 치우치지 않고, 실무에 써먹을 만한 지식과 노하우를 올바르게 습득할 수 있죠.
인포그랩은 ‘DevOps Expert Labs’로 그 답을 제시하고자 합니다. 이 서비스는 현업에서 DevOps 실무를 원활히 수행하도록 도움을 주는 교육 서비스인데요. 실무자 눈높이에 맞춰 커리큘럼(러닝 패스)을 구성한 게 특징입니다. 경력이 20년을 훌쩍 넘는 베테랑 DevOps 엔지니어가 강의하는데요. DevOps Expert Labs는 손으로 조작하며 직접 따라 해 보는 ‘핸즈온’ 교육 방식으로 진행합니다. 학습자는 명령어를 직접 입력하며 공부해 실무 지식을 머리에 더 잘 기억할 수 있죠. 아울러 학습자는 DevOps Expert Labs에서 DevOps 기반 기술, DevOps 시스템 아키텍처 구성, 지속적 통합/테스트/배포 자동화 파이프라인 구축 등을 클라우드 네이티브 기반과 프로덕션 수준 환경에서 직접 실습하고요. 기술 관행도 배울 수 있습니다.
특히 DevOps Expert Labs에서는 학습자가 자신의 수준과 목적에 맞춰 커리큘럼을 선택할 수 있는데요. 여기서는 현업 실무자를 위한 고급 과정뿐만 아니라 학생 수준의 초급 과정도 운영합니다. 아울러 취업을 위해 이론 학습에 중점을 두는 러닝 패스와 현업에서 바로 적용할 수 있는 러닝 패스까지 제공하죠. 학습자는 이 가운데 자신의 상황에 맞는 커리큘럼을 골라 학습하면 됩니다. 참고로 각 러닝 패스는 꼭 필요한 기술을 ‘실험실(lab)’ 단위로 묶어 제공하는데요. 학습자는 러닝 패스에서 제공하는 실험실만 학습해도 원하는 지식을 모두 익힐 수 있죠. 또 퀴즈를 풀며 자신의 이해도를 점검할 수 있습니다. DevOps Expert Labs에서는 수많은 DevOps 도구 가운데 꼭 필요한 도구만 알려줘서 학습자는 ‘적합한 도구’를 찾는 수고도 덜 수 있고요.
Expert Labs ‘기초 러닝 패스’ 활용한 스마트 학습법
DevOps Expert Labs 기초 러닝 패스 커리큘럼 화면그렇다면 DevOps Expert Labs를 활용해 구체적으로 어떻게 DevOps 실무 지식을 학습할 수 있을까요? DevOps Expert Labs 커리큘럼에는 **‘DevOps 기초 러닝 패스’**가 있는데요. 지금부터 이 커리큘럼에서 배우는 DevOps 실무 지식과 엔지니어 관점에서 생각하는 이 과정의 장점을 공유하겠습니다.
DevOps 기초 러닝 패스에서는 애플리케이션을 프로덕션에 배포할 때 알아야 할 지식을 소개합니다. 실무자가 절대 놓쳐선 안 될 지식을 꼼꼼히 짚되, 이해하기 쉽도록 간결히 설명한 게 특징입니다.
1.DevOps의 관행과 빌드 도구
DevOps 기초 러닝 패스에서 첫 번째로 배우는 내용은 ‘DevOps의 관행과 빌드 도구’인데요. 여기서는 소프트웨어 개발 업계에서 일반적으로 사용하는 워터풀 모델, 애자일 등 개발 방법론을 소개하며 각 방법론의 장단점을 분석하고요. DevOps가 필요한 이유를 설명합니다. 아울러 실제 개발에 활용하는 빌드 도구를 소개하는데요. 대표적인 빌드 도구인 Gradle과 npm 사용법, 명령어, 여러 설정 방법을 알려줍니다.
이때 여러 옵션과 파일을 직접 수정하고 생성할 수 있는데요. 각종 예외 상황에 직면하고 해결하는 과정을 경험할 수 있어 유익합니다. 또 기초 러닝 패스에서는 이상적인 관행을 담은 샘플 애플리케이션을 제공하는데요. 학습자는 이를 모범 답안으로 삼아 공부할 수 있어 편리하죠.
2.GitLab 활용
이어서 Git을 배웁니다. ‘핸즈온’ 강의 방식에 따라 수업 내용을 손으로 직접 따라 하며 브랜치를 생성하고 커밋, 푸시하는데요. 손과 머리를 함께 움직이며 수업 내용을 따라가다 보면 Git의 특징과 사용법을 와닿게 이해할 수 있습니다.
아울러 커밋 그래프를 확인하고 변경 사항을 추적하는 방법도 학습하고요. 또 PC에서 SSH 공개 키 등록과 Personal Access Token 발급처럼 GitLab을 더 편리하게 사용하는 데 필요한 설정 방법을 배웁니다. GitLab 사용에 도움이 되는 유용한 팁을 처음부터 안내받아 환경에 빨리 적용할 수 있어 도움이 됩니다.
3.Docker와 Kubernetes 이해
세 번째로 클라우드 네이티브 환경의 필수 지식인 Docker와 Kubernetes를 학습합니다. 이때 Docker로 실제 애플리케이션을 빌드, 배포하는 작업부터 이를 Kubernetes에서 pod로 만드는 활동까지 알려주는데요. Docker의 보안 관행을 적용하는 방법, 멀티 빌드를 하는 방법 등도 가르쳐줘 심화 학습하기에 좋습니다.
4.Terraform 이해
그다음, Terraform으로 클라우드 인프라와 Kubernetes를 구축하고, 앞서 만든 애플리케이션을 종합적으로 배포하는 방법을 배우는데요. 학습자가 Terraform 문법에 전혀 익숙하지 않아도 내용을 빨리 이해할 수 있죠. 학습 과정에서 강사가 영역을 나누어 하나씩 설명해 주고요. 배운 내용을 토대로 학습자가 직접 애플리케이션을 배포하다 보면 일련의 과정을 생각보다 쉽게 이해할 수 있습니다.
아울러 학습 과정에서 여러 상황을 가정해 인프라를 구축할 때 필요한 도구를 소개하는데요. 여러 도구를 일목요연하게 정리해 줘 각 도구를 잘 이해하고, 간편하게 사용할 수 있습니다. 저는 여기서 리소스의 예상 비용을 확인하는 도구인 InfraCost를 알게 됐는데요. 지금도 유용하게 잘 활용하고 있습니다.
5.모니터링과 옵저버빌리티 이해
마지막으로 모니터링/옵저버빌리티 방법을 실습합니다. Sentry로 애플리케이션의 에러를 추적하는 방법을 배우는데요. 임의로 오류를 일으키는 샘플 애플리케이션을 실행해 ‘에러가 어떻게 쌓이고, 이를 어떻게 분석해야 하는지’ UI에서 관찰할 수 있습니다. 이러한 실습 과정은 ‘실무에서 이런 상황이 일어나면 어떻게 대응해야 할지’ 시나리오를 미리 구상하는 데 도움이 됩니다.
DevOps Expert Labs에서 제공하는 수많은 실험실이로써 Docker로 애플리케이션을 빌드하고, Kubernetes로 배포하며, 에러를 추적하는 옵저버빌리티 시스템을 구성하는 학습 과정이 마무리됩니다. ‘DevOps로 애플리케이션을 배포하고 모니터링하는 작업’을 배웠으면 이제 심화 단계로 나아갈 차례입니다. 앞서 설명한 지식을 하나씩 활용해 지금까지 만든 시스템을 고도화하면 되는데요.
DevOps Expert Labs에서 **‘DevOps 플랫폼 러닝 패스’**를 밟으면 Grafana, Vault, SonaQube 같은 필수 서비스를 구축하는 방법과 이를 애플리케이션과 연동하는 방법을 배울 수 있습니다. 이 과정은 실제 프로덕션 환경에서 사용하는 기술 스택으로 구성되었는데요. 이는 빈틈없는 개발/운영 환경을 구축하는 데 도움이 되는 내용입니다.
아울러 DevOps Expert Labs에서는 **‘CI/CD 러닝 패스’**로 애플리케이션을 자동 배포하고 GitOps를 적용하는 방법도 배울 수 있고요. **‘스프링 부트(Spring Boot) 옵저버빌리티를 학습해 개발자 관점에서 옵저버빌리티를 구현하는 러닝 패스’**도 지원합니다. 이 과정에서는 서비스 상태와 사용자 트래픽을 분석하고, 이를 다른 서비스의 분석 정보와 연동하는 방법도 배울 수 있죠.
마무리
DevOps 세계는 갈수록 확장되고 있습니다. 오늘날 수많은 서비스와 새로운 개발 방법이 실시간으로 쏟아지고 있죠. 시장 상황과 고객 요구는 쉴 틈 없이 변화하고 있고요. DevOps는 시장 상황과 고객 요구 변화에 맞춘 프로덕트를 생산하는 데 필수가 되고 있습니다. 이제는 DevOps 엔지니어가 아닌 개발자도 DevOps를 배워 프로덕트 개발 과정에 이를 적용할 줄 알아야 하고요. 이는 DevOps 엔지니어와 조직이 좋은 개발 관행을 수립하고, 뛰어난 프로덕트를 생산해 기업이 시장 경쟁력을 높이는 데 도움이 될 수 있습니다. 인포그랩의 DevOps Expert Labs는 실무자를 위한 ‘고품질 DevOps 교육’으로 이 과정을 적극 지원하겠습니다.
인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기 로 연락 주십시오.