이 자습서에서는 Azure App Configuration을 사용하여 Gin 웹 애플리케이션에서 동적 구성 업데이트를 구현하는 방법을 보여 줍니다. 이전 빠른 시작에서 도입된 웹앱을 기반으로 합니다.
필수 조건
빠른 시작 완료: Azure App Configuration을 사용하여 Gin 웹앱 만들기
App Configuration에서 데이터 다시 로드
appconfig.go
파일을 엽니다. 함수 내에서loadAzureAppConfiguration
함수의 새로 고침 기능을 활성화하도록options
를 업데이트합니다. Go 공급자는 선택한 키-값의 변경 내용을 감지할 때마다 전체 구성을 다시 로드합니다. 구성 변경 내용을 모니터링하는 방법에 대한 자세한 내용은 구성 새로 고침에 대한 모범 사례를 참조하세요.options := &azureappconfiguration.Options{ Selectors: []azureappconfiguration.Selector{ { KeyFilter: "Config.*", }, }, TrimKeyPrefixes: []string{"Config."}, RefreshOptions: azureappconfiguration.KeyValueRefreshOptions{ Enabled: true, }, }
팁 (조언)
Interval
속성을 설정하여RefreshOptions
의 구성 새로 고침 사이의 최소 시간을 지정할 수 있습니다. 이 예제에서는 기본값인 30초를 사용합니다. App Configuration 저장소에 대한 요청 수를 줄여야 하는 경우 더 높은 값으로 조정합니다.main.go
구성 업데이트에 대한 콜백 함수를 등록하도록 파일을 업데이트합니다.// Existing code // ... ... var config Config if err := provider.Unmarshal(&config, nil); err != nil { log.Fatalf("Failed to unmarshal configuration: %v", err) } // Register refresh callback provider.OnRefreshSuccess(func() { // Re-unmarshal the configuration err := provider.Unmarshal(&config, nil) if err != nil { log.Printf("Failed to unmarshal updated configuration: %s", err) return } })
구성 새로 고침 미들웨어를 추가합니다. 다음 코드를 사용하여
main.go
을 업데이트합니다.func configRefreshMiddleware(provider *azureappconfiguration.AzureAppConfiguration) gin.HandlerFunc { return func(c *gin.Context) { // Start refresh in a goroutine to avoid blocking the request go func() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := provider.Refresh(ctx); err != nil { log.Printf("Error refreshing configuration: %s", err) } }() c.Next() } }
구성 새로 고침 미들웨어를 사용합니다.
// Existing code // ... ... router := gin.Default() // Use the configuration refresh middleware router.Use(configRefreshMiddleware(provider)) // The rest of existing code //... ...
요청 기반 구성 새로 고침
구성 새로 고침은 웹앱에 들어오는 요청에 의해 트리거됩니다. 앱이 유휴 상태이면 새로 고침이 발생하지 않습니다. 앱이 활성화되면 구성 새로 고침 미들웨어가 azureappconfiguration.Options
에서 구성한 특정 키-값을 모니터링합니다. 미들웨어는 앱에 들어오는 요청이 있을 때마다 트리거됩니다. 그러나 미들웨어는 설정한 새로 고침 간격이 지나간 경우에만 App Configuration의 값을 확인하는 요청을 보냅니다.
- 변경 감지를 위해 App Configuration에 보낸 요청이 실패하면 앱은 캐시된 구성을 계속 사용합니다. 앱에 새로 들어오는 요청이 있는 경우 변경 내용을 확인하기 위한 새로운 시도가 주기적으로 이루어집니다.
- 구성 새로 고침은 앱의 들어오는 요청 처리에 대해 비동기식으로 수행됩니다. 새로 고침을 트리거한 들어오는 요청을 차단하거나 속도가 저하되지 않습니다. 새로 고침을 트리거한 요청은 업데이트된 구성 값을 얻지 못할 수도 있지만 후속 요청은 새 구성 값을 얻을 수 있습니다.
- 미들웨어가 트리거되도록 하려면 다른 미들웨어가 앱에서 건너뛰지 않도록 요청 파이프라인에서 구성 새로 고침 미들웨어를 최대한 빨리 사용합니다.
웹 애플리케이션 실행
이제 동적 구성 새로 고침을 설정했으므로 실행 중인 구성을 확인하도록 테스트해 보겠습니다.
애플리케이션을 실행합니다.
go run main.go
웹 브라우저를 열고 애플리케이션에 액세스하려면
http://localhost:8080
를 방문합니다. 웹 페이지는 다음과 같습니다.App Configuration 저장소로 이동하여 키 값을 업데이트합니다
Config.Message
.열쇠 가치 콘텐츠 형식 Config.Message Azure App Configuration의 Hello - 이제 라이브 업데이트가 제공됩니다! 비워 둡니다. 브라우저를 몇 번 새로 고치면 30초 내에 ConfigMap이 업데이트되면서 업데이트된 콘텐츠를 볼 수 있습니다.
자원을 정리하세요
이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.
중요합니다
리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.
- Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
- 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
- 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
- 리소스 그룹 삭제를 선택합니다.
- 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.
잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.