작성자:@김동현 / 작성일: May 27, 2022 / 최종 수정일:May 27, 2022
프로젝트를 개발하고 사용자에게 공개하면서 기획·운영상 변경 사항 또는 테스트 과정에서 발견하지 못한 오류들을 수정하는 과정에서 잦은 배포가 이루어지기 마련입니다. 또한 하나의 거대한 구조의 모놀리식(Monolithic) 방식 아키텍처에서 컨테이너화를 통해 서비스를 분리하는 마이크로서비스(Microservice) 아키텍처로 트렌드가 변화함에 따라 빈번한 업데이트는 피할 수 없게 되었습니다.
단순한 정적 파일의 변경이면 문제가 없지만, 주요 API의 변경이 이루어지면 그 순간 서버에 접속중이던 사용자들은 오류를 맞닥뜨리거나 데이터에 결함이 발생하게 됩니다.
이러한 점들을 방지하기 위해 무중단 배포가 필요해지게 되었고, load balancer와 container 기술이 발달하면서 효율적인 방식들이 가능해지게 되었습니다.
✔️ 전략프로젝트팀에서는 Node.js 기반의 서버를 구축하여 사용하고 있기 때문에 해당 기준으로 글을 작성하였습니다.
일반적인 무중단 배포 방식에는 다음과 같은 3가지가 있습니다.
롤링 업데이트는 가장 기본적인 방식으로, 점진적으로 기존의 인스턴스를 종료하면서 새로 추가된 인스턴스로 대체시킵니다. 이 때 들어오는 연결은 가용한 인스턴스로 매칭됩니다.
배포 과정에서 기존 인스턴스와 새로운 인스턴스가 모두 존재하기 때문에 서버에 연결되는 사용자에 따라 호환성 문제가 발생할 수 있습니다.