최적화된 인스턴스 추천을 위한 Rightsizing Recommendations 시스템 개발 여정

Nov.14.2024 이연수

AWS Culture Data Infra

우아한형제들의 클라우드 인프라가 빠르게 성장함에 따라, 효율적인 비용 관리는 중요한 과제가 되었습니다. 이를 해결하기 위해, 팀은 인스턴스 비용 최적화를 목표로 Rightsizing Recommendations 시스템을 개발했습니다. 이 시스템은 클라우드 리소스 사용량을 분석하여 최적의 인스턴스 타입을 추천하고, 비용 효율성을 향상하는 데 중점을 두고 있습니다.
이 글에서는 Rightsizing Recommendations 시스템을 개발하게 된 배경과 시스템 설계 과정, 적용 방법과 이를 통해 얻은 성과를 소개해드립니다. 클라우드 인프라 관리 경험이 있거나 비용 최적화 및 리소스 관리에 관심이 있는 SRE 및 DevOps 엔지니어 분들께 도움이 되길 바랍니다.

클라우드 비용 최적화의 필요성 제기

우아한형제들은 최근 몇년동안 빠르게 성장했고 이 영향으로 클라우드 인프라 사용량 또한 급격히 증가했습니다. 이에 따라, 현재 사용 중인 리소스들이 효율적으로 관리되고 있는지, 그리고 추가적인 최적화 가능성이 있는지를 검토하여 IT 비용 효율성을 높여야 한다는 필요성이 제기되었습니다.

비효율적인 리소스 사용 발견

팀에서는 사내 모니터링 시스템인 우아캣 시스템으로 수집되는 메트릭 데이터와 AWS Cost Explorer와 같은 비용 분석 도구를 활용하여 전체적인 비용 현황을 살펴봤고 그 결과, 비용 절감의 가능성을 볼 수 있었습니다. 당시 분석한 데이터에 따르면, 운영환경 인스턴스 중 약 1,000대 이상의 CPU 사용량이 최대 30% 미만에 머물렀고 이러한 현상은 베타 환경에서도 나타났습니다. 이는 불필요한 비용 낭비로 이어질 수 있었기 때문에 최적화의 필요성을 생각하게 되었습니다.
하지만 각 서비스의 고유한 특성과 수많은 배포 단위를 고려할 때, 모든 인스턴스를 일괄적으로 다운사이징하는 것은 상당한 위험을 수반했습니다. 특히, 트래픽이 급증하는 이벤트 기간이나 새로운 기능을 출시하는 시점에는 인스턴스 리소스가 충분하지 않아 성능 저하가 발생할 수 있는 가능성도 있었기에 신중한 접근이 필요했습니다.
따라서, 단순히 비용을 줄이는 것에 그치지 않고 서비스의 안정성과 성능을 유지하면서도 효율적인 리소스 사용 방안을 찾는 것이 팀의 과제로 떠올랐습니다. 이와 같은 배경에서 팀은 지속적인 최적화를 목표로 하는 프로젝트를 시작하게 되었습니다.

자체 Rightsizing Recommendations 시스템 개발

먼저, 인스턴스별 최적의 타입을 추천하는 AWS Compute Optimizer와 같은 서비스 이용을 검토했지만, 몇 가지 중요한 한계가 있었습니다. 메트릭 조회 기간에 제한이 있었고, 메모리 모니터링을 위해 별도의 에이전트를 추가 설치해야 했으며, 우아한형제들이 운영하는 서비스 특성상 기능별로 구분된 특정 단위로 인스턴스를 배포하는 구조에 맞춰 커스터마이징하기 어려웠습니다. 이러한 제약 사항들은 자체 솔루션 개발의 필요성을 느끼게 했습니다. 이에 따라 Rightsizing Recommendations 시스템 개발을 본격적으로 착수하게 되었습니다.

알고리즘 개발로 프로젝트 시작

