PLUGLINK Tech
#engineering#infrastructure#ev-charging

24시간 멈출 수 없는 충전 서비스를 위한 무중단 배포 전략

전국 35,000대 이상의 충전기가 항상 정상 동작해야 하는 환경에서, 서비스 중단 없이 안전하게 배포하는 방법을 공유합니다.

#24시간 멈출 수 없는 충전 서비스를 위한 무중단 배포 전략

전기차 충전 서비스는 점검 시간이라는 개념이 없습니다. 새벽 2시에도 누군가는 충전하고 있고, 충전 중인 차량에 영향을 주는 배포는 허용되지 않습니다. 이 글에서는 플러그링크가 서비스 중단 없이 안전하게 배포하기 위해 적용한 전략을 공유합니다.

#충전 서비스 배포의 특수성

일반적인 웹 서비스와 달리, 충전 서비스 배포에는 몇 가지 추가 제약이 있습니다.

  1. 활성 충전 세션 보호: 배포 시점에 충전 중인 세션이 끊기면 안 됩니다
  2. 충전기 연결 유지: OCPP WebSocket 연결이 끊어지면 충전기가 오프라인으로 전환됩니다
  3. 결제 정합성: 충전 요금 정산이 중간에 유실되면 안 됩니다

#블루-그린 배포

API 서버는 블루-그린 배포를 적용합니다. 새 버전(그린)을 띄우고, 헬스체크를 통과하면 로드밸런서가 트래픽을 전환합니다.

[Load Balancer]

       ├──► Blue (v1.2.3) ← 현재 트래픽

       └──► Green (v1.2.4) ← 헬스체크 대기

핵심은 전환 시점입니다. 활성 충전 세션이 있는 요청은 기존 Blue 인스턴스에서 처리가 완료될 때까지 기다린 후 전환합니다.

#OCPP Gateway의 롤링 업데이트

충전기와의 WebSocket 연결을 관리하는 OCPP Gateway는 더 신중하게 배포합니다. 한 번에 전체 인스턴스를 교체하면 수만 대의 충전기가 동시에 재접속을 시도하면서 연결 폭풍이 발생하기 때문입니다.

인스턴스를 하나씩 순차적으로 교체하되, 각 인스턴스는 기존 연결을 graceful하게 종료합니다.

# 롤링 업데이트 설정
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1
    maxSurge: 1
lifecycle:
  preStop:
    exec:
      command: ['/bin/sh', '-c', 'sleep 30']
terminationGracePeriodSeconds: 120

충전기는 연결이 끊어지면 자동으로 재접속을 시도합니다. 이때 다른 Gateway 인스턴스로 분산되어 연결되므로, 전체 서비스에는 영향이 없습니다.

#카나리 배포와 자동 롤백

결제 관련 서비스는 카나리 배포를 적용합니다. 새 버전에 전체 트래픽의 5%만 먼저 보내고, 에러율과 응답 시간을 모니터링합니다.

이상이 감지되면 자동으로 롤백됩니다. 판단 기준은 단순합니다.

  • 에러율이 기존 대비 2배 이상 증가
  • p99 응답 시간이 기존 대비 3배 이상 증가
  • 충전 세션 시작 실패율 증가

#배포 금지 시간대

아무리 무중단 배포라도, 리스크를 최소화하기 위해 배포를 피하는 시간대를 정해두었습니다.

  • 출퇴근 시간 (07:00-09:00, 17:00-19:00): 충전 트래픽이 가장 높은 시간대
  • 월말 정산 기간: 충전 요금 정산 배치가 돌아가는 시간

그 외 시간에는 자유롭게 배포할 수 있습니다. 배포 빈도는 평균 하루 2-3회입니다.

#정리

무중단 배포는 기술적 도전이기도 하지만, 결국 “충전 중인 사용자에게 불편을 주지 않겠다”는 약속입니다. 전기차 충전이 일상이 되려면, 서비스는 항상 그 자리에 있어야 합니다.

Share this post