인생을 코딩하다.

[Infra] CI란?, 어떤 CI 도구를 사용할까? 본문

Infra

[Infra] CI란?, 어떤 CI 도구를 사용할까?

Hyung1 2021. 7. 9. 20:45
728x90
반응형

CI는 왜 발생했을까요?

CI는 애자일 프로젝트를 수행하는 데 많은 도움이 됩니다.

애자일 방법론에 관해 이야기하기에는 이 글이 너무 길어지기 때문에 여기를 보고 오시면 좋을 것 같습니다.

 

애자일 개발 방법론은 빠른 배로플 기반으로 하는데, CI는 애자일에서 필요한 속도를 얻는데 도움을 줍니다. 

하지만 어떻게 CI가 이 과정에서 도움이 될까요? 간단한 예제를 통해 알아봅시다.

 

기능을 개발할 떄는 코드를 여러번 수정하게 되는데, 이 과정에서 코드를 반영하고, 버전 관리 시스템에서 변경 사항을

가져오고, 소스코드를 빌드하고, 단위테스트를 진행하고, 통합된 코드를 빌드하고, 이를 묶어 배포하는 등 여러 과정을 수행합니다. CI 환경에서는 젠킨스 같은 도구를 이용해 모든 과정을 빠르게 에러 없이 진행할 수 있습니다.

 

알람을 추가하면 이 과정은 더욱 빨리집니다. 팀원이 빌드, 통합, 배포, 실패를 빨리 알아차릴 수 록 더 빨리 대응할 수 있습니다. CI에서 수행되는 모든 절차는 다음 그림과 같습니다.

저는 webhook을 통해서 Github에서 push하면 Jenkins에서 webhook을 받아서 Gralde을 통해서 테스트-빌드를 수행한 후 깃허브에서 결과를 알람으로 받고,  추가로 Slack를 통해서도 알람을 받도록 하였습니다.

 

위의 알람을 받는 과정에서는 다음 글에서 설명하도록 하겠습니다.

 

따라서 즉, 이런 방법을 통해 팀은 기능을 빠르게 개발할 수 있습니다. 즉 애자일 방법론의 기민함은 CI를 통해 달성된다고 볼 수 있습니다.

CI를 통해 이득을 볼 수 있는 프로젝트 종류

최근 거의 모든 제품에는 임베디드 스포트웨어가 탑재되고 있습니다. 이런 것들은 소프트웨어 관련 기능이 포함돼어 있습닏. 따라서 제품의 소프트웨어 기능이 마케팅에 이용되고 있습니다.

 

새로운 제품을 홍보해야 하는 상황이 늘어남에 따라 제품은 점점 복잡해지고 있습니다. 복잡해짐에 따라 애자일 방법론과 CI가 대중의 관심을 받기 시작했습니다. 웹 기반 프로젝트, 전자상거래 프로젝트, 모바일 애플리케이션 개발 등 거의 모든 종류의 프로젝트에서 CI를 활용할 수 있습니다.

 

CI와 애자일 방법론은 자바, 닷넷, 루비 온 레일즈 등 현존하는 모든 종류의 프로그래밍 언어를 사용하는 프로젝트에서 사용할 수 있습니다.

CI 절차의 구성 요소

1. 버전 관리 시스템

전 Git을 통해 버전을 관리 하고 있습니다.

 

2. 브랜칭 전략

전 GIt flow 브렌치 관리 전략을 사용하고 있습니다.

 

3. CI 도구   

CI 도구는 단순히 지휘자 역할을 합니다. CI 도구는 CI 시스템의 중심에 위채해 버전 관리 시스템, 비들 도구, 바이너리 관리도구, 테스트 및 프로덕션 환경, 소스코드 분석 도구 및 자동화 테스트 도구 등을 연결합니다.

대표적으로 Jenkins, GitLab CI, Trvais CI가 있습니다.

  •  GitLab CI, Trvais CI는 Jenkins에 비해 플러그인이 적습니다.
  • 또한 Trvais CI 같은 경우에는 유료 서비스를 이용할 경우 가격이 꽤 비쌉니다.

이에 비해 Jenkins는 

  • 무료입니다.
  • 많은 플러그인을 지원하며, 커스터마이징이 다양합니다.
  • 많은 사용자들을 보유하고 있고, 관련 문서가 많습니다..
  • 호스팅을 직접해야하기 때문에 관련된 모든 부분을 관리할 수 있습니다.

 

고려해야할 사항이 있습니다. Build Server를 직접 구매 및 운영해야 하기 때문에 발생하는 단점이 있습니다.
하나부터 열까지 전부 환경설정을 구축해야하며, 서버를 관리하는데 발생하는 비용이 낭비가 될 수 있기 때문입니다.

 

따라서 규모가 크지않은 프로젝트거나, 외부 클라우드 서비스를 이용하는 상황등이라면 Jenkins말고 다른 서비스도 고려해볼 가치가 있다고 생각합니다.

 

하지만 저는 현재 규모가 크고 대용량 트레픽을 고려한 서비스를 만들고 있고, 네이베 클라우드에서 무료로 10만 크레딧을 지원해주기 때문에 저는 Jenkins를 사용하기로 결정했습니다.

 

