0. 업데이트 노트
이 글은 MAICE를 실험 환경에서 안정적으로 운영하기 위해 Blue-Green 배포를 도입했던 기록입니다. 배포 스크립트와 운영 방식은 시간이 지나며 세분화되었지만, 핵심 문제의식은 같습니다.
학생이 질문하는 도중 서비스가 멈추면 학습 흐름이 끊깁니다. 연구자 입장에서는 세션 로그도 끊기고, 평가 가능한 데이터도 줄어듭니다. 그래서 MAICE에서 안정성은 단순한 운영 편의가 아니라 실험 조건을 지키기 위한 기반이었습니다.
1. 실험에서 안정성은 기능이었다
4편에서는 MAICE 대화를 QAC로 평가하는 방법을 다뤘습니다. 그런데 평가 기준이 아무리 좋아도, 실험 중 서비스가 자주 멈추면 비교할 대화가 사라집니다.
일반적인 웹 서버는 재시작이 빠릅니다. 하지만 AI 에이전트 서버는 무겁습니다. 여러 라이브러리를 불러오고, 외부 서비스와 연결하고, 모델 호출 준비를 마치는 데 시간이 걸립니다. 배포할 때마다 학생의 채팅이 끊긴다면, 시스템이 교육적으로 좋은지 평가하기 전에 운영 조건부터 흔들립니다.
그래서 MAICE는 배포 중에도 기존 서비스가 계속 살아 있도록 Blue-Green 전략을 사용했습니다. Blue-Green은 같은 서비스를 두 벌 준비해 두고, 새 버전이 준비되면 입구의 트래픽만 바꾸는 배포 방식입니다.
본 연구 기간의 시스템 가동률은 99.2%로 보고되었습니다. 다만 이 수치는 당시 실험 규모와 운영 환경에서 관찰된 값입니다. Blue-Green 배포가 안정성에 기여한 것은 맞지만, 이 수치만으로 배포 전략의 독립 효과를 증명할 수는 없습니다.
2. Blue-Green을 교실 상황으로 비유하면
Blue-Green 배포는 같은 서비스를 두 벌 준비해 두는 방식입니다. 지금 학생들이 쓰는 쪽을 Blue라고 하고, 새 버전을 올릴 쪽을 Green이라고 해 보겠습니다.
- Blue가 학생 요청을 받고 있습니다.
- Green에 새 버전을 올립니다.
- Green이 정상인지 확인합니다.
- 정상이라면 입구인 Nginx가 Green을 보도록 바꿉니다.
- 문제가 생기면 다시 Blue로 되돌립니다.
교실로 비유하면, 수업 중 칠판을 지우고 새 판서를 시작하는 것이 아니라, 옆 칠판에 새 내용을 미리 써 둔 뒤 학생들이 볼 칠판만 바꾸는 방식에 가깝습니다.
3. 실제 배포 흐름
실제 MAICE 코드에서는 Jenkinsfile이 배포 자동화의 입구 역할을 합니다. Jenkins는 어떤 커밋을 빌드했는지, 어떤 이미지를 만들었는지, 어떤 환경에 배포했는지를 남깁니다. 사람이 서버에 직접 들어가 감으로 컨테이너를 재시작하는 방식보다 추적 가능성이 높습니다.
백엔드 배포의 핵심 흐름은 scripts/deploy_backend_blue_green.sh에 들어 있습니다. 이 스크립트가 하는 일은 다음과 같습니다.
- 필요한 환경 변수와 API 키가 있는지 확인합니다.
- 빌드 번호가 붙은 백엔드 이미지를 레지스트리에서 가져옵니다.
- 현재 Nginx가 Blue와 Green 중 어디를 보고 있는지 확인합니다.
- 비어 있는 색의 컨테이너를 새로 띄웁니다.
/health/simple을 여러 번 확인해 새 컨테이너가 준비됐는지 봅니다.- 준비가 끝나면 Nginx 설정을 바꾸고 reload합니다.
여기서 헬스 체크는 단순히 "프로세스가 켜졌는가"만 보는 절차가 아닙니다. 학생 요청을 받을 최소 준비가 되었는지 확인한 뒤에야 트래픽을 넘기기 위한 안전장치입니다.
4. 실패를 없애는 것이 아니라, 돌아갈 길을 만든다
Blue-Green 배포를 한다고 배포 실패가 사라지는 것은 아닙니다. 새 컨테이너가 뜨지 않을 수도 있고, 환경 변수가 빠질 수도 있고, Nginx 설정 반영이 실패할 수도 있습니다.
그래서 중요한 것은 실패하지 않는 척하는 것이 아니라, 실패했을 때 되돌아갈 길을 만드는 것입니다. MAICE에는 rollback_backend_blue_green.sh와 traffic_control.sh 같은 스크립트가 있습니다. 이전 색의 컨테이너가 살아 있는지 확인하고, 헬스 체크를 거친 뒤 트래픽을 다시 돌릴 수 있게 합니다.
개발 메모로 남기면, 실제 컨테이너 이름은 maice-back-blue, maice-back-green처럼 색으로 나뉘고, Nginx upstream 설정이 어느 쪽을 볼지 결정합니다. 스크립트는 nginx -t, reload, 필요 시 restart fallback까지 고려합니다.
5. 이 글이 교육 글인 이유
배포 이야기는 얼핏 교육과 멀어 보입니다. 하지만 실험에서는 그렇지 않았습니다. 학생이 질문을 입력하는 도중 서비스가 멈추면, 그 학생의 학습 흐름도 끊기고 세션 로그도 불완전해집니다. 그런 로그를 QAC로 평가하면 비교 조건이 흔들립니다.
따라서 배포 자동화는 학습 효과를 직접 만드는 기능이 아닙니다. 대신 학습 효과를 관찰할 수 있는 조건을 지켜 주는 운영 장치입니다.
6. 안정성 다음에 남은 문제
Blue-Green 배포가 해결한 것은 실험 중 서비스가 멈추지 않게 하는 문제였습니다. 이제 남은 질문은 운영 장치가 아니라, 그 안정적인 조건 위에서 실제 대화와 평가 데이터가 무엇을 보여 주었는가입니다.
다음 글에서는 MAICE의 교육적 효과와 한계를 논문 데이터 중심으로 정리합니다.
💬 댓글
이 글에 대한 의견을 남겨주세요