저희는 도커와 젠킨스를 사용해 배포를 진행했습니다.
도커를 사용한 이유
버전업이 됐을 때 파일을 다시 올려줘야 하는데 도커를 사용하게 되면 수동배포보다 더 편하게 배포가 가능합니다.
젠킨스를 사용한 이유
젠킨스를 사용하지 않고도 도커만으로 배포가 가능하지만 이 경우 버전업으로 인해 배포를 다시 진행해야 할 때 똑같은 배포 과정을 다시 거쳐야 한다는 단점이 있습니다. 또한 서버가 하나라면 괜찮겠지만 여러개의 서버를 두고 있다면 모든 서버에 배포를 해줘야 하기 때문에 번거로움이 있습니다.
이를 해결하기 위해 도커와 젠킨스를 사용했습니다.
도커와 젠킨스를 사용하면서 배포는 더욱 편해졌지만 아직도 빌드를 직접해야한다는 문제가 있었습니다. 그래서 저희는 Webhooks를 통해 깃허브에 이벤트가 발생했을 때 젠킨스가 해당 이벤트를 감지해 자동으로 배포 동작을 수행하도록 설정했습니다.
백엔드 서버를 하나만 두었을 경우 사용자가 늘어남에 따라 트래픽이 증가하게 되고 이로 인해 서버가 다운될 수 있었습니다.
그렇기 때문에 저희는 3개의 백엔드 서버와 Nginx 서버를 연결해 사용자의 요청을 Nginx가 받아 헬스 체크를 통해 부하 분산을 시켜주도록 했습니다.
백엔드 서버를 3개 두었지만 버전업의 경우 백엔드 서버 3개를 다시 빌드해줘야 합니다.
만약 이 경우 3개의 서버를 한번에 빌드한다면 사용자가 서비스를 이용하지 못하는 지점이 발생하게 되기 때문에 무중단 배포 중 롤링 방식을 도입해 사용자가 서비스의 끊김 없이 사용할 수 있도록 했습니다.