개발을 하면서 느끼는 거지만, 모든 일에 정답은 없다고 생각합니다. 상황에 맞게 최선의 방법을 채택하여 가장 높은 효율을 낼 수 있는 방안을 선택하는 것이 중요하다고 생각합니다.

 

4. 자동으로 시작되는 빌드

빌드 자동화는 코드를 컴파일하고 실행 파일을 만들어내는 여러 단계를 자동화하는 것입니다. 주로 엔트, 메이븐, 그래들 같은 빌드 도구로 자동화합니다. 자동으로 시작되는 빌드는 CI 시스템에서 가장 중요한 부분으로, 다음 두가지 조건이 충족돼야 합니다.

  • 빠른 속도
  • 코드나 통합 이슈를 최대한 빨리 잡아내는 것

빌드가 하루에 100~200번 발생하는 프로젝트도 있는데, 이경우에는 속도가 매우 중요합니다. 빌드를 자동화하면 많은 시간을 절약할 수 있고 빌드를 시작시키는 행위도 자동화되면 변화는 더욱 커집니다. 

 

코드가 변화하면 자동으로 빌드가 시작되게 하는 시스템은 더욱 많은 시간을 절약시켜 줍니다.

빌드가 자주 발생하고 빠르게 수행되면 플임 워크에서는 여러 여러 이슈(빌드 에러, 컴파일 에러, 통합 에러)등을 발견할 확률이 높아지고 발견되는 시점도 빨라집니다.

 

5. 자동화된 테스트

소프트웨어의 품질을 유지하려면 다양한 테스트 시나리오를 통해 소스를 테스트해야 합니다. 테스트를 간과하면 납기 지연이나 고객 불만족이 야기될 수 있습니다. 테스트는 수작업이고, 오랜 시간이 소요되는 반복적인 일이기 때문에 테스트 과정을 자동화하면 소프트웨어 배포에 걸리는 시간을 대폭 단축시킬 수 있습니다.

 

테스트를 자동화할 때에는 몇 가지 사항을 고려해야 합니다.

  • 중요하고 구현하기 쉬운 테스트 케이스를 먼저 자동화하는 것이 현명한 방법입니다.
  • 모든 테스트 절차가 동일하지만 다양한 데이터를 통해 테스트 되는 케이스가 좋은 예제 입니다.
  • 또한 소프트웨어의 기능 중 여러 플랫폼에서 테스트 되는 케이스르 자동화하는 것이 좋습니다.
  • 또한 다양한 설정이 적용돼 실행되는 소프트웨어의 테스트를 자동화하는 것이 좋습니다.

6. 바이너리 관리도구

소스코드는 CI를 통해 주기적으로 빌드돼 바이너리 파일로 만들어집니다. 바이너리 관리도구는 바이너리 파일의 버전 관리 시스템입니다.

 

바이너리 관시 시스템은 .jar, .war, .exe 등의 파일을 관리합니다. 빌드가 수행되고 필요한 검증이 진행된 후, 빌드된 바이너리 파일들이 바이너리 관리 도구로 복사됩니다. 이를 통해 개발자나 테스터가 수동으로 필요한 바이너리를 골라 배포하고 테스트할 수 있씁니다. 자동화된 테스트가 구성돼 있다면 빌드된 바이너리 파일은 자동으로 적합한 테스트 환경에 배포됩니다.

 

바이너리 관리 도구의 가장 중요한 장점은 결과물이 중앙 서버에 저장돼 필요할 때마다 쉽게 접근 가능해지는  것 입니다. 따라서 우리는 쉽고 간단하게 배포 환경을 만들 수 있습니다.

 

그 외 코드 커버리지, 코드 정적 분석, 패키징 자동화 등이 있습니다.

결론, CI 사용의 장점을 정리해볼까요?

  • 별도의 디버깅 과정 없이 통합 시발생하는 문제점 파악 가능합니다.
  • 소스의 결함으로 인한 문제점을 조기에 발견할 수 있습니다.
  • 소스의 변경으로 인하여 다른 모듈과의 충돌을 조기에 발견할 수 있습니다
  • 변경된 모든 소스에 대한 단위테스트 결과를 빠르게 확인 가능합니다.
  • 올바르지 못한 프로젝트의 진행방향을 조기에 발견할 수 있습니다.
  • 최종 릴리즈 전에 가능한 많은 문제점을 발견할 수 있습니다.
  • 개발중인 소프트웨어를 언제라도 배포 가능합니다.

다음 글에서는 네이버 클라우드 플랫폼을 이용해 서버를 생성하고,

젠킨스를 설치하여 CI를 자동화함으로써 애자일 방법론을 경험해보는 것에 관해 글을 작성해보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다.

 

다음 글은 젠킨스란? 젠킨스를 이용해 CI 자동화하기, 슬랙 연동에 관해 알아보도록 하겠습니다.

https://junghyungil.tistory.com/168

 

[Infra] 젠킨스란? 젠킨스를 이용해 CI 자동화하기, 슬랙 연동

https://junghyungil.tistory.com/167 [Infra] CI란?, 어떤 CI 도구를 사용할까? CI는 왜 발생했을까요? CI는 애자일 프로젝트를 수행하는 데 많은 도움이 됩니다. 애자일 프로젝트에 관해 이야기하기에는 이 글

junghyungil.tistory.com

 

 

 

728x90
반응형
Comments