Azure 아키텍처, External Configuration Store pattern

눕눕·2025년 3월 19일

Design pattern on Azure

목록 보기
6/9

공통으로 사용하는 설정 파일!?

IT 솔루션을 관리하고 설계하다보면 설정 파일 같은 부분들에 대해 고민하게 되는 경우가 있다. 예를 들면 동일한 역할을 하는 VM을 여러대 운영한다고 할 때, 설정 값들을 바꿔야 하는 경우가 올 수도 있다. 물론 그런 경우는 드물지만 처음 설계할 때 고민을 조금 더 한다면 추후에 많은 작업을 동반하는 변경 작업에서 손쉽게 갈 수 있는 경우가 많다.

사용 사례들

VM or VMSS

VMSS 형태거나 VM을 따로 배포해서 사용하는 환경이라고 생각해보자.

간단하게 위와 같은 구조라고 하였을 때 각 VM들의 역할은 동일할 것이다. 뭐 포트를 따로 줘서 다른 역할을 줄 수도 있겠지만 일반적인 구조로 접근하자.

위와 같은 경우에 코드에서 사용하는 설정 파일 또는 설치형 application 에서 사용하는 config 파일들이 존재할 것이다. 만약 이러한 설정 파일들을 업데이트 해아하는 경우에는 어떻게 해야할까?

잠시 서비스를 내리거나 한땀한땀 backend에서 분리하고 바꾸고 다시 붙이는 작업을 진행해야 할 것이다.

위와 같은 VM이나 VMSS의 경우에는 아래와 같이 Storage Account를 이용한 mount를 추천한다.

Windows Server라면 Azure Files를 활용하고, Linux 기반이라면 Blub Fuse를 활용하여mount를 하여 사용할 수 있다.

공통된 storage를 마운트하여 설정 파일을 하나로 유지관리가 가능하다면 편하게 변경을 할 수 있다.

AKS

AKS에서는 기본적으로 configmap 과 secret이라는 오브젝트가 있으며 많은 사람들이 활용하고 있다.

단, AKS 또한 여러 경우에 의해 다양한 external storage를 활용한다.

특히 여기서도 Storage Account가 활용이 많이 되는데 주로 Blob Fuse가 사용된다. 현재 내가 진행하고 있는 Project 또한 많이 사용하고 있으며 로직들이 돌아가는 pod 뿐만아니라 kubernetes 위에서 구동하는 opensource 리소스들도 external storage라는 선택지가 있다면 모두 활용하고 있다.

현재 kubernetes에 올려서 사용하고 있는 opensource는 아래와 같으며 붉은색으로 표시한 앱들은 external storage를 활용하고 있는 opensource 이다.

  • Grafana: external storage로 postgresql을 사용하고 있다. grafana의 알람 기능을 사용하였을 때 2중화를 하였는데 2중화시 외부 저장공간에 설정 값들을 공유해야 제대로 사용할 수 있다는 결론이 나와 작업을 진행했다.
  • Grafana Alloy: 이전 grafana agent의 대용으로 kubernetes event 로그나 control plain log들을 loki를 통해 blob storage로 넣고 있다.
  • Prometheus: kubernetes 메트릭 로그 또한 pv를 azure blob fuse로 붙여서 바로 저장하여 사용하고 있다.
  • Promtail: loki gateway로 바로 채집한 로그들을 보내게 되어있다.
  • Loki: 받은 데이터들을 전부 연결된 azure blob fuse에 저장하고 있다.

위처럼 적용된 opensource들 중 몇가지 예제를 보자면, 아래와 같이 helm에서 설정하여 손쉽게 사용할 수 있다.

Grafana

Prometheus

Loki

config 전용 Azure 리소스

Config 전용 Azure 리소스가 Azure에는 존재한다.

App Configuration이라는 이름을 가진 리소스이다. 아래와 같이 config 미리 만들고 관리할 수 있으며 따로 storage에 접근하지 않고 편리하게 관리할 수 있는 것이 장점이다.

또한 아래와 같이 public access를 제한하고 private endpoint를 통한 접근만 허용할 수도 있다. 이는 nsg로 컨트롤도 가능하다는 부분이며 우리가 설정하는 이 값들의 보안을 높일수 있다는 뜻이다.

만약 인프라 관리자, 또는 api를 활용하여 config 값들을 변경하는 것이 더욱 편하게 느껴지는 개발자들과 일을 하고 있다면 충분히 활용을 고려해볼만한 좋은 리소스다. 물론 config 값을 컨테이너 혹은 VM안에 넣고 쓰는 방법이 가장 문제가 없어 보이긴한다.

정리

처음 설계 단계에서 외부 저장공간에 config 값을 넣어놓고 하나로 컨트롤하게 되면 관리의 측면 또는 추후 변경 또는 업그레이드 관점에서도 굉장히 많은 이점을 가지고 갈 수 있다. 하지만 너무 과한 아키텍처는 복잡성만 올리는 문제가 항상 존재하듯 현재 프로젝트에 맞는 방법을 고르는 것이 가장 중요하다.

profile
n년차 눕눕

0개의 댓글