본문 바로가기

DevOps

[번역] DevOps 엔지니어 되기 - 종합가이드(2021년판)

이 게시글은 원문을 번역한 글입니다.

문제가 있을 경우 삭제하겠습니다.


현재 IT 시장에서 DevOps 영역은 급여/경력 면에서 IT인의 최고 선택지 중 하나다. 자주 접하는 질문은 "DevOps 엔지니어는 어떻게 되는가?"이다.

이 블로그에서는 여러 조직에서 DevOps를 연습한 나의 경험을 바탕으로 이 질문에 답하고자 한다.

나를 포함한 많은 사람들이 "DevOps 엔지니어"나 "DevOps 팀" 같은 것은 존재하지 않는다고 주장하지만, 업계인들은 "DevOps 엔지니어"라는 용어에 익숙해졌다. DevOps 철학만 이해한다면 직함명은 별로 의미가 없다.

하지만 DevOps가 실제로 무엇을 의미하는지에 대한 오해는 조금 있다. 그런 오해 중 하나는 "자동화가 DevOps다."라는 것이다. 자동화 관련 기술 공부만으로는 DevOps 엔지니어가 될 수 없다.

Wikipedia에 따르면,

DevOps(개발/운영의 일부)는 소프트웨어 Delivery 및 인프라 변경 프로세스를 자동화하면서, 개발자 및 기타 IT 전문가의 협업/의사소통을 강조하는 문화, 운동 또는 관행입니다.

상술한 정의에 따르면 DevOps가 특정 도구/기술에 대한 것이 아님은 명백하다. 그보다는 지속적인 피드백으로 더 낫고 빠른 결과물을 제공하고자 서로 다른 IT팀이 협업하게 만드는 철학이다.

DevOps를 더 잘 이해하려면 이 기사를 읽으라. DevOps가 정말 의미하는 게 무엇인가?

여기 흥미로운 트렌드 그래프가 지난 5년간의 DevOps 인기를 보여준다.

DevOps를 달성하고자 하는 조직에 필요한 것은 다음과 같다: 협업 능력을 갖춘 사람들, 변화하고 신기술을 채택하려는 의지, 시스템에 대한 더 나은 이해, 자동화 도구, CI 도구, 버전 관리 시스템, 네트워킹, 프로젝트 관리 도구 사용 경험 등 최소의 지연시간으로 프로그램을 사용환경에 배포하기 위해 필요한 것들.

또한, 디자인 혹은 팀이 디자인한 설계는 소소한 업데이트나 릴리즈 배포에 많은 개입이 없어야 한다. 이는 팀의 근무 방식에 문화적 변화가 있을 때만 가능하다.

목차

  1. 어떻게 DevOps 엔지니어가 되는가
    1. DevOps 문화 이해하기
    2. *nix 시스템 배우기
    3. 인프라 구성요소 동작방식 이해하기
    4. Get Certified On Cloud
    5. 자동화 배우기
    6. 컨테이너, 분산 시스템 & 서비스 메쉬
    7. 로깅 & 모니터링
    8. 보안 모범사례(Best Practice) 이해하기
    9. 코딩 & 스크립팅 공부하기
    10. 깃, 문서화, GitOps 공부하기
    11. 양 끝 간 App Delivery 라이프사이클 이해하기
    12. DevOps vs SRE
    13. 읽고 읽고 읽기
    14. 블로그 쓰기
  2. 결론

어떻게 DevOps 엔지니어가 되는가

DevOps가 개발자 또는 시스템 엔지니어에게만 국한되지 않는다는 사실을 이해해야 한다. 문화 개선, 기술등에 열정을 가지고, 편해지는 것은 모두 자동화하는 협업 환경에서 일하려는 사람이라면 누구나 해당되는 것이다.

이 글에서는 DevOps 문화에 적응하고 일하기 위해 도구/기술을 준비하는 방법에 대해 설명한다.

참고: 이 글에서는 많은 영역을 다룬다. 초보자가 모든 일에 능통할 수는 없겠지만, 이러한 분야에 대한 지식을 갖추는 것은 DevOps 커리어를 추구하는 데 도움이 될 것이다.

DevOps 문화 이해하기

