목록으로

Programming Notes

Car-ffeine #9 - 카페인 팀의 무중단 배포 도전기

안녕하세요! 카페인팀의 제이입니다. 저희 카페인 팀이 드디어 무중단 배포를 성공적으로 진행했습니다. 많은 시행착오와 고민 끝에 얻어낸 값진 경험을 여러분과 공유하고자 합니다. 이번 글에서는 저희가 무중단 배포를 도입하게 된 배경부터 실제 적용 과정, 그리고 앞으로 개선해야 할...

안녕하세요! 카페인팀의 제이입니다. 저희 카페인 팀이 드디어 무중단 배포를 성공적으로 진행했습니다. 많은 시행착오와 고민 끝에 얻어낸 값진 경험을 여러분과 공유하고자 합니다. 이번 글에서는 저희가 무중단 배포를 도입하게 된 배경부터 실제 적용 과정, 그리고 앞으로 개선해야 할 부분까지 솔직하게 이야기해보려고 합니다.

커피 한 잔 값으로 감당해야 했던 고통

돌이켜보면, 이전 배포 방식은 마치 갓 내린 에스프레소처럼 짜릿했지만, 그만큼 쓰디쓴 고통을 동반했습니다. 간단히 요약하면 다음과 같았습니다. 개발자가 특정 브랜치에 코드를 푸시하면 GitHub Actions가 자동으로 빌드와 도커 이미지 생성, 그리고 Docker Hub에 이미지 업로드까지 진행합니다. 그 후, GitHub Actions의 self-hosted runner가 인프라 서버를 통해 프로덕션 서버에 접속하여 기존 서버를 중단시키고, Docker Hub에서 최신 이미지를 내려받아 새로운 서버를 실행하는 방식이었죠.

문제는 바로 서버 다운타임이 발생한다는 점이었습니다. 비록 짧은 시간이지만, 사용자들은 서비스를 이용하는 도중 갑작스럽게 연결이 끊어지는 경험을 해야 했습니다. 트래픽이 적은 새벽 시간에는 큰 문제가 되지 않았지만, 사용자가 몰리는 시간대에는 잠재적인 불편함과 서비스 신뢰도 하락으로 이어질 수 있다는 불안감이 있었습니다. 마치 맛있는 커피를 마시려는데, 갑자기 콘센트가 뽑혀버리는 상황과 같았습니다.

멈추지 않는 서비스를 위하여

이러한 문제점을 해결하기 위해 저희 카페인 팀은 무중단 배포 시스템 구축에 착수했습니다. 여러 기술적인 선택지 중에서 저희는 Blue/Green 배포 방식을 선택했습니다. Blue/Green 배포는 기존에 운영 중인 환경(Blue)과 동일한 환경(Green)을 새롭게 구축하고, 새로운 버전을 Green 환경에 배포한 후 트래픽을 점진적으로 전환하는 방식입니다.

구체적인 과정은 다음과 같습니다. 먼저, 프로덕션 환경과 동일한 스펙의 서버를 추가로 준비했습니다. 그리고 GitHub Actions를 수정하여, 새로운 코드가 푸시될 때마다 Green 환경에 자동으로 배포되도록 설정했습니다. 이 과정에서 데이터베이스 마이그레이션이 필요한 경우, Blue 환경에 영향을 주지 않도록 Green 환경에서 미리 수행했습니다.

가장 중요한 부분은 트래픽 전환이었습니다. 저희는 로드 밸런서를 활용하여 트래픽을 Blue 환경에서 Green 환경으로 서서히 옮기는 방식을 채택했습니다. 처음에는 소량의 트래픽만 Green 환경으로 보내서 서비스의 안정성을 확인하고, 문제가 없을 경우 점진적으로 트래픽 비중을 늘려나갔습니다. 모든 트래픽이 Green 환경으로 전환된 후에는 Blue 환경을 대기 상태로 유지하거나, 다음 배포를 위한 Green 환경으로 활용했습니다.

이러한 Blue/Green 배포 방식을 통해 저희는 서비스 중단 없이 새로운 기능을 배포하고, 롤백 또한 간편하게 수행할 수 있게 되었습니다. 마치 커피 머신을 청소하는 동안 다른 머신으로 커피를 내리는 것처럼, 사용자들은 끊김 없이 서비스를 이용할 수 있게 된 것입니다.

앞으로 더 맛있는 커피를 위해

물론, 아직 개선해야 할 부분도 많습니다. 자동화된 롤백 시스템 구축, 모니터링 강화, 그리고 다양한 배포 전략(Canary 배포 등) 도입을 통해 더욱 안정적이고 효율적인 무중단 배포 시스템을 구축해나갈 계획입니다. 또한, 이번 무중단 배포 시스템 구축 과정에서 얻은 경험과 지식을 바탕으로 다른 팀들과 적극적으로 공유하고 협력하여 전체 개발 프로세스를 개선해나가도록 노력하겠습니다.

저희 카페인 팀은 앞으로도 멈추지 않고 더욱 맛있는 서비스를 제공하기 위해 끊임없이 노력하겠습니다. 다음 Car-ffeine 포스팅에서는 더 흥미로운 이야기로 찾아뵙겠습니다! 감사합니다.