DevOps란 무엇인가? 간단히 말해 DevOps는 일반적으로 분리하여 취급하는 개발과 운영 두 직무의 결합입니다. DevOps의 정의가 DevOps의 본질입니다. 그 필요성은 더욱 이해하기 쉽습니다. 표준화된 개발 방법론과 명확한 커뮤니케이션, 표준 기반의 검증된 미들웨어 플랫폼은 애플리케이션 개발 및 관리 주기를 개선하고 민첩성을 향상합니다. 또한 IT 인프라에 보다 우수한 가용성과 보안을 제공합니다. 분명한 것은 DevOps가 사람, 제품, 프로세스를 연결한다는 점입니다. 궁극적으로 DevOps는 IT를 비즈니스에 연결하는 것입니다.
인프라에서는 개발 업무의 통합이 요구됩니다. 인공지능, 머신러닝, 컨테이너, 서버리스 함수 등의 고급 기능을 활용하는 엔터프라이즈 애플리케이션의 경우에는 자산 공유부터 코드 및 알고리즘 작성까지 여기에 포함됩니다. 추가로 테스트, 아카이빙 , 버그 추적 및 기타 중요 작업은 제품 출시에 이르기까지 개발 전반에서 처리됩니다. 개발 업무에 일반적으로 필요한 몇 가지 도구는 다음과 같습니다. 코드 반영을 위한 Git, 코드 저장소 관리를 위한 Github나 계속 발전 중인 Bitbucket입니다.
애플리케이션이 배포되면 클라우드 플랫폼의 비즈니스 과제 해결에 집중하기 위해 운영 부서가 전담합니다. 사용자 보안, 데이터베이스 관리, 운영 워크로드의 확장성, 애플리케이션 패치 적용과 같은 사안은 모두 이 부문에서 처리됩니다. 운영에 사용되는 몇 가지 일반적인 도구는 다음과 같습니다: Terraform, Ansible, Puppet and Chef 등이 인프라 및 구성 관리를 위해 사용됩니다.
많은 조직에서 이 두 가지 기능은 서로 다른 부서에 존재합니다. DevOps는 개발과 운영을 통합함으로써 생산성을 극대화하는 단일 인프라를 구축합니다. 이 방정식을 만족시키기 위해서는 개발과 운영을 위한 두 개의 시스템 및 운영자 사이에서 품질 보증 및 보안을 위해 의견 수렴과 통합이 가능하며 탄력성, 민첩성, 확장성을 갖춘 인프라가 요구됩니다.
결과적으로 전통적인 소프트웨어 개발 모델에서는 갈수록 빨라지는 소프트웨어 개발 주기에 대응하면서도 자원을 극대화하는 효율적 모델을 지원하는 것이 더욱 어려워지게 되었습니다. 궁극적으로 기업은 DevOps 모델을 이용해 문제를 해결하고 사용자 성장을 확대하며 소프트웨어 제품의 개발 및 반복 경로를 통해 고객에게 더 나은 서비스를 제공할 수 있습니다.
과거 20년 동안 기업은 시장과 엔터테인먼트, 소비자 사용, 공급망 등 거의 모든 분야에서 소프트웨어 통합을 위해 점진적으로 변화해 왔습니다. 이러한 각 직무 분야에서 소프트웨어와 데이터의 통합이 가시화되고 통합이 더욱 확산됨에 따라 성능과 신뢰성이 더욱 중요해졌습니다. 버그나 운영 중단은 셀 수 없이 많은 사용자에게 영향을 줄 수 있으며 이로 인해 수백만 달러까지 수익에 차질을 줄 수 있습니다.
DevOps 및 DevSecOps는 CI/CD(지속적인 통합 및 지속적인 제공)을 위해 SDLC(소프트웨어 개발 수명 주기)의 요구에 맞는 대응 방안을 제공합니다. 개발, 운영 및 보안을 통합할 경우 기업 자원에 실질적인 이득을 제공하는 동시에 라이프사이클 전반에 걸쳐 보다 신속한 의사소통과 협업을 실현할 수 있습니다. 이처럼 소프트웨어 개발 주기 전체를 단축하는 것에 그치지 않고 다양한 집단 사이를 연결할 수 있는 역량이야말로 분야를 넘어서는 DevOps의 의미와 가치입니다.
소프트웨어 개발 주기 전체를 지원하기 위해 DevOps를 도입하며 업무에 관계없이 민첩성과 효율성을 중심으로 다양한 강점을 얻을 수 있습니다.
클라우드에서 애플리케이션을 효율적으로 실행하기 위해서는 소프트웨어를 신속하게 제공해야 합니다. CI(지속적 통합)는 단일 코드 행을 사용하여 새로운 소프트웨어를 자주 병합하는 것을 의미합니다. 지속적 제공이란 빠른 주기의 코드 작성으로 패키지 소프트웨어를 제작하는 것을 의미합니다. 마찬가지로 지속적인 배포는 패키지된 소프트웨어를 일정 주기로 런타임 플랫폼에 배포하는 것을 의미합니다. CI/CD의 출현은 기존의 애플리케이션 개발 프로세스를 새롭게 바꾸었습니다. CI/CD 기반 프로세스는 개발자, QA 엔지니어, 운영 관리자를 하나의 플랫폼에서 통합하려는 패러다임의 변화인 DevOps와 관련되어 있습니다.
그러나 CI/CD 기반 애플리케이션 개발 프로세스는 더욱 향상하는 것이 가능할까요? 가장 현대적인 접근 방법은 컨테이너화를 이용해 더 많은 유연성과 강점을 얻는 것입니다.
소프트웨어를 지속적으로 제공하기 위한 가장 중요한 단계는 CI(지속적인 통합)입니다. CI는 개발자가 코드 변경 사항(대개 소규모이며 점진적으로 증가함)을 자동화된 빌드 및 테스트를 실행하는 중앙 소스 저장소에 커밋하는 개발 방법입니다. 이 저장소는 개발자가 초기에 버그를 자동으로 포착하여 버그가 운영 서버에 반영되는 것을 방지할 수 있게 해줍니다. 보통 지속적 통합 파이프라인에는 코드 커밋, 기본 자동 린팅/정적 분석 수행, 종속성 확인, 소프트웨어 구축 및 빌드 아티팩트 생성 전 일부 기본 유닛 테스트 수행 등 일련의 단계가 포함됩니다. Github, Gitlab 등과 같은 소스 코드 관리 시스템에서는 Jenkins와 같은 CI 도구에서 각 코드 체크인 후 빌드 및 테스트 실행을 자동으로 시작할 수 있는 Webhook 통합을 제공합니다.
지속적 제공은 지속적 통합이 마무리되는 지점입니다. CD는 애플리케이션을 클라우드 인프라 환경에 자동으로 전달합니다. 대부분의 팀은 1차 운영 서버 외에 다양한 개발 및 테스트 환경을 사용합니다. 지속적 전달은 새로운 코드 변경 사항과 테스트 완료된 코드 변경 사항을 클라우드 환경 전체에 적용할 수 있습니다.
개발자들이 CI/CD 소프트웨어 개발 수명 주기의 코딩 단계에만 관여하는 것은 아닙니다. 경험, 직관, 이전의 성공 경험을 기반으로 개발자들은 CI/CD 주기 전체의 감독을 지원하죠. DevOps의 세부 항목들은 사용되는 기술 스택에 따라 달라질 수 있기 때문에 DevOps와 개발자를 방문하여 어떤 Oracle 제품이 귀사의 사용 사례에 가장 알맞을지 확인할 것을 권장합니다.