릴레이 프록시
App Configuration 릴레이 프록시는 SDK 클라이언트와 IBM Cloud App Configuration 서비스 사이에 위치합니다. 각 SDK가 IBM Cloud 에 직접 연결하는 대신, SDK 클라이언트는 사용자 네트워크 내의 프록시에 연결합니다. 프록시는 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 | WebSocket | 실시간 구성 변경 이벤트 수신 |
| 클라이언트 SDK | 서버 전송 이벤트(SSE) | 구성 스냅샷 및 업데이트 수신 |
| 모든 SDK | REST | 초기 구성 가져오기 |
연결 다중화
릴레이 프록시의 주요 장점 중 하나는 연결 다중화입니다. 수백 개 또는 수천 개의 SDK 인스턴스가 프록시에 연결될 수 있지만, 프록시는 collection × environment 조합당 IBM Cloud App Configuration 에 대한 업스트림 WebSocket 연결을 단 하나만 열어줍니다. 해당 업스트림 연결 수는 구성에 따라 고정되어 있으며, 플릿 규모에 따라 증가하지 않습니다.
예를 들어, 두 개의 컬렉션(inventory 및 payments)을 각각 두 개의 환경(dev 및 prod)에서 사용하도록 구성한 경우, 프록시는 연결된 SDK 인스턴스의 수와 관계없이 정확히 네 개의 업스트림 WebSocket 세션을 유지합니다:
| WebSocket 세션의 업스트림 | 콜렉션 | 환경 |
|---|---|---|
| 제1세션 | 인벤토리 | dev |
| 제2세션 | 인벤토리 | prod |
| 제3세션 | 지불 | dev |
| 제4차 세션 | 지불 | prod |
IBM Cloud App Configuration 가 업스트림 연결에 대한 변경 이벤트를 전송하면, 프록시는 해당 조합을 구독 중인 모든 SDK 클라이언트에 즉시 이 이벤트를 분산 전송합니다.
각 collection × environment 조합은 프록시 내에서 각각 독립된 캐시 슬롯과 업스트림 WebSocket 세션을 가지고 있습니다.
시동 모드
릴레이 프록시는 시드 파일이 설정되었는지 여부에 따라 두 가지 시작 모드를 지원합니다.
일반 시작
일반 시작 모드에서는 프록시가 어떤 요청도 처리하기 전에 IBM Cloud App Configuration 에 성공적으로 접속해야 합니다. 구성 가져오기 중 하나라도 실패하면 시작이 중단됩니다. 이 모드는 클라이언트가 첫 번째 요청부터 항상 신뢰할 수 있는 데이터를 수신하도록 보장합니다.
시작 순서는 다음과 같습니다:
- IBM Cloud App Configuration 에서 구성을 가져옵니다. — 구성된 모든 조합이 동기식으로 가져옵니다.
- 모든 구성을 메모리에 캐시합니다.
- HTTP 서버를 시작하고 클라이언트의 요청을 수락합니다.
- 실시간 변경 알림을 받으려면 각 조합당 하나씩, 업스트림 WebSocket 세션을 열어 두십시오.
빠른 시작
빠른 시작 모드에서는 시드 파일이 캐시를 미리 예열하므로, 프록시는 IBM Cloud 를 기다릴 필요 없이 즉시 요청 처리를 시작할 수 있습니다. 최신 구성 정보가 백그라운드에서 가져와지며, 사용 가능해지면 이미 연결된 모든 클라이언트에 전송됩니다. 이 모드는 에어갭 환경 및 복원력이 뛰어난 배포 환경에 적합합니다.
시작 순서는 다음과 같습니다:
- 디스크에서 시드 파일을 불러옵니다. 캐시가 즉시 예열되므로 네트워크 호출이 필요하지 않습니다.
- HTTP 서버를 즉시 시작하십시오.
- 백그라운드에서 IBM Cloud App Configuration 에서 최신 구성 정보를 가져옵니다. 시드 데이터가 덮어쓰어지며, 연결된 모든 클라이언트에 알림이 전송됩니다.
- 실시간 변경 알림을 받으려면 각 조합당 하나씩, 업스트림 WebSocket 세션을 열어 두십시오.
시드 파일 형식과 구성 옵션에 대해서는 ‘ App Configuration ’ API 참조 문서를 참조하십시오.
구성 변경 사항이 SDK에 반영되는 방식
App Configuration 콘솔에서 구성 변경 사항이 게시되면, 해당 변경 사항은 다음 순서에 따라 SDK 클라이언트에 전달됩니다
- IBM Cloud App Configuration 관련 업스트림 세션의 프록시에 ‘ WebSocket ’ 메시지를 전송합니다.
- 프록시는 해당 조합에 대한 업데이트된 구성을 다시 가져와 캐시에 저장합니다.
- 프록시는 업데이트된 구성을 연결된 모든 클라이언트에 브로드캐스트합니다:
- 서버 SDK는 ‘ WebSocket ’ 이벤트를 수신합니다.
- 클라이언트 SDK는 업데이트된 구성 페이로드가 포함된 SSE 이벤트를 수신합니다.
주 시스템 및 백업 시스템의 장애 전환
백업 인스턴스가 구성되면 프록시는 ‘ WebSocket ’ 세션 및 구성 정보 가져오기에 대해 자동 장애 조치 기능을 제공합니다.
- WebSocket 세션 — 각 조합은 자체적인 업스트림 WebSocket 을 유지합니다. 주 인스턴스를 사용할 수 없게 되면, 프록시는 즉시 백업 인스턴스에 연결합니다. 프록시는 15초마다 주 인스턴스에 대한 재시도를 수행하며, 주 인스턴스가 복구되는 즉시 백업 연결을 종료합니다.
- 구성 정보 가져오기 — HTTP 의 구성 정보 가져오기는 ‘주 서버 → 보조 서버’ 순서로 진행됩니다.
SDK를 Relay 프록시에 연결하기
SDK 클라이언트를 IBM Cloud 에 직접 연결하는 대신 Relay Proxy에 연결하려면:
- SDK 초기화 과정에서 ‘ IBM Cloud ’ 호스트명을 프록시의 호스트와 포트로 변경하십시오.
- Region, guid, API 키, collection_id 및 environment_id는 릴레이 프록시 구성에 전달된 값과 동일해야 합니다.
다른 SDK 코드 변경은 필요하지 않습니다.
Relay Proxy 사용을 시작하려면 App Configuration 지원팀에 문의해 주세요.