첫번째이자 가장 중요한 것은 DevOps 문화를 이해하는 것이다. DevOps란 사람들을 하나로 묶어 공동의 목표를 향해 효율적으로 일하도록 하는 것이다.

IT 리더와 의사 결정권자는 DevOps 툴셋에 들어가기 전에 전체 팀이 DevOps practice의 문화적 측면에 대해 멘토링을 받도록 해야 한다. 그래야 팀의 많은 혼란을 피할 수 있기 때문이다. 일반적으로 그렇게 하지 않기 때문에, 운영을 위한 "DevOps 팀"을 갖는 데 그치게 된다. 이는 기존 운영팀을 답습할 뿐이다.

DevOps란 도구가 아니라 문화와 태도에 대한 것이다.

사람들이 프로젝트 배포에 지연이나 문제가 있을 때 프로젝트원 모두가 동일한 책임이 있음을 이해한다면, 여러 문제에 손가락질 하는 일을 멈출 것이다.

일단 DevOps 문화를 실천하고 나면 더이상은 "CI/CD와 자동화가 DevOps다"라고 말하지 않을 것이다.

Resources
DevOps Culture and Mindset [Coursera]
The Phoenix Project [Recomended eBook]

*nix 시스템 배우기

우리는 리눅스/유닉스 시스템 없이는 살 수 없는 시대에 살고 있다. 조직에서 많이 사용하는 다양한 Linux 배포판(RHEL, Centos, Ubuntu, CoreOS 등)에 대한 이해와 실무 지식을 더 잘 습득해야 한다.

Linux 재단 사례 연구에 따르면 퍼블릭 클라우드 워크로드의 90%가 Linux에서 실행된다.

또, 퍼클릭 클라우드에서 사용하는 리눅스 배포판을 보여주는 레드햇의 흥미로운 연구도 있다.

이제 리눅스에 초점을 맞춰야 하는 이유를 충분히 이해했을 것이다.

Linux는 모두 터미널이며, *nix 세계에서는 GUI를 덜 선호한다. 이러한 시스템의 터미널로 손을 더럽혀라.

리눅스 서버 가동은 버추얼 박스나 AWS/GCP/Azure를 사용할 수 있다.

다음 항목부터 시작할 수 있다.

  • Linux 부팅 프로세스 이해
  • 웹 서버(아파치, Nginx, Tomcat 등)를 설치/설정하고 웹 서버의 작동 방식을 알아보기
  • Linux 프로세스의 작동 방식을 알아보기
  • SSH 작동 방식을 알아보기
  • 다양한 파일 시스템에 대해 알아보기
  • 시스템 로깅, 모니터링 및 문제 해결에 대해 알아보기
  • 중요한 프로토콜(SSL, TLS, TCP, UDP, FTP, SFTP, SCP, SSH)에 대해 알아보기
  • 서비스 관리 방법 학습 및 서비스 생성 시도(Initd, Systemd)
  • 웹 서버에서 정적/동적 웹 사이트를 호스트 해보기.
  • 로드 밸런서 및 리버스 프록시(Nginx, HA 프록시 등) 설정하기
  • 무언가를 망치고 문제 해결방법 배우기

자료
Introduction to Linux [edX]
Learn Linux in 5 days [Udemy]

인프라 구성요소 동작방식 이해하기

모든 조직의 기본 구성요소는 인프라다. 이는 클라우드나 온 프레미스 데이터 센터일 수 있다. DevOps 환경을 실천하거나, 여기서 일하고자 하는 사람은 전반적인 인프라 구성요소를 이해해야 한다. 다음 사항에 대한 기본적인 이해가 있다면 도움이 될 것이다.

네트워킹
서브넷
공중망(Public network)
사설망(Private network)
CIDR 표기법
정적/동적 IP’s
방화벽
프록시
NAT
Public & Private DNS
Troubleshooting
VPN

고가용성
클러스터
장애극복 메커니즘
재해복구(Disaster Recovery)

보안
PKI Infrastructure
SSL certificates.

스토리지
SAN
Backups
NFS

Single Sign On
Active Directory/LDAP

로드밸런서
L5 로드밸런서
L7 로드밸런서
부하분산 알고리즘
리버스 프록시

VPN
Site to Site VPN
Client to site VPN

