릴레이 프록시

App Configuration 릴레이 프록시는 SDK 클라이언트와 IBM Cloud App Configuration 서비스 사이에 위치합니다. 각 SDK가 IBM Cloud 에 직접 연결하는 대신, SDK 클라이언트는 사용자 네트워크 내의 프록시에 연결합니다. 프록시는 IBM Cloud App Configuration 에서 구성 정보를 가져와 캐시한 다음, 연결된 모든 클라이언트에 이를 전달합니다.

릴레이 프록시 아키텍처 다이어그램
IBM Cloud App Configuration 릴레이 프록시

왜 Relay 프록시를 사용해야 할까요?

다음과 같은 상황에서는 Relay 프록시를 사용하는 것을 고려해 보십시오:

  • IBM Cloud 으로의 아웃바운드 호출 줄이기 — 프록시는 플릿에 배포된 SDK 인스턴스 수와 관계없이, 구성된 컬렉션과 환경의 조합당 하나의 업스트림 연결을 열어줍니다.
  • 에어갭 또는 사설 네트워크 배포 — SDK 클라이언트는 내부 네트워크 내의 프록시와만 통신합니다. 이 프록시는 IBM Cloud 에 대한 모든 연결을 처리합니다.
  • 단일 인증 지점 — 프록시에서 IBM Cloud IAM API 키가 하나 필요합니다. SDK 클라이언트는 사용자가 정의한 키를 사용하여 프록시에 인증합니다.
  • 주 인스턴스 및 백업 인스턴스의 장애 조치 — 주 인스턴스를 사용할 수 없게 되면 프록시가 자동으로 백업 IBM Cloud App Configuration 인스턴스로 전환되며, 자동으로 복구됩니다.
  • 로컬 시드 파일을 활용한 원활한 시작 — 빠른 시작 모드에서는 프록시가 백그라운드에서 IBM Cloud 에서 최신 데이터를 가져오는 동안 로컬 시드 파일의 구성 정보를 즉시 제공합니다.

SDK 클라이언트가 릴레이 프록시에 연결하는 방법

SDK 클라이언트는 IBM Cloud App Configuration 에 직접 연결할 때와 동일한 연결 유형을 사용하지만, 대신 프록시 호스트와 포트를 대상으로 합니다:

릴레이 프록시에 대한 SDK 연결 유형
SDK 유형 연결 유형 용도
서버 SDK WebSocket 실시간 구성 변경 이벤트 수신
클라이언트 SDK 서버 전송 이벤트(SSE) 구성 스냅샷 및 업데이트 수신
모든 SDK REST 초기 구성 가져오기

연결 다중화

릴레이 프록시의 주요 장점 중 하나는 연결 다중화입니다. 수백 개 또는 수천 개의 SDK 인스턴스가 프록시에 연결될 수 있지만, 프록시는 collection × environment 조합당 IBM Cloud App Configuration 에 대한 업스트림 WebSocket 연결을 단 하나만 열어줍니다. 해당 업스트림 연결 수는 구성에 따라 고정되어 있으며, 플릿 규모에 따라 증가하지 않습니다.

예를 들어, 두 개의 컬렉션(inventorypayments)을 각각 두 개의 환경(devprod)에서 사용하도록 구성한 경우, 프록시는 연결된 SDK 인스턴스의 수와 관계없이 정확히 네 개의 업스트림 WebSocket 세션을 유지합니다:

두 개의 컬렉션과 두 개의 환경에 대한 WebSocket 세션 예시
WebSocket 세션의 업스트림 콜렉션 환경
제1세션 인벤토리 dev
제2세션 인벤토리 prod
제3세션 지불 dev
제4차 세션 지불 prod

IBM Cloud App Configuration 가 업스트림 연결에 대한 변경 이벤트를 전송하면, 프록시는 해당 조합을 구독 중인 모든 SDK 클라이언트에 즉시 이 이벤트를 분산 전송합니다.

collection × environment 조합은 프록시 내에서 각각 독립된 캐시 슬롯과 업스트림 WebSocket 세션을 가지고 있습니다.

시동 모드

릴레이 프록시는 시드 파일이 설정되었는지 여부에 따라 두 가지 시작 모드를 지원합니다.

일반 시작

