IaC 도입으로 인프라 관리 자동화 및 AI 연동 성공

by DD
3시간 전
조회수 4

기존 인프라 관리 방식의 비효율성 극복을 위해 코드형 인프라(IaC) 도입 결정

OpenTofu와 Terragrunt를 활용해 기존 리소스(VM, LB, DNS 등)를 코드로 전환하고 GitOps 워크플로 구축

Chrome 확장 프로그램과 AI 에이전트를 활용해 인프라 변경 자동화 및 셀프서비스 환경 조성

IaC 도입을 위한 마이그레이션 전략 및 자동화

기존에 분산되어 관리되던 인프라 리소스(VM, LB, DNS, 쿠버네티스 리소스, 모니터링 설정 등)를 코드형 인프라(IaC) 체계로 통합하기 위해 OpenTofu와 Terragrunt를 핵심 도구로 선택했습니다. 특히, 운영 중인 약 1,500개의 리소스를 안전하게 이전하기 위해 import 과정을 자동화하는 스크립트를 개발하고, 이를 두 단계로 나누어 점진적으로 적용했습니다. 첫 단계에서는 단일 서비스에 도구와 프로세스를 시범 적용하여 파이프라인을 준비하고, 두 번째 단계에서는 검증된 모듈과 스크립트를 활용해 나머지 서비스로 빠르게 확산하는 전략을 채택했습니다. 이 과정에서 코드, state 파일, 실제 인프라 간의 상태 불일치 문제를 해결하기 위한 정규화 과정과 리소스별 특성을 반영한 차별화된 import 전략이 중요했습니다.

리소스별 import 전략 및 상태 동기화 방안

기존 인프라를 IaC로 이전하는 과정에서 가장 큰 허들은 운영 중인 리소스의 상태를 코드와 동기화하는 것이었습니다. OpenTofu의 import 기능만으로는 대규모 리소스를 수동으로 관리하기 어려웠기에, 자동화된 import 스크립트를 설계했습니다. 이 스크립트는 리소스 조회, 코드 변환, state 연결, plan 검증의 흐름을 따랐으며, 특히 코드와 state, 실제 리소스 간의 값 불일치 문제(예: 네트워크 ID, 이미지 ID 표현 방식 차이)를 해결하기 위한 정규화 과정을 추가했습니다. 또한, VM, LB, DNS, 쿠버네티스, IMON 알림 리소스 등 각 유형별 특성과 의존 관계를 고려하여 리소스별 맞춤 import 전략을 수립했습니다. 예를 들어, LB는 리스너, 풀 등 연관 리소스를 함께 고려하고, IMON 알림은 계층 구조를 반영한 디렉토리 구조를 설계하여 관리 효율성을 높였습니다.

GitOps 기반 워크플로 구축 및 문화 전파

IaC 도입의 핵심은 단순히 도구를 넘어 GitOps라는 문화와 프로세스를 정착시키는 것이었습니다. 모든 인프라 변경은 PR 리뷰와 CI/CD 파이프라인을 거치도록 표준화하여, 변경 이력의 투명성, 재현 가능성, 리뷰 가능성을 확보했습니다. 특히, HCL 작성에 익숙하지 않은 팀원들을 위해 Chrome 확장 프로그램을 개발하여 웹 UI에서 코드를 생성하고 PR로 연결하는 방식을 도입했습니다. 또한, SRE 팀의 'Opentalk' 세션과 블로그 포스팅을 통해 IaC의 필요성과 구조를 공유하며 기술적 지식의 확산과 팀 간 협업을 촉진했습니다. 이러한 노력은 인프라 변경에 대한 진입 장벽을 낮추고, 팀원들이 자연스럽게 IaC 워크플로에 참여하도록 유도했습니다.

AI 에이전트를 활용한 인프라 관리 자동화 및 셀프서비스

IaC로 관리되는 인프라 코드를 AI 에이전트가 읽고 이해할 수 있다는 점에 착안하여, 자연어 요청 기반의 인프라 변경 자동화를 구현했습니다. Slack에서 사용자가 서버 증설과 같은 요청을 자연어로 입력하면, AI 에이전트가 기존 코드 패턴을 분석하여 Terragrunt 코드를 생성하고 PR을 오픈합니다. 이 과정에서 Plan 결과가 Slack으로 공유되어 사람이 리뷰하고 승인하면 자동으로 배포되는 워크플로를 구축했습니다. 또한, 모니터링 알림을 트리거로 AI 에이전트가 자동으로 스케일 아웃 코드를 생성하고 PR을 오픈하는 시나리오를 통해, 수동 대응 시간을 획기적으로 단축하고 운영 효율성을 극대화했습니다. 이는 데이터 미저장 정책(Zero-Retention Policy)을 준수하며 안전하게 인프라 변경을 자동화하는 기반이 됩니다.

Drift Check와 모니터링 코드화를 통한 운영 안정성 강화

IaC 도입 후, 코드와 실제 인프라 상태 간의 불일치(Drift)를 감지하는 Drift Check 프로세스를 매일 자동 실행하여 운영 안정성을 강화했습니다. 콘솔에서의 수동 변경이 발생하면 즉시 Slack으로 알림을 보내 서비스 오픈 전 문제를 예방하고, 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 각 서비스별 변경 이력을 투명하게 관리합니다. 또한, 모니터링 알림 설정까지 코드로 관리함으로써 임계치 변경 시 PR 하나로 여러 알림을 일괄 수정하고, 변경 이유를 커밋 메시지로 명확히 기록하여 추적성을 높였습니다. 이는 인프라뿐만 아니라 모니터링까지 코드화하여 서비스 운영 형상 전체를 단일 저장소에서 관리 가능하게 만든 중요한 변화입니다.

코드형 인프라(IaC)로 자동화에서 AI까지: OpenTofu와 ChatOps 도입기