프롤로그
인프런 - DevOps Fundamentals : 데브옵스 기본기 완전 정복
https://www.inflearn.com/roadmaps/658
를 보고 정리 및 공부용으로 작성합니다.
DevOps란?
소프트웨어의 개발(Devlopment)과 운영(Operations)의 합성어이다.
단순히 개발과 운영을 같이하는 거 아닌가요? 할 수 있는데, 이 단어의 탄생비화를 보면, 개발팀과 운영팀의 생각의 차이에 대해서 서로 인지하고 그 간극을 줄여보자 라고 하는 이야기가 시작이다. 이 생각이 지속적으로 발전을 하면서 협업과 자동화를 통해 소프트웨어를 더 빠르고 안정적으로 배포할 수 있도록 하는 문화, 철학, 실천방법들을 의미하게 되었다.
그렇기 떄문에 DevOps에 관한 다양한 정의가 많다. DevOps가 철학과 방법론이기 때문이다. 그렇기에 해석과 응용이 존재하게 되는데, ...
이게 무슨뜻이냐?
행복이란 단어를 떠올려봐라. 그럼 이 말을 당신은 뭐라고 할 수 있겠는가?
누군가는 자유로운 삶을 사는 게 행복일 수도 있고, 남들을 도와주는데에서 나오는 보람감, 원하는 것을 새로 샀을 때의 뿌듯함이 행복이라고 할 수 있다. 그렇다. 단어는 있지만 해석이 들어가게 된다.
DevOps도 마찬가지이다. 철학과 방법론이기 때문에 진짜 다양한 정의들이 많다. 그래서 한 단어로 설명하기에는 조금 많이 어렵다.
그래도 설명을 한다면..
DevOps의 철학(CALMS)
DevOps 문화를 성공적으로 구현하기 위한 주요 요소들이다. 단순한 기술 도구나 프로세스가 아니라, 조직 전체가 공휴애햐할 원칙과 사고 방식으로 정의한다.
1. 문화(Culture)
팀 간의 협업과 소통을 강조하는 조직문화이다.
개발팀과 운영팀이 단절된 환경을 없애고, 공통의 목표를 공유하며 협력한다.
사람(팀, 인원, 가치, 의사소통) / 일(프로세스, 방법론) / 서비스(서비스의 가치, 성격) / 자원 (H/W, S/W, 기술, 도구) / 시간(일정, 변경 가능성, 회복 탄력성, 예측) 등이 여기 포함된다.
2. 자동화(Automation)
지속적 통합(CI), 지속적 배포(CD), 테스트, 모니터링 등을 자동화하여 효율성을 극대화 한다. 반복적이고 수동적인 작업을 자동화 하여 시간과 비용을 절약하고 오류를 줄이고, 빌드 테스트, 배포, 프로세스는 코드로 정의되어 일관성과 신뢰성을 보장한다.
인프라 및 보안(클라욷, 네트워크, 접근 제어, 암호화) / 언어 및 도구(프로그래밍 및 도구) / 지속적 통합 및 배포(CI/CD 파이프라인 구성 고려) / 모니터링(모니터링 시스템 및 장애대응) 등이 여기 포함된다.
변경에 유연하고 탄력적인 서비스를 구축해야만 한다. 그리고 어떠한 사고에 대해서도 예측하고 대응해야한다.
3. 측정(Measurement)
DevOps의 모든 프로세스는 성과를 측정하고 분석하여 개선 가능성을 탐색한다.
변경사항이 발생했으면 항상 측정하고, 예측 불가능한 것을 최대한 예측 가능하도록 바꾸는 것이다.
애플리케이션 성능, 개발속도 모니터링, 지속적으로 나아가고 있는지, 아닌지 측정하는데, 이러한 측정 지표들은 중요한 의사결정들을 추측이 아닌 예측과 확신으로 만들어준다.
KPI(Key Performance Indicator) 와 SLA(Service Level Agreement)를 설정하고 서비스 품질 개발 속도를 평가한다.
4. 공유(Sharing)
팀 내 및 팀 간 자식을 공유하여 문제를 빠르게 해결하고, 조직 전체의 학습 문화를 촉진한다.
언제든 접근 가능한 투명한 데이터를 만들고, 지식을 공유하며 함께 성장하여야한다. 함께 해결해 나가면 누구든 해결할 수 있다. 항상 오픈마인드가 되어야한다. 지식과 성공 사례를 문서화하고 공유하여 조직 전체의 성장을 도모한다.
5. 축적(Accumulation)
성과와 경험을 반복적으로 축적하여 조직 전체의 지속적인 개선을 도모한다.
실수를 통해 배우고, 프로세스 개선을 통해 성공적인 관행을 강화한다. 데브옵스에서의 성공은 단기적인 도입이 아니라, 지속적으로 축적된 경험에서 나온다.
어떤 요구사항을 효율적으로 만족시키기 위해서 일을 자동화하며 변경사항 지표들을 측정하고, 공유하고, 이 모든 결과물들을 지속적으로 축적해 나아가는 문화를 만들어가는 철합, 방법론, 기술
이라고 정리할 수 있다.
DevOps 엔지니어의 역할
위에서 DevOps의 개념과 철학들을 얘기했는데, 그 문화를 위해 소프트웨어 개발과 It 운영간의 협업을 원활하게 하기 위해 다양한 역할을 수행하는 전문가이다.
서비스 혹은 S/W LifeCycle에서 반복적인 일들을 자동화하고, 기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키는 사람이다
정리를 하자면 소프트웨어 개발부터 배포, 운영 및 유지보수까지 전체 소프트웨어 개발 라이프사이클(SDLC)을 관리하며, 자동화와 효율성을 통해 개발 및 운영 프로세스를 최적화한다.
이런 사람들은 사람들과 잘 지내기 위해 사회기술, 의사소통 기술 등의 소프트 스킬과 , 프로그래밍, 운영체제, 서버관리 등의 기술적인 테크니컬 스킬들을 잘 갖춰야한다.
Infrastructure as Code(IaC)
IaC는 코드로써의 인프라이다. 인프라를 코드화하여 설정하고 관리하는 방식인데, 서버/네트워크/데이터베이스와 같은 인프라 리소스를 코드로 정의하여 수동 작업 없이 자동으로 프로비저닝하고 구성할 수 있도록 한다.
다음 주요 특징을 가진다.
1. 코드 기반정의
코드로써의 장점이 있다. 작성 용이성, 재사용성, 유지보수 등의 장점을 가진다. 인스라 설정을 사람이 직접 하는 대신 코드로 작성하기 떄문이다. JSON, YAMNL, HCL 등을 주로 사용한다.
2. 자동화
코드 실행으로 인프라를 자동으로 생성, 수정, 삭제할 수 있다.
3. 버전 관리
코드로 작성되었기에, Git 같은 것으로 버전을 관리할 수 있다.
4. 일관성
동일한 코드로 동일한 환경을 재현할 수 있어 환경간의 차이를 줄인다.
5. 협업 가능
코드화된 설정은 공유와 리뷰가 가능해 팀 협업에 유리하다
Terraform (HashiCorp)
테라폼은 인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구이다. 문법이 쉬워 비교적 다루기 쉽고 사용자가 많아 참고할 수 있는 예제가 많다.
멀티 클라우드 지원으로 AWS, Azure, GCP, 온프레미스 등 다양한 환경 관리가 가능하고,
상태 관리 를 통해 현재 인프라 상태를 추적할 수 있다.
에필로그
데브옵스 철학중에 공유 가 있기 때문에 뭘 배울지 모르겠다면 커뮤니티 가입해서 뭘 찾아보는 게 맞다고 한다.
'DevOps' 카테고리의 다른 글
[DevOps] Terraform의 개념과 Mac과 Ubuntu Linux에 Terraform 설치하기 (1) | 2025.01.02 |
---|