-
『DevOps』DevOps란? 그리고 공부할 부분은?DevOps 2023. 7. 27. 21:52
글 시작전
다 경험과 뇌피셜로 작성한 글이다...
정답이 작성된 것이 아니니 자유롭게 생각을 댓글로 작성해주면 될 것 같다.
DevOps엔지니어란?
솔직하게 말해서 되게 추상적인 개념이라는 생각이 든다.
물론 해당 직무가 어떤 역할을 하는지는 확실하게 되어 있으나 업무의 스펙트럼이 상당히 넓다.
우선 DevOps엔지니어는 일반적으로 CICD, K8S, Git버전관리를 담당하는 직무라고 생각한다.
큰 회사에서는 DevOps엔지니어는 위 3가지만 담당하나, 작은 규모의 기업은 개발, 인프라까지 담당하는 경우가 많다.
CICD
CICD의 프로세스를 확립하고 구축하여 실제로 운영중인 인프라에 무중단(최소의 다운타임을 가진채) 배포가 가능하여야하며
문제가 발생하여 롤백되었을 경우 기존의 존재, 운영중이던 코드로 복귀하여 사용자가 느낄때 서비스의 문제가 없어야한다.
단순히 개발,빌드,배포만 이루어지는 파이프라인을 구축하는 것이 아니다.
K8S
K8S의 경우는 나도 왜 해당 기술이 DevOps의 업무인지 헷갈리긴한다.
하지만 이유를 찾아보자면, K8S의 경우 Docker Image를 기반으로 동작을 하게 된다.
그렇기에 인프라를 코드형식으로 가진채 여러 컨테이너별로 적합한 이미지를 빌드, 배포해야하며
이렇게 배포된 이미지 속으로 개발자들이 개발한 코드가 배포되어야 한다.
그렇기에 인프라엔지니어가 담당할 수도 있는 영역이지만 일반적으로 GitOps의 업무를 담당하는 DevOps엔지니어가 담당한다.
또한 클라우드 엔지니어의 경우 세부적으로 동작중인 k8s에 대한 인프라를 다루기엔 업무 스펙트럼이 너무 넓어지기도 한다.
버전관리등을 담당하는 DevOps의 주요기술 이라고 볼 수 있다.
Git
Git버전 관리는 사실 맨 처음에 말한 CICD에 포함되는 부분이 크다.
여러 소스코드들은 어떻게 관리할 것이고, 이 소스코드들이 어떤 브런치에서 어떤 과정을 거쳐서 배포 브런치까지 이동할 것인지
그리고 이렇게 관리된 레포지토리들을 어떻게 통합할 것 인지 등등이
모두 CICD영역에 포함되는 것 같다.
개발을 할 줄 알아야하는가?
나도 모르겠다..
나도 개발을 너무 못하기 때문에 현재 직무인 클라우드엔지니어로써 업무 중 곤란할때가 정말 많다.
스크립팅은 DevOps엔지니어, 인프라엔지니어, 네트워크엔지니어, 클라우드엔지니어 등 엔지니어라면 반드시 가져야하는 스킬이다.
비록 주요업무가 존재하기에 개발자들 급으로 상세하게 이해하고 작성할 수는 없겠지만, 그래도 조금의 테크니셜은 보유하는 것이 맞다.
클라우드 영역에서 자주 사용되는 Python, JS를 공부하면 좋다. 또한 추가적으로 Shellscript 또한 사용할 줄 알아야한다.
엔지니어라는 영역에 들어온 이상 어쩔 수 없다.
그렇기에 개발을 할 줄 알아야하는가..? 에 대한 정확한 답을 나는 내릴 수 없었다.
클라우드는 필수인가?
그렇다.
업무를 진행하며 클라우드와는 땔 수 없는 관계가 될텐데, 클라우드에 대한 이해도가 없다면 업무 진행히 상당히 곤란할 것 이다.
클라우드를 하기 위해선 IaC, Network등도 함께 공부해야하는데, 이는 DevOps엔지니어로써 상당히 중요한 역량중 하나이다.
그래서 DevOps는 좋은가?
좋고 나쁜 직무는 없다.
하지만 적어도 내가 생각하기엔 미래에도 사라지지 않을 직업이기 때문에 진작에 발을 들여서 환경속에서 함께 성장하는 것도 중요하다.
기업 개발문화 등의 다양한 문화의 중심이 되는 직무이기 때문에 다양한 공부도 해야하며 동시에 다양한 환경도 접하는 것이 중요하다.
결론
나도 언젠간 DevOps엔지니어로 직무를 전환할 것 인데, 내가 오늘 작성한 글이 이후에 보았을때 맘에 안들면 수정해야겠다.
해당 직무는 엄청나게 중요하고 필수적인 직무이다.
-----
직무전환 후 6개월 지난 시점에서 느낀점
결국 DevOps가 되어버렸다.
DevOps가 중요하게 생각해야하는 점을 이제서야 좀 알겠다.
1. 개발자들의 편의성을 추구
2. 제너럴한 역량
3. 전문적인 메인스킬 역량
1번부터 설명하면
- 개발자들의 편의성 추구
생각보다 중요한 부분이였는데 놓치고 있었다.
개발자들은 말 그대로 개발에만 집중이 가능해야한다.
=> VPN이 느리다, CI/CD 과정이 오래걸린다.
이런 점들을 개발자가 문제제기를 하지 않도록 사전에 최적화를 했어야한다.
(물론 난 못했기에 이런 글을 적는거다..ㅋㅋ ㅜㅜ 더 노력해야지..)
2번
- 제너럴한 역량
생각보다 많은 역량이 필요하다.
네트워크, 인프라, 프로그램, 서비스, 오픈소스 등등 이런 부분에서 민감하게 반응을 할 수 있어야한다.
3번
- 전문적인 메인스킬 역량
자신의 분야에 있어서 만큼은 전문적인 역량이 필요하다.
위에 설명한 제너럴한 파악에 더불어 자신의 기술에 있어서는 전문적인 태도가 필요하다.
ex) k8s, ci/cd, 코딩, IaC등