이 프로젝트의 첫 단계는 효과적인 추천 알고리즘 개발이었습니다. 우아한형제들은 서비스(Service)라는 큰 단위 아래에 각 기능별로 롤(Role)이라는 개념을 두고, 일반적으로 롤 단위로 배포가 이루어집니다. 이때, 동일한 롤 내 인스턴스들은 동일한 타입을 사용하는 경우가 많기 때문에, 롤 단위로 메트릭을 조회하면 각 롤별 사용하는 인스턴스 타입의 최대 사용량을 손쉽게 파악할 수 있었습니다.
여러 접근 방안을 검토한 결과, 일정 기간 동안의 CPU와 메모리 사용 데이터를 분석하여 각 인스턴스의 최대 사용량을 산출하고, 여기에 버퍼를 더해 최적의 인스턴스 타입을 추천하는 방식을 채택했습니다. 이렇게 함으로써 각 서비스의 특성을 고려한 안정적인 리소스 최적화를 가능하게 했습니다.

버퍼의 중요성: 버퍼는 예상치 못한 트래픽 증가나 리소스 사용량의 급변에 대비하는 설정. 필요에 따라 이 버퍼 비율을 조정할 수 있도록 설계하여 유연성을 높임.

A 롤의 인스턴스 추천 예시 (검은색 칸은 최근 약 2주간의 최대 사용량, 회색은 버퍼)

A라는 롤이 현재 c6g.xlarge 인스턴스 타입을 사용하고 있다고 가정해 보겠습니다. 최근 2주 동안의 CPU 및 메모리 최대 사용량이 각각 1.3코어와 3GB였을 때, 이 최대 사용량에 20%(예시: AWS Compute Optimizer의 디폴트 설정과 동일)의 버퍼를 추가하여 최적화된 인스턴스 타입을 추천하게 됩니다. 추천 목록에는 동일한 인스턴스 패밀리뿐만 아니라 다른 패밀리에서도 적합한 타입이 포함됩니다.
예를 들어 c6g.large(컴퓨팅 성능에 최적화된 타입)로 변경할 경우 약 50%의 비용 절감이 가능하며, m6g.large(메모리 사용량이 많은 작업에 적합한 타입)로 변경할 경우에는 약 38%의 비용 절감 효과를 기대할 수 있습니다. 메모리 사용량이 늘어날 가능성이 있다면 m6g.large 타입이 더 적합하고, 그렇지 않다면 c6g.large가 더 나은 선택이 될 수 있습니다. 이처럼 앞으로의 리소스 사용 계획과 인스턴스 타입별 리소스 특성을 고려해 다양한 선택지를 제공할 수 있도록 설계되었습니다.

효율적 적용과 예외 처리를 위한 프로세스 정립

알고리즘 개발은 말 그대로 시작에 불과했습니다. 실질적인 비용 절감을 이루기 위해서는 추천 사항이 실제 환경에 적용되어야 했고, 이를 위해 실제 배포를 진행하는 각 서비스 담당 엔지니어들과의 긴밀한 협력이 필수적이었습니다. 사내 커뮤니케이션 도구인 Slack을 활용하여 알림 시스템을 구축함으로써, 추천된 인스턴스 목록을 서비스 팀에 전달하고 담당자들이 이를 검토하여 작업을 진행할 수 있는 체계를 마련했습니다.

추천 알람 예시

위 알람을 예시로 구체적인 프로세스를 설명하자면, 추천 데이터가 생성되면 자동으로 해당 팀이 멘션된 Slack 메시지가 발송됩니다. 메시지에는 서비스 및 롤 정보, 담당 팀 이름, 추천된 인스턴스의 최근 리소스 사용량(사용률), 그리고 추천된 인스턴스에 대한 상세 내용이 포함됩니다. 더불어, 추천 인스턴스 타입 외에도 현재 인스턴스보다 저렴한 여러 옵션을 함께 제시하여, 서비스 담당자가 여러 옵션를 비교해 보고 최적의 결정을 내릴 수 있도록 지원했습니다. 이를 통해 각 서비스 팀이 직접 검토 후 결정할 수 있어, 비용 절감과 서비스 안정성을 균형 있게 고려할 수 있었습니다.

