김상기 SW QA의 개발자를 위한 CI 환경 구축기

『지속적 통합배포 구축은 처음이라』는 ‘[Beyond the book] 『자바 프로젝트 필수 유틸리티』 편’ 참여자의 글을 모아 한 권의 책으로 엮은 무료 전자책입니다.

[Beyond the book]은 책, 그다음 이야기를 전하는 독자참여 프로젝트입니다. 책을 읽고 현업에 적용한 이야기, 책에 소개된 내용 이외의 더 나은 대안은 없는지 등 다양한 주제의 독자 여러분의 기고를 기다리고 있습니다.  



김상기
LG전자 MC연구소에서 SW 형상관리도구(IBM Clearcase) 등을 운영했으며, LIG넥스원에서는 무기체계 소프트웨어 QAQuality Assurnace 업무를 맡아 다양한 개발 환경의 SW 품질관리를 수행했었다. 현재는 한국정보통신기술협회TTA에서 패키지 SW의 기능/성능 시험을 수행하고 있다. 



개발자가 아닌 QA로서 『자바 프로젝트 필수 유틸리티』을 읽으며 가장 먼저 눈에 띈 것은 8장의 젠킨스 입문과 활용하기 편이었다. 개발 초기부터 SW 품질관리가 필요하다는 점을 누구보다 잘 알고 있었는데, 개발 환경과 테스트 환경을 통합할 수 있는 것이 바로 CIContinuous Integration였다. 그리고 젠킨스는 오픈소스지만 전 세계의 모든 개발자가 표준처럼 사용하고 있어 다른 상용 도구와 비교조차하지 않고 기업에서는 도입 후 사용하고 있다. 


지속적 통합, CI란?

지속적 통합이란 "여러 명으로 구성된 팀이 작업한 것을 자주 통합하는 것"을 가리키는 소프트웨어 개발 프랙티스practice다. 마틴 파울러는 CI를 다음과 같이 정의하였다.

 "Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible."


CI 환경 구축의 필요성

무기체계 사업의 대부분은 기간이 5년 이상이고 체계 통합 업체를 비롯하여 수십 개의 협력 업체가 함께 사업에 참여한다. 또한 하드웨어Hardware, HW와 통합된 상태에서 소프트웨어Software, SW를 검증하는 것이 일반적이며, SW 개발 환경 또한 HW 환경과 밀접히 관련되어 있어서 SW 개발 환경 자체를 표준화하거나 통합하는 것이 쉽지 않다.

하지만 개발 초기에 개발 환경을 구성하여 지속적으로 통합하지 않으면 SW 품질관리가 어렵기 때문에 설계 단계부터 개발자와 QA는 서로 커뮤니케이션을 해야 할 업무가 많다. 특히 SW 코드의 정적 분석은 자동화 도구를 통해서 진행하며, 개발 환경이 필요하기 때문에 CI 환경을 통해 SW 코드를 빌드할 때 동시에 통합하여 진행하는 게 효율적이다. QA 입장에서도 CI 환경을 통해 SW 코드의 정적 분석 결과를 쉽게 확인할 수 있으며, 코드의 어떤 부분이 많이 변경됐는지, 개발자와 합의된 점검 기준을 만족하였는지를 물어보지 않고 바로 확인할 수 있다. 

 이 책에서 제시한 CI 환경과 연결한 정적 분석 도구인 PMD, FindBugs, 소나큐드 등은 오픈소스로서 활용이 많이 되는 도구들이기는 하나, 현업에서는 검증된 상용 도구(가능하면 인증된)를 많이 사용하고 있다. 이런 상용 도구 또한 CI 환경의 표준이라 할 수 있는 젠킨스에 플러그인을 제공하거나 젠킨스에 커맨드라인 인터페이스를 통해 통합할 수 있다. 


CI 환경과 정적 분석 도구 통합 구성 사례



우리의 CI 환경은 이 그림과 같다. 이를 통해 소프트웨어 통합(빌드 → 테스트 → 배포)의 각 단계를 자동화하여 지속적으로 수행하고, 정적 분석 도구를 통합하여 코딩규칙결과 및 실행시간오류Runtime Error를 이해당사자QA와 실시간으로 공유할 수 있었다.


CI 환경의 장점

내가 생각하는 CI 환경이 가져온 이점은 다음과 같다.


① 개발 환경을 한 번만 설정하면 웹을 통해 간단히 빌드를 할 수 있다. 또 빌드 진행 상태를 실시간으로 모니터링할 수 있다.


② 정적 분석 도구와 통합함으로써 코드 변경에 따른 정적 시험을 다시 수행하는 게 간편해진다.



데브옵스DevOps로의 확장

CI와 함께 데브옵스는 CDContinuous Delivery 개념을 설명하면서 제품 출시까지도 통합 관리하는 방법론을 제시한다. 현업에서는 대부분 출시된 제품을 버전 및 릴리즈 노트 등을 통해 별도로 관리하고 있어  CI, CD 환경을 완전히 통합한 개발 환경 구축은 내게 주어진 숙제다.


데브옵스 정의

소프트웨어 개발자와 정보 기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 방법론이다. 소프트웨어 개발 조직과 운영 조직간의 상호 의존적 대응이며 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.

다음은 데브옵스에서 사용되는 주요 개념이다.

① 빌드 자동화Build automation

② 지속적인 통합Continuous integration, 지속적인 배포Continuous Delivery

③ 체크인 빌드Check-in builds

④ 야간 빌드Nightly builds


마이크로스프트Microsoft의 데브옵스 활용 사례 : 도커Docker 컨테이너를 활용한 통합된 수명주기



자바 프로젝트 필수 유틸리티

쇼다 츠야노 , 전민수