지속적 통합(Continuous-Intergration)과 Blue-Green 배포 전략이란?

2018. 6. 1. 14:30개발을 파헤치다/쉽게 풀어쓴 개념

반응형

CI(Continuous-Intergration)가 왜 필요할까?

수 많은 서비스들이 생겼다 사라지는 현대 사회에서 살아남기란 쉽지가 않습니다.

생존하기 위한 기본기 중 하나는 바로 고객들의 피드백을 최대한 빨리 종합하여 서비스에 반영하는 것입니다.

고객들의 피드백을 무시하고 살아남은 서비스는 매우 찾아보기 힘듭니다.

하지만 개발에 있어서 실제 운영중인 서비스에 수정을 재빨리 적용하는 것은 큰 부담이 따릅니다.

예를 들어, 개발 서버 환경에서 코드가 제대로 돌아가는 것을 확인했습니다.

그리고 버전관리 도구(e.g. Git)를 활용하여 운영중인 실서버에 적용을 했습니다.

하지만 갑자기 에러가 발생하고 서버가 죽어버렸습니다.

얼마나 끔찍한 상황인지는 서비스를 운영해 본 개발자만이 알 수 있을거라 생각합니다.

개발이 완료된 코드를 실제 운영중인 서버에 적용하는 방법에는 여러가지가 있지만

언제까지고 개발자가 수동으로 할 수 없습니다.

오히려 그 편이 리스크가 더 크죠.

이런 문제를 해결하기 위해 지속적 통합 도구가 등장하게 되었습니다.

결국, 지속적 통합 도구 (Continuous Integration Tool)은 개발자가 개발이 완료된 코드를 검증하고

실제 운영중인 서버에 알아서 적용해주고 잘못된 부분이 있으면 에러 리포트까지 해주는 녀석이라고 할 수 있습니다.

안정적인 서비스를 위해서는 필수적이라고 할 수 있습니다.

Blue-Green 배포 전략


Blue-Green 배포 전략은 잘 알려진 지속적 통합 방법론 중의 하나입니다.

실제 운영중인 서비스 역시 지속적인 업데이트가 필요합니다.

특히, 요즘 고객들은 요구사항이 많고 신속하게 그들의 피드백이 반영되지 않았을 때 대부분 서비스를 떠납니다.

하지만 업데이트를 운영중인 서비스에 적용하는 것은 테스트를 거쳤다고 해도 리스크가 따르는 작업입니다.

만일 개발 테스트 서버에서 테스트가 완료된 코드가 운영중인 실서버에 적용된 뒤 문제가 생겨 서비스가 일시적으로 중단된다면 정말 끔찍하겠죠?

그렇기 때문에 서비스를 고객들에게 계속 적용하면서도 안전하게 업데이트를 진행할 방법이 필요합니다.

Blue-Green 배포 전략은 그 방법론 중 하나입니다.

Blue와 Green 두 가지 운영 서버를 두고 Router를 통해 사용자의 요청을 나눠주는(Load Balancing)것입니다.

현재 운영중인 서버가 Green이라고 한다면 업데이트를 Blue에 적용합니다.

그리고 Router의 설정을 변경하여 사용자의 요청이 Blue로 갈 수 있도록 합니다.

첫번째로, Blue가 업데이트를 하는 동안 Green이 사용자의 요청을 처리하기 때문에 서비스가 중지되는 일은 없습니다.

두번째, 만약 Blue에서 사용자의 요청을 수행하던 도중 에러가 발생해 서버가 다운된다고 해도 Router 설정 변경을 통해 빠르게 Green으로 사용자의 요청을 우회할 수 있기 때문에 서비스 중지로 인한 피해를 최소화 할 수 있습니다.

이렇게 실서버에 업데이트를 적용할 때 마다 Blue와 Green을 번갈아가며 운영하면 서버의 Down Time을 최소화하면서 업데이트를 진행할 수 있습니다.

원래 Router는 진짜 물리적인 Router를 의미했지만 근래에는 Nginx와 같은 훌륭한 Web Server에서 Load Balancing 기능을 제공하기 때문에 Web Server 설정만으로 Blue-Green 배포 전략을 구현할 수 있습니다.

반응형