하나의 애플리케이션은 무수히 많은 사람들이 각기 다른 기능을 맡아 개발하여 동시에 작업을 하게 된다. 이런 상황에서 개발자들은 자신의 로컬환경에 작업하고, 마칠때까지 중앙저장소로 올리지 않는다면 중간단계에서 코드를 통합하는 과정이 굉장히 복잡할 것이다.
하지만 현재는 SVN, git과 같은 형상관리 툴로 중간중간에 커밋을하고, 머지를 함으로써 코드를 병합하는 과정을 거친다.

CI/CD란 무엇인가?

  • CI (Continuous Integration) : 여러 개발자가 작성하거나 수정한 소스를 지속적으로 통합하고 테스트 하는 것
  • CD ( Continuous Delivery / Deployment) : 개발, 통합, 배포, 릴리즈, 테스트를 자동화하여 지속적으로 배포하는 것

CI의 적용 흐름

  1. 개발자는 자신이 작성한 코드를 github등에 커밋을 한다.
  2. develop등 branch에 머지를 하게 되면, 버전 관리 시스템에서는 CI 툴에 소스 변경을 알린다.
  3. CI툴에서는 변경된 소스코드를 대상으로 Build, Test, Merge를 진행한다. 이 과정이 완료되면 슬랙, 카카오톡 등을 통해 알람을 발송한다.

CI 툴

CI 툴은 여러가지가 있다. Jenkins, Travis, Bamboo등이 있는데, 이번 사이드 프로젝트에서는 Jenkins를 사용하기로 하였다. 그 이유는 아래와 같다 :

  • 무료로 사용
  • 실무에서 접해본 CI 툴
  • 풍부한 레퍼런스
  • 방대한 양의 플러그인

CI의 장점

  • 개발의 편의성이 증가한다.
    • 수기로 해주는 작업이 모두 자동화로 바뀐다.
  • 변경된 코드에 대한 즉각적 피드백과 검증이 가능하다.
    • 슬랙, 카카오톡을 통해 알람이 온다.
  • 소스 코드의 통합과 검증에 들어가는 시간이 단축된다.
    • Jenkins가 자동으로 테스트, 빌드를 해주니 이보다 더 편한게 없다.

CI 적용 계기

현재 프로젝트에서 ErrorCode를 Enum형식으로 관리하고 있다. 코드성으로 BusinessException에 의해 발생한 예외를 넣어놓는데, features -> develop 브랜치로 머지하는 과정 중, 중간 ErrorCode가 누락되어 develop 브랜치상 애플리케이션 코드로 서버 구동이 불가능했다.

  • 로컬에는 이미 파일이 있으니, 문제가 없어보이지만 단순 develop 브랜치로만 봤을 때에 누락된 파일을 체크를 못한 것이다.
  • 이러한 불상사를 막기 위해서는 develop 브런치로 merge를 한 후, 지속적으로 테스트/빌드를 진행해주어야 한다. 이 과정을 자동으로 해주는 것이 CI이다.

(CD에 관련된 내용은 추가 작성 예정..)


oksusutea's blog

꾸준히 기록하려고 만든 블로그