DDD(도메인 주도 설계)를 적용하여
도메인 별로 서비스를 나누고 그에 따라 도커 컨테이너를 분리하였다.
github 자동 배포를 설정하면서
n개로 구성 된 컨테이너들을 일괄 배포하였는데,
서비스의 볼륨이 커지니 배포 시간이 계속 늘어 불편함이 생겼다.
배포할 때마다 모든 개발 팀이 작업을 all stop해야 했다.
배포 시간이 15분이라면 넉넉 잡아 최소 20분은 개발이 중단되는 셈이다.
서비스의 성능을 챙기는 것만큼이나 개발 과정의 효율을 개선하는 것은 꽤나 중요하다.
개발 팀 전체의 생산성에 영향을 끼치는 이러한 비효율을 개선해보기로 했다.
[1]
CD를 개선하기 위해 기존의 compose.yml 에서
fetch-depth 옵션을 1->0으로 변경한다.
변경 감지 및 전체 히스토리 확보를 위한 옵션이다.
[2]
git diff를 이용해 변경 된 파일을 감지하자.
- name: Get changed files
id: changes
run: |
echo "Checking changed services..."
git fetch origin main
git diff --name-only origin/main...HEAD > changed_files.txt
main브랜치를 기준으로 변동이 있는 코드를 work flow 중 인식해서 별도의 temp파일에 경로를 기록하는 것이다.
나중에는
if grep -q "^user-service/" changed_files.txt; then
로 파일에 기록 된 변경 파일을 조건 체크해주고
해당 도메인만 컨테이너 재배포를 진행한다.
전체 서비스 .tar 파일 생성했던 방식에서 변경 된 일부 컨테이너만 이미지(.tar)를 재생성하고 이를 서버에 다시 로드한다.
[3]
기존에는
scp + docker load로 전체 컨테이너를 로드했다면,
compgen -G "*.tar"
조건을 부여하여 .tar 있는 경우에만 업로드 및 배포하도록 수정하자.

무사히 잘 배포가 되었다.
변경 된 구조의 흐름과 성능 현황을 보자.
(왼) before (오) after

적용 전

적용 후

매번 15분 가량의 시간을 기다리는 것은 생각보다 불편하다.
변경 된 부분만 배포하도록 파이프라인을 구성함으로써
확실히 배포 시간이 줄었고, 개발 중 불필요한 시간 낭비를 제거하고 효율을 높일 수 있게 됐다.