릴리즈를 하면서 느낀 점

Pien·2024년 2월 4일

내가 현재 다니고 있는 회사는 B2B로 해외의 의료관련 회사에 대한 제품을 만들고 제공하는 식으로 서비스를 하고 있다.
현재는 데모로 서비스를 제공하고 있는데, Cloud로 서비스를 제공하며, 추후엔 On prem으로도 서비스를 제공할 예정이다.

배포 전 과정

고객사의 요청을 수용해 릴리즈에 나갈 기능을 정의하고, 기능 정의가 완료되었다면, 뚱땅뚱땅 개발을 시작한다.
릴리즈 간격은 상황에 따라 다르게 진행한다.

기능 개발이 모두 끝나면, AWS에 Staging서버를 열어 QC 테스트를 진행한다.
QC 테스트는 약 1주일간 진행하며, QC기간에 bug fix또한 같이 진행한다.

크리티컬한 bug가 아닐 경우 대체로 fix를 모두 진행한 상태로 QC가 마무리 되고 크리티컬한 bug일 경우 릴리즈 일정을 미루게 된다.

배포 Process

Github에 코드를 관리하고 릴리즈를 진행할때 labels을 이용해 배포할 서비스와 도메인을 정한다.

개발팀 코드는 최근에 Monorepo로 이전 후 관리되어 하나의 repo에서 배포가 진행된다.

백엔드는 MSA로 조건에 따라 여러가지 서비스를 동작시키고 있는데, 각자 ECS의 Fargate로 동작중 이며, 추후엔 EKS로 이전할 예정이다.

배포는 릴리즈 PR을 날리고, labels를 붙인 뒤 Merge가 되면 Github Action이 배포를 활성화 하고,
Rolling 방식과 Blue/Green 방식을 이용해 배포가 진행된다.

문제점

이전에 많은 배포를 진행했지만, CI/CD중 CI는 제대로 동작했지만, CD는 제대로 동작하지 않았다.
이번에 CD를 고쳐서 자동배포를 진행하려고 했지만, QC서버에서 Blue/Green 배포방식을 사용하는 2개의 서비스가 제대로 동작하지 않았다.

Why

우선 이전 릴리즈에서는 각자의 Repo가 분리되어 있었다.
하지만 이번 릴리즈와 이전 릴리즈의 사이에 Monorepo로 통합이 이뤄졌고, Monorepo로 옮겨오면서 몇가지 설정이 바뀌었다.

1. Docker의 실행 커맨드가 DockerFile에서 제거됨

배포에 사용하는 서비스중 하나가 DockerFile에서 커맨드로 서비스를 실행했으나, 바뀐 repo에서는 docker-compose로 실행 커맨드를 옮겨 갔었다.
이 때문에 task-definition에도 실행 커맨드가 없고, Dockerfile에도 실행 커맨드가 없어 서비스가 실행되지 않았다.

2. 필요 환경변수를 추가했지만, Cloud환경에서의 환경변수를 추가하지 않음

Runtime때 환경변수가 없을때의 에러를 대비해 서비스가 가동할때 환경변수를 체크 후 존재하지 않으면 서비스를 종료하는 것을 추가했었다.
로컬에서는 실행을 위해 환경변수를 바로 추가해줘 문제가 없었지만, Cloud에서는 환경변수가 추가되지 않아 서비스가 실행되자마자 종료되었다.

그래서 왜 문제인데

1주일의 QC기간동안 이 문제를 해결하지 못해 릴리즈 시점에도 CD를 완성하지 못한채 릴리즈에 돌입했다.

0개의 댓글