플래티어에서 서비스하고 있는 CloudBees CD/RO를 통해 성공적으로 DevOps 적용하고 운영 중인 사례를 소개하겠습니다.
💡 본문에 첨부된 이미지는 사례를 설명하기 위해 실제와 유사하게 작성된 Pipeline이며, 실제 고객사에 적용된 부분과 다소 차이가 있을 수 있습니다.
먼저 간략한 고객사의 정보는 아래와 같습니다.
• 기업 형태: 대기업, 상장
• 업종: 제조업
• 업력: 50+ 년
• 도입 시기 및 운영 기간: 2018 ~ 현재
1. DevOps 툴체인 도구 선정
해당 고객사에서는 소프트웨어 개발 과정에 있어서 표준화의 중요성을 인지하고 있었으며, 이를 위해 다양한 도구 도입을 고려하고 있었습니다. 소프트웨어 개발의 효율성과 품질을 높이는 데 도움이 될 수 있는 도구를 찾는 과정에서, 그들은 CI/CD를 구축하기 위한 여러 도구를 비교하고 분석하였습니다. 이러한 여러 도구들 중에서도 특히 CloudBees CD/RO(구 ElectircFlow)가 그들의 요구사항을 가장 잘 충족시키는 것으로 판단하였고, PoC(Proof of Concept)를 통해 이 도구의 실질적인 성능과 효과를 검증한 후, 최종적으로 CloudBees CD/RO를 선택하여 도입하기로 결정하였습니다.
• CloudBees CD/RO
2. 소프트웨어 개발 현황
각 팀마다 다른 개발 사이클을 가지고 있었으며, 개발자들은 각자의 branch를 생성하여 자유롭게 개발하고 있었습니다.
• 개발 소스를 통합하여 테스트 후 릴리즈
• Jenkins를 이용하여 소스코드 커밋과 동시에 개발 환경에 배포
• 개발 완료 후 QA팀에 코드 품질 검증 요청
• 개발 소스 테스트 후 빌드된 산출물을 서버에 배포 및 서비스 재시작
3. DevOps 본격적인 적용 사례
사례에 들어가기 앞서 구축된 CI/CD Pipeline은 아래와 같습니다.
• 프로젝트: 임베디드 소프트웨어
• 형상관리: SVN, Git
• 개발언어: Java
• Build: Maven
• Test : SonarQube
• 배포 방식: 파일 배포
CI/CD Pipeline
이제 각 파트별로 실제 적용된 구현부들을 알아 보겠습니다.
3.1 개발 환경
해당 고객사에서는 시스템 소프트웨어를 중심으로 웹, 앱과 같은 응용소프트웨어 등 다양한 분야의 소프트웨어 개발 팀이 존재하였습니다. 그에 따라 개발 환경도 전통적인 운영 체제 뿐만 아니라, 모바일까지 다양한 환경이 존재하였습니다.
• Windows, Linux, Unix, Android, iOS
다양한 환경이니 만큼 사용하는 언어도 다양했습니다.
• Java, C#, C, C++, Visual Basic, .NET
3.2 CI 구현
CI에서 가장 핵심이 되는 부분은 형상관리와 빌드, 그리고 트리거(trigger)입니다.
개발팀들은 팀마다 사용하고 있는 형상관리도구(SCM)가 제 각각이었습니다. SVN을 메인으로 해 Git, TFS, SourceSafe 등 다양한 형상관리도구를 사용 중이었고, 이를 SVN과 Git으로 표준화하였습니다.
• SVN, Git
먼저 CloudBees CD/RO의 Plugin 이용하여 모든 Project에서 사용할 수 있는 SVN과 Git 공통 프로시저를 생성하였습니다.
모든 공통(Common)으로 사용할 템플릿화 된 Git, SVN 프로시저
빌드도 마찬가지로 각 언어별로 별도의 공통 프로시저를 생성하여 템플릿화 즉, 같은 언어 혹은 같은 컴파일러를 사용하는 프로젝트에서 재사용가능한 형태로 생성하였습니다. (실제 예시로 든 프로젝트에서는 프로젝트만의 특별한 커맨드가 필요하여 부득이하게 CloudBees에서 제공하는 Maven plugin을 사용하였습니다.)
빌드 공통 프로시저 생성
여기까지 작성한 공통 프로시저를 통해 pipeline을 생성한 것이 아래와 같은 “Setup” → “Build & Test” 스테이지입니다.
Setup → Build & Test 스테이지
이렇게 작성해 놓은 CI를 자동으로 실행시키기 위해서는 Webhook과 Polling 두 가지 방법의 Trigger가 있습니다.
여기에서는 형상관리 사이트에 별도의 세팅없이 설정 가능한 Polling 방식을 사용하였습니다.
CI 설정을 위한 polling 방식의 trigger
이제 개발팀에서 source를 push 하면 자동으로 “Setup” → “Build & Test”를 거쳐 Relase의 “Entry Gate”에 도달하게 됩니다.
CI 진행 후 Release 승인 대기
아래와 같이 승인권자를 assign하여 Release시 승인 게이트를 거치도록 설정하였습니다.
Release 승인 게이트
3.3 CD 구현
Release 승인과 동시에 빌드시 생성된 산출물들을 Artifact로 등록하며, 등록된 산출물을 서버에 배포하고, 추가 명령어들을 통해 필요한 서비스들을 재시작 하는 형태로 구성하였습니다.
CI/CD Pipeline의 Release 스테이지 부분
4. DevOps 적용의 장애물과 대응 전략
DevOps를 채택하는 과정에서 특히 오랜 역사를 가진 기업들은 문화적 저항과 기존 시스템과의 호환 문제로 인해 다양한 난관에 직면하게 됩니다. 이런 문제들은 DevOps의 핵심 개념을 명료하게 이해하고, 조직 변화를 효과적으로 관리하는 것으로 해결 가능합니다. 이 사례에서는 Top-Down 방식의 DevOps 도입이 시도되었고, 이를 통해 CI/CD 파이프라인 구축이 상대적으로 원활하게 이루어졌습니다. 이는 조직 전체의 적극적인 참여와 다양한 부서 간의 활발한 소통 덕분이었습니다.
5. 결론
DevOps는 현재 기업의 애플리케이션 개발과 운영 효율성을 극대화할 수 있는 강력한 방법론으로 자리잡았습니다. 이 방법론을 실제로 적용하고 실행하는 데에는 다양한 도구들이 필요하며, 이러한 도구들은 Jenkins와 같은 널리 알려진 오픈소스 도구부터 CircleCI, Travis-CI 등과 같은 다양한 도구들까지 많은 선택지가 있습니다. 그렇다면 CloudBees를 선택하신 이유는 무엇이었을까요?
CloudBees는 DevOps 표준 툴 체인을 안전하고 효율적으로 구축할 수 있습니다. DevOps 표준 툴 체인 기반으로 개별 프로젝트의 특성과 요구 사항에 맞춰 맞춤형 CI/CD 프로세스를 제공합니다. 이러한 유연성을 통해 다양한 프로젝트 요구 사항에 맞게 배포 파이프라인을 최적화하여 개발 및 운영 프로세스의 전반적인 효율성을 높일 수 있습니다.
이러한 장점과 더불어 CloudBees를 선택한 결정적인 이유는 바로 임베디드 분야에서 오랜 시간 동안 경험을 쌓아온 엔지니어들의 실력과 그들이 오랜 기간 동안 형성해온 고객과의 신뢰 관계였습니다. 이런 신뢰 관계는 고객과의 긴밀한 협업을 가능하게 하며 이는 곧 DevOps의 성공적인 실행을 위한 중요한 요소가 됩니다.
이처럼 DevOps는 단순히 기술적인 측면에서 중요한 방법론이 아니라, 사람과 사람 사이의 관계, 더 나아가 고객과 파트너와의 관계를 중시하는 방법론입니다. 이는 DevOps가 단순한 기술적 효율성을 넘어서 사람들 사이의 협업을 강조하고, 이를 통해 더 나은 결과를 도출하려는 취지를 잘 보여줍니다.