CI/CD

조별 학급 신문을 만들 때, 원고를 합칠 때마다 검사기가 저절로 돌고 통과하면 게시판에 바로 붙는 것과 같아요.

정의 여러 사람이 나눠 쓴 프로그램 코드를 자주 한데 합치고, 합칠 때마다 준비해 둔 검사를 기계가 자동으로 돌리는 방식이에요. 검사를 통과한 코드는 사람이 손대지 않아도 실제 서비스 서버까지 자동으로 올라가요. 앞쪽을 지속적 통합(CI), 뒤쪽을 지속적 배포(CD)라고 부르고, 둘을 한 줄로 이어 붙인 흐름을 CI/CD라고 해요.

원고를 마감 전날 몰아서 합치면 생기는 일

학급 신문을 네 명이 나눠 만든다고 해 볼게요. 각자 집에서 기사를 한 꼭지씩 따로 써요. 서로 어떻게 쓰고 있는지는 마감 날이 되어서야 알게 되죠.

마감 전날 밤에 네 사람의 원고를 처음 합쳐 보면 문제가 쏟아져요. 같은 사건을 두 사람이 다르게 적어 놓았고, 제목 글씨 크기도 제각각이에요. 어디서부터 어긋났는지 되짚느라 밤을 새우게 돼요.

따로 떨어져 있던 시간이 길수록 다시 붙이는 일은 어려워져요. 그래서 마감까지 기다리지 말고 매일 조금씩 합쳐 보자는 생각이 나왔어요. 이렇게 자주 합쳐서 어긋난 곳을 일찍 찾는 방식을 지속적 통합이라고 불러요.

프로그램을 만드는 현장도 사정이 비슷해요. 여러 사람이 각자 맡은 부분을 몇 주씩 따로 쓰다가 한꺼번에 합치면, 마감 전날 밤의 학급 신문과 같은 일이 벌어져요. 그래서 개발자들은 하루에도 여러 번 자기 원고를 공용 원고 뭉치에 합쳐 넣어요.

검사기를 통과한 원고만 게시판에 붙어요

자주 합치기만 해서는 어긋난 곳을 사람이 일일이 눈으로 찾아야 해요. 그래서 합치는 순간마다 저절로 돌아가는 검사기를 붙여 둬요. 학급 신문으로 치면 원고를 공용 폴더에 올리는 순간 맞춤법 검사기가 켜지는 셈이에요.

프로그램에서 이 검사기 역할을 하는 것이 자동 테스트예요. 미리 적어 둔 확인 항목을 기계가 순서대로 훑어요. 한 곳이라도 걸리면 합치기를 멈추고, 누구의 어느 줄에서 걸렸는지 곧바로 알려 줘요.

검사를 통과하면 그다음 단계가 이어져요. 완성된 신문이 사람 손을 거치지 않고 복도 게시판까지 자동으로 붙는 것처럼, 통과한 코드가 실제 서비스 서버로 올라가요. 이 뒷부분을 지속적 배포라고 불러요.

합치기와 검사와 올리기가 한 줄로 이어져 저절로 굴러가는 이 흐름을 파이프라인이라고 불러요. 사람은 원고를 쓰는 일에 집중하고, 되풀이되는 확인과 배달은 기계에 맡기는 것이 핵심이에요.

합치기부터 검사, 빌드, 배포까지 이어지는 자동 파이프라인 지속적 통합 지속적 배포 코드 합치기 자동 테스트 빌드 서비스 서버

조금 더 정확히 말하면

검사기를 통과했다고 해서 신문에 흠이 없다는 뜻은 아니에요. 맞춤법 검사기는 오타는 잡아내지만, 기사에 적힌 날짜가 맞는지까지는 보지 못해요. 자동 테스트도 사람이 미리 적어 둔 항목만 확인해요.

그래서 검사 목록을 무엇으로 채우는지가 어떤 도구를 쓰는지보다 중요해요. 확인 항목이 부실하면 파이프라인은 잘못된 코드도 그대로 통과시켜요. 빠르게 굴러가는 흐름은 좋은 검사가 있을 때만 제 몫을 해요.

한 가지 더, 마지막 단계까지 기계에 맡길지는 팀마다 달라요. 신문을 게시판 앞까지만 가져다 두고, 붙이는 순간은 사람이 확인한 뒤 결정하는 방식도 있어요. 이렇게 사람의 승인 단계를 남겨 둔 방식은 지속적 전달이라고 따로 불러요.

두 방식이 노리는 바는 같아요. 작게 자주 합치고 그 자리에서 확인하면 어긋난 곳을 일찍 찾을 수 있고, 고치는 품도 적게 들어요. 마감 전날 밤을 새우는 일이 그만큼 줄어들어요.

🤔 흔한 오해

✕ 오해

CI/CD를 도입하면 프로그램에서 오류가 사라진다.

✓ 사실

자동 검사는 사람이 미리 적어 둔 항목만 확인해요. 검사 목록에 없는 문제는 그대로 통과하기 때문에, 검사를 무엇으로 채우느냐가 도구 선택보다 중요해요.

✕ 오해

CI/CD는 설치해서 쓰는 특정 프로그램의 이름이다.

✓ 사실

정해진 제품 이름이 아니라 '자주 합치고 자동으로 검사해 올린다'는 일하는 방식이에요. 그 방식을 돕는 도구는 여러 가지가 있고 팀마다 다른 것을 골라 써요.

🧺 일상에서 만나요

1 여러 명이 함께 만드는 웹사이트에서, 누군가 코드를 올릴 때마다 검사가 자동으로 돌아 어긋난 부분을 그 자리에서 알려 줘요.
2 스마트폰 앱이 한 달에도 여러 번 작은 개선판을 내놓을 수 있는 것도 이 자동 흐름 덕분이에요.
💡 그러니까 한마디로

코드를 자주 합쳐 기계가 자동으로 검사하고, 통과한 것만 서비스에 자동으로 올리는 일하는 방식이에요.