더 많은 것들이 있을 수 있지만, IT 인프라의 핵심 구성 요소를 강조했다.

클라우드 자격증 따기

"클라우드 자격증 따기"를 얘기할 때, 자격증을 통과하기 위해 시험 덤프를 사용하지 말라. 이는 자격증의 의미를 퇴색시킨다. 조직이 클라이언트에게 인증받은 클라우드 엔지니어를 데리고 있음을 보여주는 것이 좋을 수 있다.

현재 대부분의 퍼블릭 클라우드 시장은 AWS가 점유하고 있다. 다음은 Businesswire의 보고서다.

퍼블릭 클라우드를 아무거나 골라(AWS 추천) 모든 핵심 인프라 서비스를 공부하라. 모든 핵심 서비스를 직접 실행해보고 작동 방식을 이해하라.

AWS re-invent 영상을 보고 다른 조직이 어떻게 AWS 서비스를 사용하여 애플리케이션을 호스팅하고 있는지 알아보라. 날 믿으라. 이 비디오에서 많은 것을 배울 수 있을 것이며, 어떤 온라인 교육도 AWS에서 운영 워크로드를 실행하는 방법에 대해 이만큼 많은 정보를 제공할 수 없을 것이다.

GCP 인증을 받을 계획이라면 Google Next 비디오를 보라.

각 플랫폼에서 자신을 평가하기 위해 인증을 사용하라.

자료:
Ryans AWS 인증 과정
Google 인증 어소시에이트 클라우드 엔지니어 인증
Microsoft Azure – 초급자 가이드 + AZ-900 준비

자동화 배우기

자동화는 모든 조직에서 중요한 요소가 되었다. 더 이상은 서버를 수작업으로 만들지 않는다. 우리는 이를 자동화한다.

Redhat의 보고서에 따르면, 많은 조직이 자동화 계획에 투자하고 있다. 이 데이터를 확인해보라.

서버 프로비저닝, 애플리케이션 설정, 배포에서 모든 것이 자동화되어야 한다. 다음 devops 툴셋 중 필요에 맞는 툴셋을 배울 수 있다.

개발환경용
Vagrant
Docker Desktop
Minikube
Minishift

인프라 프로비저닝용
Terraform
CLIs (of respective cloud provider)

설정 관리용
Ansible
Chef
Puppet
Saltstack

VM 이미지 관리
Packer

자료:
Learn DevOps: Infrastructure Automation With Terraform
Ansible for the Absolute Beginner – Hands-On – DevOps
Docker for the Absolute Beginner

컨테이너, 분산 시스템 & 서비스 메쉬

컨테이너 도입이 나날이 증가하고 있다. 현재 근무중인 조직에서 컨테이너를 사용하고 있지 않을 수 있다. 하지만, 도커 같은 컨테이너 기술에 대해 직접 아는 것이 가장 좋다. 동료들 사이에서 어느 정도 경쟁력을 얻을 것이다.

도커를 이해한 후에는 Kubernetes, Docker Swarm 같은 클러스터링/오케스트레이션 툴을 사용해 볼 수 있다.

이러한 플랫폼은 마이크로서비스 기반 아키텍처에 가장 적합하다.

다음은 Datadog의 흥미로운 쿠버네티스 사용 동향이다.

다음은 5년간 쿠버네티스 검색량 증가 동향이다.

또한, 많은 엔지니어가 쿠버네티스 학습에 흥미를 보이고 있다. 2021년에는 많은 엔지니어가 쿠버네티스 인증을 받을 것이다. (CKA, CKAD, and CKS).

서비스 메쉬는 분산시스템의 고급 주제다. 컨테이너 툴셋의 입문자라면 마이크로서비스 기반 아키텍처의 지식을 얻은 후 이를 배울 수 있을 것이다.

자료
Kubernetes Tutorials For Beginners: Getting Started Guide
Best kubernetes courses
https://github.com/kelseyhightower/kubernetes-the-hard-way

로깅 & 모니터링

로깅과 모니터링은 인프라에서 매우 중요하다.

인프라에 배포된 앱 대부분은 로그를 생산한다. 아키텍처/설계에 기반해, 로그는 로그 인프라에 push되고 저장된다.

