CI/CD?
CI : Continuous Integration
CD : Continuous Delivery / Continuous Deployment
CI/CD는 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법을 의미합니다.
이러한 것을 하기 위한 툴로 젠킨스(Jenkins)라는 것을 사용합니다.
젠킨스?
쉽게 설명하면 빌드를 자동화 해주는 툴입니다. 따라서 빌드를 자동화 시키기 위해 사용합니다.
빌드(Build)란?
빌드는 서버에 올릴 수 있는 상태로 만드는 것을 빌드(Build)라고 합니다.
서버에 올려서 사용자가 사용 할 수 있게 하는 것은 배포(Deploy)라고 합니다.
예를 들어 SpringBoot 어플리케이션을 쿠버네티스에 배포하는 경우 먼저 Maven이나 Gradle로 빌드를 해서 .jar이나 .war를 만든 후 Docker빌드를 해서 Docker Image를 만듭니다. 그 후에 k8s에서 .yml파일에 이미지 버젼이 바뀐것을 반영하게 되죠.
왜 Build를 자동화 해야하는가?
빌드는 하루에 한번을 할 수도 있고 안할수도 있지만 1주일, 1달로 따지면 꽤 많이 합니다.
그리고 이게 1년이면 꽤 많은 시간이라고 할 수 있습니다.
예를들면 옛날에는 자바를 빌드 할 때 javac라는 커맨드를 직접 사용 했지만 지금은 IDEA를 이용하면 main()메소드를 실행했을 때 javac를 하고 java가 실행이 됩니다.
이렇게 반복되는 과정은 버튼 하나 또는 단축키로 자동화 시킬 필요가 있습니다.
왜냐하면 이 작업을 하는데도 집중력, 긴장감 등이 소모 되기 때문입니다. 그리고 빌드는 시간이 꽤 걸리는 작업인데(30초 이상 걸림) 빌드를 실행 시키고 나서 빌드가 될 때까지 기다리는 시간도 모아보면 엄청 길 것입니다.
개발자의 시간은 소중하기 때문에 최대한 반복작업은 자동화 할 필요가 있습니다.
저도 수동으로 빌드를 5개월쯤 하니 자동화를 안시킬 수가 없었습니다. 수정하고 빌드하고 dev에 올리고 하는데 너무 시간을 많이 잡아먹기 때문입니다.
그래서 위에 소개한 젠킨스라는 툴을 사용하는데요.
이런 어려움에도 불구하고 젠킨스를 도입하려고 문서 찾아보고 시간쓰고 하는 이유는 손빌드가 너무 힘들기 때문입니다.
참조
https://velog.io/@gth1123/CI-CD-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C