Offcanvas

CIO / How To / 개발자 / 데브옵스 / 리더십|조직관리 / 클라우드

개발자가 알아야 할 클라우드 비용 절감 팁 12가지

2022.06.08 Peter Wayner  |  InfoWorld
애플리케이션이 애용되는 모습을 보는 것만큼 개발진의 사기를 높이는 것도 드물다. 하지만 월간 클라우드 청구서가 도착할 때 분위기가 어두워질 수 있다. 

일부 개발자는 컴퓨팅 비용의 관리를 데브옵스 팀의 책임이라고 본다. 소프트웨어를 코딩하고 배포하지만 비용은 걱정하지 않는 것이다. 그러나 이는 잘못된 생각이다.

현명한 개발자는 자신의 코딩 산출물이 회사의 재무에 큰 차이를 만든다는 사실을 알고 있다. 용량이 큰 코드는 더 느리고 실행할 때 더 많은 클라우드 리소스를 요구한다. 우수한 알고리즘을 선택하고 간결한 코드를 작성하는 일은 단순히 속도 이상의 의미를 가진다. 적절히 쓰여진 코드는 실행하는 데 비용이 덜 든다.

그러나 개발자가 이를 줄곧 염두하기란 어렵다. 자신의 기기 상에서 코드를 작성하기는 쉽다. 기기를 구매할 때 RAM과 추가 디스크 공간도 같이 결제됐다. 디스크 공간이 2 테라바이트라면 코드가 얼마나 많은 공간을 소비하는 지 알아차리지 못할 수 있다. 새 알고리즘이 실행되는 데 2배 더 오랜 시간이 걸리더라도 자신의 기기에는 아무 영향도 없을 것이다. 몇 밀리 초가 더 걸린다고 해도 누가 이를 감지할 수 있겠는가? 그러나 연산을 2배로 늘리면 클라우드 요금만큼은 확실히 더 늘어난다.

클라우드 개발자는 코드를 작성할 때 현명한 결정을 내릴 힘이 자신에게 있음을 알고 있다. 이는 프로파일러를 실행해 느린 부분을 식별하거나 불필요한 데이터 스토리지를 회피하며 메모리 풋프린트를 줄이는 것처럼 단순할 수 있다. 

코드를 간소화시켜 빠르면서도 비용을 줄이게 하는 12가지 방법을 소개한다. 
 
Image Credit : Getty Images Bank

더 빠른 코드의 작성 
대다수의 개발자는 코드를 최적화하는 데 그렇게 많은 시간을 쓰지 않는다. 자신의 노트북에서 순식간에 실행되기 때문이다. 시간이 지나면서 20%, 30%, 심지어 300% 더 느려지는 것을 실감하지 못한다. 프로그램은 여전히 빠르게 반응하는 것처럼 보인다. 

그러나 서버 상에서 수백만 회 발생할 때 차이가 누적된다. 세심한 프로파일링은 느린 부분을 파악할 수 있다. 이들을 다시 작성하면 애플리케이션에 필요한 인스턴스의 수를 줄일 수 있다.

RAM 풋프린트 줄이기 
RAM 사용량은 클라우드 인스턴스 가격에서 중요한 변수이다. 대개 RAM을 2배 늘리면 비용도 2배가 늘어난다. 데이터를 메모리에 유지하지 않는다면 RAM 풋프린트를 줄일 수 있다. 몇몇 스트리밍 알고리즘, 예를 들어 자바 스트림(Stream) 클래스는 대형 파일을 메모리로 로드 하지 않은 채 작업할 수 있도록 설계된다. 아파치 데이터스케치스(Apache DataSketches) 프로젝트는 모든 메모리를 점유하지 않으면서 복잡한 빅데이터 통계에 대한 근사값을 생성한다. 

신중한 RAM 소비는 알고리즘의 속도를 높이는 부가적인 혜택도 있다. 때때로 운영체제는 가상 메모리를 이용해 데이터를 디스크로 이동시킬 것이다. 이는 충돌을 방지면서도 프로그램의 속도를 극적으로 낮출 수 있다.

저해상도 이미지 및 영상 이용 
저해상도 이미지 및 영상을 사용하면 여러 면에서 유리하다. 첫째, 저장 비용이 저렴하다. 둘째, 데이터 반출 요금이 더 적다. 셋째, 애플리케이션이 사용자에게 더 빠르게 느껴진다.

