여는 말
안녕하세요. SK텔레콤 최준승입니다. 오늘은 비용 최적화 로드맵 9회차입니다. 이번 회차는 제목을 정하는데 시간이 오래 걸렸는데요. 고민 끝에 "FinOps 성숙 모델 5단계: Step-Up을 돕는 10가지 꿀팁들(부제)"로 제목을 지어봤습니다. 참고로 교육학에 나오는 매슬로우의 5단계 욕구 계층 이론을 읽다가 떠올린 제목인데요. FinOps 활동의 성숙도가 매슬로우의 이론처럼 명확히 구분되는 것은 아니지만 하위 단계가 어느 정도 밑받침되어야 상위 단계로 넘어갈 수 있는 특성은 비슷한 점이 있습니다. 오늘은 여러분이 FinOps 팀의 새로운 담당자가 되어 클라우드 비용을 최적화하는 여정을 함께 살펴보고, 중간중간 그 여정을 가속화할 수 있는 꿀팁 10가지를 섞어서 소개해 드리도록 하겠습니다. 이전 회차와 다르게 보조 그림 없이 텍스트 위주로 빠르게 전개하겠습니다.
1단계. 빌링 데이터 그대로 읽기
자, 여러분은 클라우드 운영팀의 엔지니어입니다. 담당 영역은 인프라 배포, 서비스 모니터링 및 장애 관리입니다. 클라우드 환경에서 비용이 얼마나 나오는지는 관심이 없습니다. 오로지 서비스가 정상적으로 배포되고 모든 모듈이 정상적으로 동작하고 있는 지에만 집중합니다.
시나브로 세월이 흘러 서비스의 규모도 점차 커지고 이를 관리하는 조직도 덩달아 확장되었습니다. 단위 팀의 역할은 더욱더 세분화되었고 이 과정에서 기존 운영팀 외에 플랫폼을 고도화하는 엔지니어링 팀과 비용을 관리하는 FinOps 팀이 새로 생겨났습니다. 여러분은 FinOps 팀에 새로 배치되었습니다. 클라우드 비용구조는 잘 모르는데 앞으로 역할을 잘할 수 있을지 걱정이네요. 새로운 세계로 적응이 필요한 시점입니다.
일단 여러분은 클라우드 비용 청구서부터 읽기 시작했습니다. 월별로 EC2 서비스 OOO$, S3 서비스 OOO$, RDS 서비스 OOO$ 형태로 개별 총액이 적혀 있네요. 이 정도 수준의 정보만으로는 어떤 항목에서 무엇을 얼마나 사용해서 비용이 나왔는지를 이해할 수 없었습니다. 좀 더 깊이 파보기로 합니다. 찾아보니 빌링 데이터라는 것이 있고 이 데이터를 다양한 기준으로 필터링해서 분석할 수 있다네요. 보름 정도 지나니 빌링 데이터의 각 필드가 뜻하는 바가 조금씩 보이기 시작했습니다.
한 달 정도 지나니 이제 빌링 데이터로부터 다양한 정보를 취할 수 있게 되었습니다. 세부 과금항목별로 저번달의 사용량(및 비용)이 어떻게 찍히고 있는지 볼 수 있게 되었습니다. 일별 비용 패턴을 분석해서 단위 비용이 늘어나고 있는지 줄어들고 있는지도 쉽게 관찰할 수 있었습니다.
이제 빌링 데이터 자체가 의미하는 바는 50% 이상 이해할 수 있게 되었습니다. 현재의 비용 패턴을 내가 원하는 항목별로 분석할 수 있게 되었습니다. 하지만 이것은 현황을 이해하는 수준일 뿐 뭔가 새로운 개선점을 기획하기에는 부족한 수준임을 깨달았습니다. 빌링 데이터에 등장하는 수많은 변수들을 어떻게 조절해야 할지를 검토하려면 과금 정책에 대한 더 깊은 이해가 필요한 상황입니다.
2단계. 현재 비용을 완벽하게 이해하기
현재 클라우드 환경의 비용을 복합적으로 이해하기 위해서는 다양한 영역의 지식이 필요합니다. 먼저 자원 관점에서 어떤 서비스에 어떤 단위 자원이 있고 어떤 형태로 얽혀있는지에 대한 인사이트가 필요한데요. 여러분은 이미 운영팀으로 일해왔다는 콘셉트기 때문에 이 부분은 비교적 잘 알고 있었습니다. 그리고 FinOps 팀으로 배치된 이후에 앞서 1단계 작업을 거쳐 빌링 데이터 자체의 의미도 상당 부분 이해할 수 있게 되었고요. 여기서 한 가지 영역만 더 결합되면 비용을 완벽하게 이해할 수 있을 것 같은데요. 그것이 무엇일까요? 네, 맞습니다. CSP가 수립해 놓은 과금 정책입니다. 여러분은 과금 정책을 학습하기 위해 공식 문서의 요금 페이지를 읽기 시작합니다. 요금 페이지는 보통 서비스별로 나눠져 있어서 자주 사용하는 서비스 20개 정도의 페이지를 정독하는데 보름 정도의 시간이 걸렸습니다.
한 달 정도 지나니 이제 서비스 자원을 어떻게 구성하면 과금 정책이라는 여과지를 거쳐 어떤 식으로 최종 비용이 발생하는지 이해할 수 있게 되었습니다. 과금 정책을 공부해 보니 각 서비스별로 과금하는 방식이 크게 다르다는 사실도 알게 되었습니다. 특히 서비스 자원이 새로 생성되거나 변경/삭제되는 시점이 있을 때마다 해당 시점 전후로 빌링 데이터를 비교해 보는 것이 큰 도움이 되었습니다. 다른 말로 내가 어떤 자원을 조정했을 때 향후 비용이 어떻게 달라질지에 대한 예측도 어느 정도 가능해진 셈입니다.
이제 비용 가시성 확보라는 1차 과제를 어느 정도 완수한 느낌이 듭니다. 서비스별로 어떤 비용 최적화 기법이 있는지도 찾아보기 시작했습니다. 현재 구성과 비교해 보니 어떤 부분은 최적화할만한 여지가 별로 없어 보이는 반면, 어떤 부분은 절반 이상의 비용을 줄일 수 있을 것 같습니다. 전에는 관심이 없어서 몰랐었는데 CSP에서는 이미 Cost Optimization과 관련된 다양한 추천 정보를 제공하고 있었네요. MSP가 제공하는 CMP에서도 비용 최적화 포인트를 다양하게 추천해 주고 있었습니다.
새해가 밝아 FinOps 팀의 KPI를 수립하기 시작했습니다. 올해 FinOps 팀의 KPI 중 하나는 클라우드 비용 10% 절감입니다. 물론 다른 가치(가용성, 보안, 성능 등)을 훼손하는 것은 안됩니다. 따라서 단순히 비용을 절감하는 관점이 아니라 클라우드를 활용하는 전반적인 성숙도를 개선하고 그 과정에서 비용도 함께 최적화할 수 있는 방법을 찾아보라고 합니다. 그런 방법 중에 어떤 것부터 시작하는 게 좋을지 고민해야 할 시점입니다.
3단계. 서비스 영향도 없이 최적화하기
여러분은 먼저 단위 서비스별 비용을 검토하기 시작했습니다. 아무래도 모수가 커야 최적화 시 절감비용도 커질 테니 전체 비용에서 차지하는 비율이 높은 서비스가 선순위 대상입니다. 몇 가지 서비스를 우선순위에 올려놓고 이번에는 해당 서비스 내에서 상세 과금 항목별로 분석하기 시작했습니다. 비용 패턴을 분석하고 어떤 리소스로부터 과금되고 있는지도 순서대로 확인을 마쳤습니다. 일부는 현재 사용 중이 아닌 불필요한 자원도 보이네요.
이제 어떤 영역부터 최적화를 시작해야 할지 결정해야 할 시점입니다. 아무래도 개선 활동이 처음이다 보니 워크 로드에 부정적인 영향을 주지 않았으면 좋겠는데요. 비용을 최적화하려면 어떤 자원의 변경이나 재구성이 필연적일 것이고, 그런 작업이 필수라면 서비스에 영향을 끼칠 확률을 배제할 수 없겠죠. 이때 같은 팀의 박 씨가 힌트를 주고 지나갑니다. 자원을 건드리지 않고도 비용을 줄일 수 있는 방법이 많다던데? 약정부터 한번 검토해 보는 게 어때?
박 씨가 알려준 대로 CSP는 약정 프로그램을 풍부하게 제공하고 있었습니다. 서비스별로 제공하는 약정 상품의 종류와 할인율이 달랐습니다. 약정이 On-Demand에 적용되지 않으면 그냥 버려진다는 사실도 알게 되었습니다. 현재 On-Demand의 사용량이 앞으로 어떻게 달라질지 모르니, 우선 몇몇 서비스를 기준으로 현재 On-Demand 사용량의 70%를 커버하도록 약정 물량을 계산해 놓았습니다. CSP나 MSP가 제공하는 약정 추천 기능도 보조 지표로 참고했습니다.
약정을 구매하는 과정은 어렵지 않았습니다. 특정 서비스에 약정을 구매하고 1개월 후에 월비용을 비교해 보았더니 지난달에 비해 약 20%의 비용이 줄어들었습니다. 앞으로도 On-Demand 사용량이 비슷하다면 절감 효과는 약정이 만료되는 시점까지 지속될 예정입니다. 서비스에 영향을 주지 않고 이렇게 쉽게 비용을 최적화할 수 있다니 놀라울 따름입니다. 이때 같은 팀의 정 씨가 또 힌트를 주고 지나갑니다. 어떤 서비스는 과금 방식만 살짝 바꿔서 비용을 줄이는 방법도 있다던데?
마침 Aurora 비용을 모니터링하던 중에 스토리지의 I/O 비용이 비정상적으로 높은 클러스터를 발견했습니다. 그리고 비용을 시뮬레이션 해본 후 해당 클러스터의 요금 옵션을 Standard에서 I/O-Optimized로 변경했습니다. 변경 과정에서 특이사항은 없었습니다. 클러스터 노드 비용과 스토리지 저장 비용은 약간 상승했지만 그 이상의 스토리지 I/O 비용이 줄어들면서 전체적인 Aurora 비용을 30%가량 절감할 수 있었습니다.
비용 최적화 활동을 방망이 깎는 일에 비유한다면 이제 가장 바깥쪽의 껍데기는 어느 정도 정리한 느낌입니다. 방망이의 코어에 가까이 가지 않고서는 더 이상의 개선 활동이 어려울 것 같은데요. 이제 실제 서비스 자원 단위로 조정 작업을 계획하고 상응하는 리스크를 짊어지면서 일을 진행해야 할 시점입니다. 순서는 어떻게 정해야 할까요? 상대적으로 쉽고, 기대 효과가 크며, 영향도가 적은 것부터 시작하면 됩니다.
4단계. 쉬운 영역부터 순차적으로 공략하기
이제 드디어 서비스 컴포넌트를 구성하는 자원까지 손을 대야 하는 시점이 왔습니다. 무엇을 가장 먼저 시작할까 고민하다가 마치 집을 청소하듯이 미사용 자원을 정리하는 작업부터 시작하기로 합니다. 클라우드 환경에 서비스를 처음 구축하고 4년 정도 되니 정체를 알 수 없는 자원들이 마구 섞여 있는데 어디에서부터 손을 대야 할지 모르겠습니다. 태그 정책도 최근에 수립한지라 태깅이 되어 있지 않은 자원도 많은 상황입니다.
각 서비스별로 미사용 자원을 판단하는 기준을 세우고, 해당 기준에 부합하는 자원들을 순차적으로 삭제하는 일에 착수했습니다. 1차 식별된 미사용 자원 목록은 위키에 공지하고 별도의 피드백이 없는 경우 1개월 후에 삭제를 진행하였습니다. 삭제 시 생길 수 있는 기타 이슈는 담당 임원이 책임지기로 했습니다. 노드에 붙어있지 않은 블록 스토리지나 NIC에 붙어있지 않은 IP 주소 자원부터 정리를 시작했습니다. 이어 불필요하거나 중복 데이터를 담고 있는 스토리지까지 정리하고 나니 월 8,300$가량의 비용을 줄일 수 있었습니다. 이후의 관리를 위해 태깅 정책을 강화하여, 특정 태그를 지정하지 않으면 자원을 생성하지 못하도록 강제하였습니다.
미사용 자원을 정리하는 작업 외에도 가성비가 좋은 과제들을 위주로 다양한 최적화 활동을 수행했습니다. 서비스 및 단위 자원별로 최근 사용률을 모니터링하여 노드의 Right-Sizing을 수행하기도 하고, 일부 데이터는 아카이빙 계층으로 이동하여 스토리지의 저장 비용을 낮췄습니다. 전체적인 구성의 틀을 바꾸지 않는 범위 내에서 적용 가능한 최적화 활동은 대부분 수행한 것 같습니다. 이 작업에 꼬박 4개월이 걸렸습니다. 이제 그다음엔 무엇을 해야 할까요?
5단계. 최적화 활동을 반복 설계하기
지금까지 많은 일들이 있었습니다. 우선 비용 가시성을 확보할 수 있게 되었고, 큰 영향도 없이 몇몇 최적화 과제를 완수했습니다. 연초 대비 월비용은 15~20%가량 줄어들었고 목표했던 10% 절감 목표는 이미 초과 달성한 상태입니다. 이제 남은 건 어려운 난이도의 과제들인데요. 일부는 애플리케이션 레벨의 튜닝이나 인프라 구성 변경을 동반해야 하는 작업들입니다. 단위 과제를 목록화하고 기술적 난이도와 함께 비용 기대효과를 종합적으로 고려하여 우선순위를 정했습니다. 하나당 보통 3-4개월이 소요되는 긴 호흡의 과제들입니다.
몇몇 우선 과제를 선정하여 1년간에 걸쳐 최적화 작업을 진행하였습니다. 특정 DB는 튜닝을 통해 쿼리 효율을 높여 자원 사용률을 낮췄습니다. DB 클러스터 스펙을 반으로 줄여 노드 비용을 40%가량 줄었습니다. 애플리케이션 레벨에서도 특정 자원을 길게 붙잡고 있는 로직을 수정하여 연관 서비스의 비용을 줄였습니다. 워크플로우를 병렬처리 방식으로 변경하고 투입되는 노드를 동적으로 구성하여 인프라 효율을 개선하였습니다. 불필요하게 나눠져 있던 클러스터를 통합하고 관리 포인트를 최소화하였습니다.
이 지난한 작업을 통해 월 비용을 10%가량 더 줄일 수 있었습니다. 다만 이 수준의 최적화 작업에는 오랜 시간과 유료 컨설팅, 그리고 조직간 광범위한 협업 등이 필요했습니다. 이 모든 투입 요소가 비용이었습니다. 물론 길게 보면 투자 대비 회수하는 금액이 더 크겠지만, 그 과정의 위험 비용을 포함하면 단기적으로는 쉽지 않은 여정이었습니다.
1년 반의 최적화 작업이 끝나고 기존 월비용의 25~30%의 금액이 최적화 과정에서 사라졌습니다. 정량적으로 측정되는 효과 외에도 전사적으로 엔지니어의 역량 수준도 크게 개선되었습니다. 어느덧 비용을 의식한 아키텍처링이 표준으로 자리 잡았고 그 과정에서 각종 절감 아이디어를 수집하고 협업하는 문화도 개선되었습니다. 클라우드 환경에 새로 구축되는 서비스들도 표준 최적화 지침에 맞게 비용 효율적으로 설계되었습니다.
마치며
정리하겠습니다. 오늘은 FinOps 성숙 모델 5단계를 시간순으로 살펴보았는데요. 사실 오늘 9회차 이야기는 1회차부터 8회차까지 다뤘던 내용의 요약본이었습니다. 같은 글감을 바탕으로 FinOps 담당자가 레벨 업 하는 과정을 시간순으로 재구성한 내용이었고요. 어찌 보면 제가 FinOps 바닥에서 겪었던 시행착오의 기억이기도 합니다.
다음 10회차는 비용 최적화 로드맵의 종점 회차입니다. 먼저 지난 1년간의 내용을 한번 쭉 되돌아보고요. 그동안 딱히 끼워 넣을 자리가 없어서 넣지 못했던 최적화 기법들도 언급해 보려고 합니다. 그리고 비용 최적화를 함에 있어 결국 무엇이 핵심인지를 최종 정리하고 마치도록 하겠습니다. 다음 회차에서 뵙겠습니다. 끝.
▶ 더 읽어보기
- 클라우드 비용 최적화 로드맵 #1 - 연재를 시작하며
- 클라우드 비용 최적화 로드맵 #2 - 비용을 자세히 보기 위한 준비
- 클라우드 비용 최적화 로드맵 #3 - 컴퓨팅의 단가를 최적화하는 법
- 클라우드 비용 최적화 로드맵 #4 - 스토리지의 단가를 최적화하는 법
- 클라우드 비용 최적화 로드맵 #5 - 네트워크의 단가를 최적화하는 법
- 클라우드 비용 최적화 로드맵 #6 - 컴퓨팅의 사용량을 최적화하는 법
- 클라우드 비용 최적화 로드맵 #7 - 스토리지의 사용량을 최적화하는 법
- 클라우드 비용 최적화 로드맵 #8 - 네트워크의 사용량을 최적화하는 법
▶ 최준승 님 / Cloud Architect 팀 / jsch@sk.com
'What's New' 카테고리의 다른 글
클라우드 비용 최적화 로드맵 #10 - 연재를 마치며 (1) | 2024.12.31 |
---|---|
클라우드 비용 최적화 로드맵 #8 - 네트워크의 사용량을 최적화하는 법 (0) | 2024.12.17 |
클라우드 비용 최적화 로드맵 #7 - 스토리지의 사용량을 최적화하는 법 (1) | 2024.12.11 |
클라우드 비용 최적화 로드맵 #6 - 컴퓨팅의 사용량을 최적화하는 법 (0) | 2024.10.17 |
클라우드 비용 최적화 로드맵 #5 - 네트워크의 단가를 최적화하는 법 (4) | 2024.10.10 |