작업 티켓(지라) 생성에 필요한 모달 및 생성 된 티켓 정보

추천 알림에서 원하는 인스턴스 타입의 선택 버튼을 클릭하면 자동으로 JIRA 티켓을 생성하는 JIRA 티켓 생성이라는 창이 나타납니다. 이 창에서는 작업자와 작업 예상일을 선택할 수 있으며, 필요한 데이터를 선택 후 생성 버튼을 클릭하면 바로 작업 티켓을 생성할 수 있습니다. 생성된 티켓에는 알림에 표시된 정보가 포함되어 있어, 담당자가 필요한 내용을 한눈에 확인할 수 있습니다. 또한 추천된 인스턴스와 관련된 정보가 자동으로 할당된 담당자에게 전달되어, 작업 내용을 쉽게 확인하고 관리할 수 있습니다.

예외처리에 필요한 모달 및 처리 후 발송되는 메시지

추천이 적용되지 않아야 할 경우, 별도의 사유를 입력하여 예외 처리할 수 있는 기능도 추가했습니다. 이를 통해 필요 시 유연하게 대응할 수 있는 체계를 마련했습니다. 이러한 프로세스를 기반으로 시스템을 릴리스하게 되었습니다.

릴리스 이후 발견된 도전 과제 및 개선

릴리스 이후 추천 과정에서 몇 가지 도전 과제가 나타났습니다. 주로 인적 리소스 투입이 필요한 부분으로 추천이 채택되지 않거나 예외 처리가 되지 않은 경우를 확인하여 해당 팀에 요청해야 하는 부분, 매주 작업 진행 상황과 절감 비용을 확인하기 위해 작업 내역을 수동으로 점검해야 하는 부분 등이 있었습니다. 이처럼 수동 작업이 필요한 단계들이 있어 릴리스 이후에도 인적 리소스가 지속적으로 투입되었습니다. 특히, 진행되지 않은 서비스와 예외 처리된 내역을 파악하거나 추천된 인스턴스가 정상적으로 교체되었는지 추적하는 데 매주 수 시간이 소요되었습니다. 이러한 비효율성을 해결하기 위해 자동화의 필요성이 더욱 강조되었습니다.

자동화된 처리 요청 메시지와 위클리 리포트(요약)

이를 개선하기 위해, 일정 기간 동안 추천이 처리되지 않으면 담당자에게 자동으로 알림이 전송되는 처리 요청 메시지 전송 시스템을 구축했습니다. 또한, 변경된 인스턴스의 메트릭을 지속적으로 모니터링하여 실제 비용 절감 효과를 추적할 수 있는 위클리 리포트 기능도 추가했습니다. 이를 통해 정기적으로 투입되는 인적 리소스를 효율적으로 줄이고, 지속 가능한 관리 체계를 구축할 수 있었습니다.

성과 및 앞으로의 계획

현재 대부분의 추천 및 처리 프로세스가 자동화되어 일상적인 인적 리소스 투입이 거의 필요하지 않은 상태입니다. 이를 통해 전사 인스턴스 비용 최적화가 지속적으로 이루어지며, 지난 4월 릴리스 이후 7개월 동안 수억 원에 달하는 비용 절감 효과를 거두었습니다. 또한, 시스템 유지에 필요한 인프라 비용도 월 15만 원 수준으로 최소화하여 높은 효율을 유지하고 있습니다. 이러한 성과는 새로운 시스템을 긍정적으로 검토해 준 우아한형제들의 협력적인 문화 덕분에 가능했습니다. 각 서비스 담당 엔지니어에게 다소 관리 부담이 늘어나기도 했지만, 비용 최적화라는 공동 목표 아래 적극적인 협조를 받을 수 있었습니다.
앞으로도 팀은 최적화 기회를 지속적으로 발굴하며, 더 효율적인 자원 활용 방안을 모색해 우아한형제들의 인프라 효율성을 더욱 높여 나갈 계획입니다. 마지막으로, 이 글을 읽고 궁금한 사항이 있거나 논의하고 싶은 부분이 있으시다면 댓글로 남겨주세요.