모든 정적 이미지는 처음부터 최소화되어야 한다. 그런데 어느 정도 최소화할 것인지는 까다로운 결정일 수 있다. 일정 수준에 이르면 사용자에게 명확할 정도로 시각 품질이 저하되기 때문이다. 적절한 선택은 일부 프로그래머가 내릴 수 없는 디자인 결정이다. 

업로드 된 이미지를 사용하는 일부 애플리케이션은 이미지를 수신한 후 작은 썸네일과 해상도를 줄인 버전을 생성할 수 있다. 이미지매직(ImageMagik) 같은 툴킷과 웹P(WebP) 같은 포맷이 이를 위해 개발됐다. 

불필요한 데이터 버리기 
다수의 개발자가 미래에 필요할 지 모른다면서 정보를 잔뜩 저장한다. 끝없는 열로 표를 채우고 행을 삭제하는 법이 없다. 하드웨어를 소유하고 있고, 디스크 드라이브 용량이 크다면 아무 문제가 없다. 그러나 클라우드는 모든 것에 요금을 부과한다. 미래에 이들 값이 정말로 필요할까? 사용자가 그렇게 많은 디테일을 원하기는 할까? 오래된 데이터를 버린다면 데이터 스토리지 및 반출 비용을 절감할 수 있다.

디스크 스토리지 제한하기 
클라우드 인스턴스 상에서 로컬 디스크를 사용하면 위험할 뿐 아니라 값비쌀 수 있다. 로컬 디스크 공간은 운영체제를 효율적으로 실행할 수 있을 정도로 빠르게 설계된다. 대다수의 개발자는 1테라바이트 또는 그 이상의 스토리지를 가진 개인 기기 상에서 코드를 생성한다.

하지만 클라우드 기기 스토리지는 저렴하지도 않고 쉽게 이용하기도 어렵다. 흔히 클라우드는 크기에 따라 스토리지에 직접 과금 한다. 따라서 가급적 적은 스토리지를 사용하는 것이 최선이다. 애플리케이션이 생성하는 임시 파일뿐 아니라 필수 시스템 라이브러리, 소프트웨어 패키지를 최소화할 방법을 고려할 필요가 있다.

로그 파일 정리 
로그 파일은 개발 중 문제를 식별하고 소프트웨어를 디버깅하는 데 매우 유용하다. 그러나 일단 코드가 실무에 투입되면 이를 모두 유지할 필요가 없다. 과잉 정보는 언제나 로컬 디스크나 객체 스토리지를 적체시킨다. 로깅 시스템을 설계할 때 로그를 빈번히 삭제하도록 설정해야 한다. 로그4j(Log4j) 같은 여러 로그 패키지가 로그를 최소의 수로 유지하고 주기적으로 삭제하도록 설정될 수 있다. 

서버리스를 지향  
서버리스 아키텍처 요금제는 코드가 실행 중일 때만 과금 한다. 따라서 로드가 간헐적이라면 요금을 크게 줄일 수 있다. 사용자가 계속 있는 애플리케이션조차 정지 시간이 생각보다 많다.

다수의 서버리스 요금제는 최소한의 RAM을 소비하는 신중한 코딩과 매우 빠른 속도에 유리한 구조이다. 과금 방식은 반응 시간을 밀리 초로 계산하고 프로세서가 점유된 시간만 요금이 청구된다. 개발자라면 반응 시간을 직접 추적할 수 있고 코드 변경이 주는 영향을 파악할 수 있다.

서비리스 접근법은 작거나 실험적인 프로젝트에 이상적이고, 흔히 요금은 월간 몇 센트에 불과하다. 애플리케이션이 일정한 기능을 간헐적으로 실행한다면 서버리스로 가는 것이 합리적이다. 

오래된 데이터 이동
데이터가 오래되면 사용 빈도가 줄어든다. 그렇다면 애플리케이션이 오래된 데이터를 비용이 저렴한 위치로 이동시키도록 설정할 수 있다. 몇몇 클라우드는 이른바 ‘콜드 스토리지(cold storage)’에 대해 훨씬 낮은 비용을 부과한다. 콜드 스토리지는 정보를 전달할 때 수분, 심지어 수시간이 걸릴 수 있다. 

와사비(Wasabi), 백블레이즈(Backblaze) 같은 클라우드는 아마존 S3 객체에 대한 보존 스토리지를 전문으로 하고, 대형 클라우드보다 극히 낮은 요금을 부과한다. 몇몇 사례에서 데이터 반출에 요금을 부과하지 않기도 한다. 수요가 더 이상 높지 않을 때 데이터를 치운다면 지극히 비용 효과적일 수 있다. 

