DevOps의 철학

Cramming An·2022년 4월 25일
0

DevOps

목록 보기
1/1
post-thumbnail

Agile 소프트웨어 개발 방법

소프트웨어가 각종 서비스의 핵심이 되고, 고객이 원하는 바가 급격히 변화하는 시대가 오면서 개발에 있어서 고객의 피드백에 빠르게 대응하는 것이 무엇보다 중요해졌습니다. 따라서 이 시대에 적응하기 위해 더이상 큰 변경사항을 가지며 낮은 릴리즈 빈도수를 갖는 워터폴(waterfall) 방식 대신, 순간순간 고객의 피드백에 대응하는 작응 구성요소를 신속하게 제공하고, 이를 위해 개방된 팀워크를 강조하는 애자일(agile) 방식이 주목 받습니다.

개발팀(Dev)과 운영팀(Ops)과의 관계

하지만 여기엔 걸림돌이 하나 있었습니다. 개발팀(Dev)과 운영팀(Ops)과의 관계가 대표적 입니다. 개발팀이 로컬 시스템에서 작성한 빌드를 운영팀이 받아 스테이징으로 배포하는 관계였는데, 개발팀과 운영팀이 서로 다른 환경에서 일을 진행하다 보니 dependencies나 환경 구성 이슈 같은 문제들이 자주 발생했습니다. 이는 운영팀에서의 병목현상을 발생시켰고, 잦은 개발팀의 변경에도 결국 배포는 일괄적으로 진행되어 낮은 빈도의 큰 릴리즈가 발생했습니디. 따라서 고객의 피드백에 빠르게 대처가 불가능 했습니다.

DevOps

이를 해결하기 위해 개발팀과 운영팀을 결합될 필요가 있었습니다. 팀 구성원 모두에게 개발과 릴리즈에 관해 책임 부여하여 개발팀은 개발 완료 뿐만 아니라 릴리즈 과정까지 보고 이해해야 했습니다. 물론 기존처럼 수동으로 일을 하면서 각 팀과 소통을 할 수도 있지만, 각 팀과의 긴밀한 협력을 위해서는 자동화 도구가 필요했습니다. 따라서 빌드, 테스트 및 배포를 자동화를 하게 되면서 작은 규모의 피드백 루프를 여러번 돌릴 수 있는 환경이 구성되었습니다. 이는 고객 만족도를 높일 뿐만 아니라, 버그수정에도 용이하고, 제품관리자와 마케팅 전문가와의 효율적인 협업도 제공합니다.

CI/CD

그렇다면 이제 DevOps의 사상을 구현해 볼 필요가 있습니다. 그 도구가 바로 CI/CD 인데 각각의 나누어 살펴보겠습니다.

  • CI(continuous integration): 지속적 통합의 의미는 동일한 소프트웨어 프로젝트에서 일하는 모든 사람들이 정기적으로 코드베이스를 공유하고(현재 플레이스 팀 금요일 공유세션처럼), 짧은 피드백 주기로(커밋할 때 마다) 잘 작동하는지(빌드와 테스트가 원할한지) 확인하는 것입니다.
    따라서 CI의 핵심요소는 크게 3가지 입니다.
    1. 코드가 모여있고, 수정할 수 있는 버전관리 시스템 --> Github 사용
    2. 자동화 빌드, 테스트 스크립트
    3. 자동화 시킬 수 있는 인프라(CI 서버) --> Jenkins, Github action, Travis CI, ...
  • CD(continuous deployment): 지속적 배포는 변경된 코드가 CI를 성공적으로 통과했을 때, 수동적인 개입없이 해당 변경사항을 실제 프로덕션에 자동배포하는 것을 의미합니다.

Jenkins

이제 앞으로 사용할 소프트웨어인 jenkins에 대해 알아봅시다. 앞서 이야기한 CI 서버 위에서 CI/CD를 구현하도록 도와주는 인프라가 바로 Jenkins 입니다. 수많은 CI/CD툴이 있지만 Jenkins를 선택한 이유는 다음과 같습니다.

  • 무료 오픈소스 프로젝트
  • 굉장히 많은 양의 플러그인들과 커뮤니티
  • 높은 수준의 커스터마이징 (Jenkins Pipeline, Jenkinsfile 활용)

Reference

profile
La Dolce Vita🥂

0개의 댓글