모든 회사는 로그 인프라를 가질 것이다. 흔히 사용되는 스택은 Splunk와 ELK다. 또한, 로깅 인프라를 제공하는 SaaS 회사도 있다.(Loggly 등)

개발자, 운영팀, 보안팀은 로깅 시스템을 사용해 모니터링하고, 문제를 해결하고, 앱/인프라를 audit한다.

모든 조직에서, 최중요(mission-critical) 앱은 상시(24/7) 모니터링된다. 모니터링 대시보드가 있을 것이다. 일반적으로, 대시보드는 애플리케이션이 만든 로그나 지표로 만든다.

또한, 경고 시스템도 있다. 모니터링 시스템에서 설정한 규칙에 기반해, 경고가 트리거된다.

예를 들어, 경고는 슬랙 알림, 지라 티켓, 이메일 경고, 서비스나우 사고 티켓, xMatters 전화일 수 있다. 경고 워크플로우는 조직마다 다르다.

DevOps 엔지니어로서, 당신은 비상용/상용 환경에서 로그를 쿼리하고 문제를 해결해야 한다. 어느 로깅 도구에서든 정규표현식을 이해하는 건 매우 중요하다.

자료
Elastic Stack – In-Depth & Hands-On
Monitoring and Alerting with Prometheus
Art of Monitoring [eBook]
Regular Expressions (Regex) Tutorial

보안 모범사례(Best Practice) 이해하기

DevSecOps는 보안을 DevOps의 각 단계에 녹여내는 또다른 영역이다.

위키피디아는 DevSecOps를 이렇게 얘기한다.

DevSecOps는 DevOps 접근 방식에 보안 관행을 통합할 수 있도록 DevOps를 확장한 것입니다. 전통적인 중앙집중식 보안 팀 모델은 연합 모델을 채택해 각 제공 팀이 DevOps 관행에 올바른 보안 제어를 고려할 수 있도록 해야합니다.

체크포인트 2020 보안 설문 조사는 지역별로 다른 사이버 공격을 보여준다.

클라우드 환경에서, 암호화폐 채굴은 흔한 공격이다. 이는 대부분 클라우드 접근 secret을 해커가 탈취하기 쉽도록 형편없이 보관해 발생한다.

DevOps의 앱/인프라 시크릿 관리는 표준 보안 관행을 따라야한다.

다음 이미지는 레드햇에서 발간한 핵심 DevSecOps 표준 방법을 보여준다.

해시코프 Vault는 훌륭한 시크릿 관리 도구다. 환경 시크릿을 관리할 때 사용할 수 있는 워크플로우가 많이 있다.

자료:
HashiCorp Vault: The Advanced Course
Vault Tutorial
What is container security?

코딩 & 스크립팅 공부하기

오늘날에는 모든 것을 코드로 다룬다. 모든 것을 자동화할만큼 도구가 충분해도, 도구가 제공하지 않는 커스텀 기능이 필요할 수 있다. 그런 경우에, 코딩/스크립팅은 그런 커스텀 기능 구현에 유용하다.

예를 들어, 젠킨스 파이프라인 as code는 groovy를 이해해야 하고, Ansible 커스텀 모듈은 파이썬을 이해해야 하며, 쿠버네티스 오퍼레이터 작성은 Go 언어 경험이 필요하다.

일반적으로 사용하는 다음 스크립트 언어들을 공부할 수 있다.

  • Bash/Shell
  • Python
  • Golang

Go 언어는 DevOps 영역에서 정말 유명해지고 있다. 최근에는 많은 DevOps 도구가 Go 언어를 사용하고 있다. 사실, 쿠버네티스나 테라폼같은 도구도 go로 작성한 것이다.

JFrog가 GopherCon에서 Go 언어 채택을 조사한 결과, 응답자의 18%가 DevOps 관련 업무에서 Go 언어를 사용한다고 응답했다.

자료
Complete Python Bootcamp: Go from zero to hero in Python 3
Learn How To Code: Google’s Go (golang)
Linux Shell Scripting: A Project-Based Approach to Learning

깃, 문서화, GitOps 공부하기

모든 것은 필히 버전관리를 해야한다.(패스워드/시크릿은 빼고 :P) Git은 최고의 버전 관리 도구다. git 튜토리얼은 많고, 중요한 git 기능을 배우는 데는 많은 시간이 필요하지 않다.