일반 시작 모드에서는 프록시가 어떤 요청도 처리하기 전에 IBM Cloud App Configuration 에 성공적으로 접속해야 합니다. 구성 가져오기 중 하나라도 실패하면 시작이 중단됩니다. 이 모드는 클라이언트가 첫 번째 요청부터 항상 신뢰할 수 있는 데이터를 수신하도록 보장합니다.

시작 순서는 다음과 같습니다:

  1. IBM Cloud App Configuration 에서 구성을 가져옵니다. — 구성된 모든 조합이 동기식으로 가져옵니다.
  2. 모든 구성을 메모리에 캐시합니다.
  3. HTTP 서버를 시작하고 클라이언트의 요청을 수락합니다.
  4. 실시간 변경 알림을 받으려면 각 조합당 하나씩, 업스트림 WebSocket 세션을 열어 두십시오.

빠른 시작

빠른 시작 모드에서는 시드 파일이 캐시를 미리 예열하므로, 프록시는 IBM Cloud 를 기다릴 필요 없이 즉시 요청 처리를 시작할 수 있습니다. 최신 구성 정보가 백그라운드에서 가져와지며, 사용 가능해지면 이미 연결된 모든 클라이언트에 전송됩니다. 이 모드는 에어갭 환경 및 복원력이 뛰어난 배포 환경에 적합합니다.

시작 순서는 다음과 같습니다:

  1. 디스크에서 시드 파일을 불러옵니다. 캐시가 즉시 예열되므로 네트워크 호출이 필요하지 않습니다.
  2. HTTP 서버를 즉시 시작하십시오.
  3. 백그라운드에서 IBM Cloud App Configuration 에서 최신 구성 정보를 가져옵니다. 시드 데이터가 덮어쓰어지며, 연결된 모든 클라이언트에 알림이 전송됩니다.
  4. 실시간 변경 알림을 받으려면 각 조합당 하나씩, 업스트림 WebSocket 세션을 열어 두십시오.

시드 파일 형식과 구성 옵션에 대해서는 ‘ App Configuration ’ API 참조 문서를 참조하십시오.

구성 변경 사항이 SDK에 반영되는 방식

App Configuration 콘솔에서 구성 변경 사항이 게시되면, 해당 변경 사항은 다음 순서에 따라 SDK 클라이언트에 전달됩니다

  1. IBM Cloud App Configuration 관련 업스트림 세션의 프록시에 ‘ WebSocket ’ 메시지를 전송합니다.
  2. 프록시는 해당 조합에 대한 업데이트된 구성을 다시 가져와 캐시에 저장합니다.
  3. 프록시는 업데이트된 구성을 연결된 모든 클라이언트에 브로드캐스트합니다:
    • 서버 SDK는 ‘ WebSocket ’ 이벤트를 수신합니다.
    • 클라이언트 SDK는 업데이트된 구성 페이로드가 포함된 SSE 이벤트를 수신합니다.

주 시스템 및 백업 시스템의 장애 전환

백업 인스턴스가 구성되면 프록시는 ‘ WebSocket ’ 세션 및 구성 정보 가져오기에 대해 자동 장애 조치 기능을 제공합니다.

  • WebSocket 세션 — 각 조합은 자체적인 업스트림 WebSocket 을 유지합니다. 주 인스턴스를 사용할 수 없게 되면, 프록시는 즉시 백업 인스턴스에 연결합니다. 프록시는 15초마다 주 인스턴스에 대한 재시도를 수행하며, 주 인스턴스가 복구되는 즉시 백업 연결을 종료합니다.
  • 구성 정보 가져오기 — HTTP 의 구성 정보 가져오기는 ‘주 서버 → 보조 서버’ 순서로 진행됩니다.

SDK를 Relay 프록시에 연결하기

SDK 클라이언트를 IBM Cloud 에 직접 연결하는 대신 Relay Proxy에 연결하려면:

  1. SDK 초기화 과정에서 ‘ IBM Cloud ’ 호스트명을 프록시의 호스트와 포트로 변경하십시오.
  2. Region, guid, API 키, collection_id 및 environment_id는 릴레이 프록시 구성에 전달된 값과 동일해야 합니다.

다른 SDK 코드 변경은 필요하지 않습니다.

Relay Proxy 사용을 시작하려면 App Configuration 지원팀에 문의해 주세요.