Coding for Environment
SDP 7기 정윤호
최근 테슬라 CEO인 일론 머스크가 과도한 전력 소모로 인한 환경파괴를 이유로 테슬라 차량 구매시 비트코인 결제를 허용하지 않기로 결정했다가 번복하는 일이 있었습니다. 실제로 케임브리지 연구진은 비트코인으로 인해 연간 115.54TWH의 전력이 소비되고 있음을 밝혔습니다[1]. 그렇다면 비트코인이 왜 전력을 소모하는 것일까요?
비트코인 채굴 과정은 거래를 검증하기 위한 코드로 작성되어 있습니다. 채굴 과정의 코드
블록들은 증명을 위한 연산을 수행합니다. 그리고, 한 줄의
코드라도 실행할 때는 컴퓨터가 필요합니다. 검증 과정에 필요한 코드는 꽤나 많은 연산을 수행해야 하기
때문에 그만큼 컴퓨터를 많이 사용해야 합니다. 이 과정에서 비트코인이 과도한 전력을 필요로 하게 됩니다.
비트코인 뿐만 아니라, IT 기술들이 날이 갈수록 발전함에 따라 에너지 수요는 필연적으로
증가할 수 밖에 없습니다. 연구에 따르면 2030년에는 에너지
수요도 전세계 에너지 소비의 20%를 차지할 것으로 예상되고 있습니다[2].
이에 따라 에너지 효율을 높이기 위한 방안은 다양하게 제시되고 있습니다. 오늘은 그 노력의 일환인 ‘그린 코딩’에 대해 알아보겠습니다.
(해당 글은 GFT Group의
‘Climate change: How GreenCoding makes a difference!’ 페이퍼를
바탕으로 작성되었습니다. 더 자세한 내용은 첨부된 링크를 참조해주세요)[3]
그린 코딩은 환경을 위해 에너지 소비가 적은 알고리즘을 설계하는 코딩 방식을
의미합니다. 기존의 코딩이 주어진 과제를 빠른 시간 내에 해결하는 데에만 치중했다면, 그린 코딩은 그와 더불어 ‘에너지 효율성’을 고려한, 즉, 전력
소모를 고려한 코딩 방식입니다.
그림 1. GreenCoding’s three important pillars (from GFT group paper)
GFT Group에서 제시한 GreenCoding은 소프트웨어의 기반이 되는 아키텍쳐와 총 3개 기둥으로 나눌 수 있습니다. 코드가 만들어내는 에너지를 측정하는 방식(structural)과, 유저 시나리오와 관련된 에너지를 측정하는 방식(behavioural)을 고려한 구조로 볼 수 있습니다.
1. Greener Architecture
그린 아키텍쳐를 설계하기 위해선 크게 3가지 방식을 제안합니다. 1) Shut down when idle(사용하지 않을 때는 꺼라), 2) Avoid impulsive consumption(충동적인 에너지 소비를 피하라), 3) Focus your investment in time and energy(시간과 에너지 투자에 집중하라). 하나씩 간단하게 살펴보도록 하겠습니다.
1-1. Shut down when idle
사용하지 않을 때는 꺼라. 흔히 집 안에서 사용하지 않은 전자제품들을
꺼야한다는 절약 지침과 같은 맥락으로 생각할 수 있습니다. 집을 하나의 소프트웨어로, 전자제품을 소프트웨어를 구성하는 부품으로 빗대어 생각하면 이해하기 수월합니다.
소프트웨어는 다양한 부품들로 구성되어 있습니다. 각 부품들은 독립적인 기능을 수행할 수
있도록 만들어져야 합니다. 그렇지 않으면 하나의 부품이 실행될 때 다른 부품들이 실행되어, 더 많은 코드가 실행되고, 더 많은 전력 소모를 필요로 합니다. 따라서, 사용하지 않을 때, 해당
부품을 끌 수 있도록 구축하는 것에 대해서 말하고 있습니다.
1-2. Avoid impulsive consumption
충동적인 소비를 피하라는 것은 특정 과제를 수행하기 위한 작업들에 우선순위를 정해서 ‘계획적으로’ 선정하라는 것을 의미합니다. 가장 흔한 방식으로, 작업들에 우선순위를 부여하고, 적게 활용되는 자원은 덜 고려하는 방식을 생각해볼 수 있습니다. 필요한
자원을 탐색하는 과정 또한 에너지를 필요로 하기 때문에, 자주 활용되는 자원을 먼저 탐색하는 과정은
에너지 효율성을 높여줄 수 있습니다.
1-3. Focus your time and energy investment
앱의 어떤 요소가 가장 많은 시간과 에너지를 투자해야 하는지를 고려하라는 의미입니다. 예를 들어, 특정 앱에서 이미지를 생성하는 작업이 가장 많은 에너지와
시간을 사용한다면, 해당 작업을 10% 효율적으로 만드는
것이 다른 작업을 10% 효율적으로 만드는 것보다 효율적입니다.
2. Green Logic
모든 프로그램은 로직을 갖고 있습니다. 로직은
논리적 흐름으로, 소프트웨어가 지원하는 기능을 수행하기 위해 코드 블록들이 배치되는 일련의 과정을 의미한다고
볼 수 있습니다. Green logic은 코드를 작성할 때, 고려할
수 있는 방법으로 생각할 수 있습니다.
2-1. Zero-waste code
코드도 제로웨이스트 방식을 적용할 때, 불필요한
자원 낭비를 줄일 수 있습니다. 여러가지 이유로, 많은 코드에서
‘dead code’라고 불리는, 작동하지 않는 코드들이
발견됩니다. 이는 소프트웨어의 크기를 증가시킵니다. 웹 사이트의
경우, 수많은 사용자들이 실시간으로 웹의 자원을 반복적으로 다운로드 받습니다. 해당 과정에서 서버와의 통신, 코드를 동작하는 데에 필요한 CPU 연산 능력을 낭비할 수 있습니다.
2-2. low-footprint resources
더 나은 파일 포맷을 선택한다면 사용자가 다운로드 받는 자원의 크기를 줄이고, 통신에 드는 비용을 줄일 수 있습니다. 예를 들어, 엑셀 파일을 csv파일로, XML
파일을 YAML 파일로 변환한다면 더 적은 용량을 갖게 됩니다. 이 방식을 사용했을 때 가장 큰 이점을 볼 수 있는 것은 이미지입니다.
bitmap으로 구현된 이미지는 사진이나 세세한 그림에만 사용하고, 로고, 심블(symbol), 차트는 vectorial
image를 사용할 수 있습니다. vectorial 이미지는 크기 변환이 자유롭고, 여러 이미지를 하나의 vectorial 이미지로 합쳐서 전달할 경우
더 적은 에너지 소비를 낳을 수 있습니다.
또한, 앱에서 제공하는 dark mode는 사용자의 디자인 선호와 관련된 것이 아니라, 디스플레이에
필요한 전력을 줄여 배터리를 23.5% 정도 줄일 수 있습니다.
3. Greener methods
에너지 효율을 위한 greener
methods는 코딩에 직접적으로 요구되는 로직보다는 개발 방법론에 초점을 맞춥니다.
3-1. Rapid feedback
소프트웨어를 개발할 때, 빠른 피드백을
얻기 위한 방식으로 Agile, Lean method 등을 선택할 수 있습니다. 빠르게 피드백하는 방법론이 중요한 이유는, 소프트웨어의 에너지 효율을
늦추기 위한 목적으로 코드를 지속적으로 관리하고 개선하기 위함입니다. 예를 들어, 앱이 로딩되는 시간은 앱의 크기와 유의미한 상관 관계를 갖습니다. 앱이
로딩될 때 필요한 어느 정도의 시간이 사용자 입장에서는 허용될 수 있어도, 앞서 언급된 dead code를 줄이거나 이미지 크기를 줄이는 등의 방식을 통해 로딩 시간을 최적화하고, 에너지 효율을 극대화할 수 있는 방법을 찾을 수 있습니다.
4. Greener Platform
더 넓은 관점에서 에너지 효율을 측정하기 위해 코드를 실행하기 위한 올바른 인프라구조에
대한 내용을 다룹니다.
4-1. Optimal utilization
그림 2. Energy
proportionality (from GFT group paper)
위 그래프는 energy
proportionality, 컴퓨터 시스템에서 사용되는 에너지와 컴퓨터 자원 이용률 간의 관계를 나타낸 그래프입니다. 그래프에 따르면, 이용률이 증가할수록, 더 높은 에너지 효율성을 갖습니다.
따라서, 에너지를 효율적으로 사용하기
위해선 컴퓨터 자원에서 유휴 자원이 없도록 사용해야합니다. 하지만 필요보다 컴퓨터 자원을 더 많이 구축해, 적은 이용률을 야기하는 경우가 빈번하게 발생합니다. 예를 들어, 만든 앱을 사용할 사용자가 많을 것이라 판단해 성능이 좋은 컴퓨터를 마련했는데, 실제로는 더 적은 사용자가 사용하는 경우입니다. 이럴 경우, 컴퓨터의 이용률이 적어져 에너지 효율성이 줄어들게 됩니다.
이런 측면에서, 클라우드 컴퓨팅이
효율성을 가져다 줄 수 있습니다. 클라우드 컴퓨팅은 컴퓨터 자원을 모듈화, 즉, 여러 개로 나누어 사용할 수 있게 합니다. 이는 컴퓨터 자원 이용률을 더 높게 사용할 수 있게 만들기 때문에 에너지 효율성을 높여줍니다. 실제로, 사내에서 직접 구축한 데이터 센터의 평균 이용률이 12%~18%인 반면, AWS, Google Cloud, MS Azure는
평균 65%의 이용률에 달한다고 보고되었습니다.
GreenCoding은 작업 효율성만을 고려하던 기존의 코딩 방식에서 벗어나 Architecture, Logic, Methodology, Platform의 측면에서 에너지 효율을 높일 수 있는 코딩 방식을 제안합니다. GFT가 발간한 보고서에서, GreenCoding은 아직 초기 단계로, 실제 프로젝트에 적용한다면 설계, 개발에서의 프로젝트의 전체 비용이 증가할 수 있다고 이야기합니다. 하지만 GreenCoding의 철학이 점진적으로 확대되고 있고, 전세계적으로 소프트웨어 개발자들의 운동으로 이어지며 환경에 중대한 영향을 발휘할 수 있을 것이라고 말합니다.
그린 코딩이 제시하는 방법을 정리하며, 개발자 입장에서 코드 효율성에 대해 다양한 차원에서 고민할 수 있는 좋은 기회였습니다. 이 글을 읽으신 많은 분들께서도 코딩의 에너지 효율성에 대해 생각해보고, 실제 프로젝트에 적용하는 시작점이 되었으면 좋겠습니다.
[1] Cambridge
centre for alternative finance. (2021). Cambridge Bitcoin Electricity
Consumption Index. Retrieved from https://cbeci.org/
[2] Andrae, A. and Edler, T., 2015. On Global
Electricity Usage of Communication Technology: Trends to 2030.
[3] Gft.com. 2021. Climate
change: How GreenCoding makes a difference!. [online] Available at:
<https://www.gft.com/int/en/index/discovery/thought-leadership/climate-change-how-greencoding-makes-a-difference/>
Comments
Post a Comment