원격 코드 저장소로 GitHub이나 Bitbucket을 사용할 수 있다.

일단 Git을 이해하면, GitOps를 공부하라.

어쨌든 그래서 GitOps가 무엇인가? 여기 gitops.tech가 GitOps를 설명했다.

GitOps는 클라우드 네이티브 앱의 CD를 구현하는 한 방법이다. 이는 Git/CD 도구 등 개발자가 이미 친숙한 도구를 사용함으로써 인프라 운영시 개발자-중심 경험에 초점을 맞추고 있다.

다음으로 중요한 것은 모든 중요한 것을 문서화하는 것이다. 모든 저장소는 반드시 코드를 설명하고 있는 README 파일이 있어야 한다. 좋은 문서화는 당신 뿐 아니라 당신의 코드를 사용하는 누군가를 도울 것이다.

자료:
Git Complete: The definitive, step-by-step guide to Git
Git Basics Every Developer and Administrator Should Know

양 끝 간 App Delivery 라이프사이클 이해하기

App Delivery 라이프사이클에서는 알아야 할 중요 개념이 세 가지 있다.

  1. Continuous Integration
  2. Continuous Delivery
  3. Continuous Deployment

이 릴리즈 프로세스 관리 문서를 읽고 일반적인 애플리케이션 개발, 빌드, 테스트, 배포, 승인 프로세스, 검증의 작동 방식을 이해하라.

Jenkins, Travis CI, GoCD 등과 같은 CI/CD 도구를 사용하는 방법을 배우라.

다음은 CI/CD 프로세스에 대한 bmc의 좋은 그림이다.

DevOps vs SRE

SRE는 DevOps 커뮤니티에서 떠오르는 주제 중 하나다.

SRE는 구글에서 탄생한 일련의 관행/철학이다.

구글은 DevOps와 SRE에 대해 이렇게 말했다.

DevOps와 SRE는 SW 개발/운영에서 배타적인 관계가 아니며, 그렇다기 보다는 더 나은 SW를 빠르게 배포할 수 있도록 조직 장벽을 허물게 설계된 가까운 친구다.

SRE에 대해 더 자세히 알아보려면 다음 공식문서들을 추천한다.

SRE란 무엇인가?
SRE vs. DevOps: 경쟁 표준인가, 가까운 친구인가?

읽고 읽고 읽기

독서만큼 지식을 얻을 수 있는 방법은 없다. 엔지니어링에 관한 DevOps 테크 블로그를 최소 하나 읽으라. 넷플릭스, 트위터, 구글 등 모든 엔지니어링 블로그를 팔로우하라. 그들이 적절한 툴셋을 사용하는 법, 배포 전략, 최신 오픈소스 프로젝트를 공부하라.

링크드인, 레딧, Medium, Quora에서 비슷한 생각을 가진 사람을 팔로우하라.

자료
최고의 DevOps 블로그&자료 목록

블로그 쓰기

당신의 경험과 배움을 다른 이들과 공유하는 것이 좋다. 튜토리얼, 학습, 경험을 개인 블로그에 게시할 수 있다. 이는 다른 사람에게 도움이 될 뿐 아니라 당신의 개인 브랜드를 만들 수도 있다. 워드프레스 블로그나 미디엄 블로그를 만드는 데는 채 30분도 걸리지 않는다. 블로그를 시작하는 데 도움이 필요하다면 우리에게 메세지를 남기라.(contact@devopscube.com)

새로운 것을 배울 때마다, 그에 대해 쓰라. 게시글은 다른 사람은 물론이고 당신에게도 레퍼런스가 될 것이다. 이를 Linked in groups, Dzone 등에서 공유할 수 있다.

결론

DevOps에 관련된 툴과 프로세스는 이 게시글에서 언급한 것들에 국한되지 않는다. 그러나, 이들은 흔히 사용되는 오픈소스 도구/기술로 DevOps 엔지니어가 되기 위해 사용할 수 있다.

이제 당신의 생각을 듣고 싶다.

당신이 이 글에서 얻은 핵심은 무엇인가?

혹은 다른 영역에 대해 질문이 있을 수 있다.

어느 경우든, 이 글에 댓글을 남겨달라.