CSS 레이아웃을 단순화 
몇몇 프레임워크에 의해 생성된 HTML 태그의 경우 레이아웃이 우스꽝스러워질 수 있다. 처음부터 끝까지 DIV 태그 안에 DIV 태그가 있는 형태이다. 이를 생성하고 전달하는 데는 돈이 든다. 필자가 알고 있는 한 웹 디자이너는 CSS를 신중히 사용하며 레이아웃을 단순화함으로써 네트워크 요금을 30% 줄였다고 전한 바 있다.

정적인 사이트를 제작 
리액트(React) 같은 몇몇 프레임워크는 특히 서버측 렌더링 등의 기능을 사용할 때 상당한 컴퓨팅 능력을 요구한다. 이들 코드는 월간 클라우드 요금을 증가시킨다. 이에 반대되는 접근법은 글자 그대로 캐시로부터 제공되는 불변의 HTML, CSS, 자바스크립트로 이루어진 정적인 사이트를 제작하는 것이다. 콘텐츠 전송 네트워크(CDN)를 이용하면 캐시를 사용자에게 가까이 이동시킴으로써 전송 속도를 훨씬 더 높일 수 있다.

여러 프레임워크가 이 정적인 사이트 철학을 수용한다. 제킬(Jekyll), 휴고(Hugo), 그리드섬(Gridsome), 펠리칸(Pelican)은 전체 콘텐츠를 일련의 작고 변치 않는 파일 안으로 포장하는 대표적인 툴들이다. AJAX 호출에 의해 페이지의 커스터마이징은 여전히 가능하다. 그러나 서버 상에서 부하를 별로 발생시키지 않는다.

연산 및 스토리지를 외부화 
브라우저들이 한층 강력해짐에 따라 몇몇 프레임워크는 연산을 클라이언트로 직접 이동시키는 것을 더 단순하게 만들었다. 우수한 자바스크립트 또는 웹어셈블리 코드는 더욱 많은 로드를 사용자의 기기로 이동시켜 클라우드 서버의 로드를 줄일 수 있다. 일부 개발자는 클라우드 계층을 약간의 인증용 비즈니스 로직을 가진 데이터베이스 정도로 축소하고 있다. 정적인 HTML과 서버측 포스트그레SQL 버전으로 (JSON을 출력하는 절차가 임베드 되어 있음) 모든 것을 운영하는 사례도 있다. 

또한 브라우저는 정보를 로컬로 저장하기 위한 정교한 선택지, 예를 들어 HTML 웹 스토리지(HTML Web Storage) 표준, W3C 인덱스드 데이터베이스 API(W3C Indexed Database API) 등을 가지고 있다. 이는 더 이상 짧은 문자열과 쿠키가 아니다. 이 데이터는 인터넷을 통해 이동하지 않기 때문에 더 신속히 이용할 수 있고, 사용자는 데이터가 중앙의 해킹 가능한 데이터베이스에 저장되지 않음을 알기 때문에 안심한다. 사용자의 기기에 무료로 상주시킬 수 있는데 굳이 데이터 스토리지 및 반출을 위해 돈을 쓸 필요가 있을까? 

비용 엔지니어를 임명 
일부 개발자는 데이터베이스 관리를 전문으로 한다. 그런가 하면 멋진 전면 디자인으로 아름다운 첫인상을 만드는 것을 좋아하는 개발자도 있다. 이제는 클라우드 비용이 너무 유동적이기 때문에 코드 비용과 효율을 관리할 ‘비용 엔지니어’를 공식적으로 임명하는 팀도 있다. 

비용 엔지니어의 책임은 애플리케이션 코드가 더 깔끔하고 더 빠르고 더 가볍고 결과적으로 더 저렴하게 실행되도록 하는 것이다. 이렇듯 책임으로 할당함으로써 개발 팀의 역할 및 책임의 일부로서 코드 비용을 관리하는 작업의 중요성을 강조할 수 있다. 

* Peter Wayner는 오픈소스 소프트웨어, 자율주행 차량, 개인정보 보호 강화, 디지털 트랜잭션, 스테가노그래피(steganography) 등 다양한 주제에 관한 16권 이상의 책을 저술한 저자다. ciokr@idg.co.kr
Sponsored
추천 테크라이브러리

회사명:한국IDG 제호: ITWorld 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아00743 등록일자 : 2009년 01월 19일

발행인 : 박형미 편집인 : 박재곤 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2022 International Data Group. All rights reserved.