Wednesday, April 18, 2018

자동화 작업을 통한 Lean Computing ─ 인간은 왜 기계를 필요로 하는가

Leave a Comment

퓨터는 기계의 속성을 잘 보여주는 대상 objet 이라 생각한다. 시간이 지나면 시장에는 내가 쓰는 제품보다 좋은 성능을 가지는 제품들이 나와 있고 그렇다고 내가 원하는 제품으로 정확하게 만들어 내기에는 신경쓸 것이 많다. 그래서 가급적 기성품을 사용하려 하지만 이미 만들어진 제품으로 사용을 하다 보면 기계 자체의 결함으로 문제가 발생하기도 하지만 거의 대부분은 사용자의 잘못된 사용이 원인이 되어 기계가 힘들어지는 경우가 많다.

컴퓨터를 기계로 표현하면 듣는 사람의 반응에 따라 기계와 컴퓨터를 어떻게 구별하고 있는지 느낌이 온다. 기계를 말하면 보통 단단한 금속으로 이루어진 무엇으로 공장에서 끊임없이 일을 하고 있는 대상을 생각할 수 있고 정밀한 톱니바퀴, 다양한 부품으로 이루어진 정밀시계도 생각할 수 있다. Mechanical engineering 을 기계공학으로 번역하지만 machine 도 기계라고 번역한다. mechanics 는 더 정확하게는 '역학'을 뜻한다. 역학이란 물리학 법칙을 이용한 학문이며 여기에는 물리학을 기본으로 하고 기계장치에 사용되는 유체역학 혹은 수리학 hydraulics 과 같이 기계 장치를 작동시킬 수 있는 다양한 힘의 학문을 다루는 분야이다. 그래서 mechanical engineering 은 기계공학이라기 보다는 '역학공학'이 더 어울릴 것 같지만 익숙하지 않아 차라리 machine 과 mechanics 를 혼재해서 사용하는 것이 더 편하게 되었다.

익숙하게 쓰고 있는 기계가 무슨 뜻인가

뜻하지 않게 기계에 대한 새로운 인식이 다가오기 시작했다. 인공지능이 우리에게 익숙한 용어가 되고 동시에 machine learning 이 부각되기 시작했는데 이를 한국어로 번역하면 '기계학습'이라 번역하게 되었다. 사실 machine 과 mechanics 에 대한 혼재로 기계학습과 기계공학이 같은 기계일까 의문을 가지게 되었다. 중국의 경우 기계공학은 우리와 비슷하게 기계공학 機械工業 으로 쓰지만 기계학습은 機器學習 으로 사용하고 있다. 발음 상으로는 기기학습이다. 器는 '그릇 기' 이지만 기계란 뜻도 포함하고 더 나아가 유기적인 조직을 가지는 대상 (예: 신체 기관) 에도 사용된다. 즉, 소프트웨어를 담는 그릇으로 하드웨어로 그릇의 모양도 중요하지만 그릇에 담기는 것도 중요하다는 설명이다.


Computer as machine ...

컴퓨터는 가장 대표적인 기기 machine 이다. 공장의 자동화 설비에 사용되는 많은 기계들도 생각할 수 있지만 이런 기계들은 소프트웨어의 의미가 크게 부각되지 않은 하드웨어의 이미지가 더 강하다. 반면 컴퓨터는 자연스럽게 컴퓨터 본체만 가져오면 깡통이나 다름없다는 것을 잘 안다. 그래서 컴퓨터는 하드웨어만큼 소프트웨어 - 가장 먼저 컴퓨터를 운영할 수 있는 운영체제라는 소프트웨어를 생각하게 된다. 우리가 잘아는 마이크로소프트 원도우, 애플의 맥OS 그밖에도 리눅스 유닉스 등이 있고 아주 작은 알람시계에 들어가는 무엇인가도 운영체제를 가지고 있다. 간단하게 인간의 목적을 위해 무엇인가 해주는 것에는 운영체제가 들어가 있다고 생각하면 된다. 같은 생각으로 핸드폰이란 기계에도 운영체제는 당연히 들어간다.

기계의 하나인 컴퓨터는 하드웨어 만큼 소프트웨어의 중요성을 잘 보여준다.

하드웨어의 성능이 사용자가 원하는 목적을 이루기에 부족하다면 성능이 좋은 최신의 하드웨어를 원하게 된다. 어떤 CPU 를 썼는가 메모리는 얼마인지 그래픽 카드가 무엇인지 따지는 것은 바로 소프트웨어를 떠나 기본적으로 사용자가 원하는 목적을 이루기 위해 필요한 하드웨어를 말한다. 게임을 계속 해야 한다면 좋은 그래픽 카드는 당연하고 최고의 성능을 가지는 하드웨어를 필요로 한다. 그러나 게임을 하지 않는다면 최고의 그래픽 카드는 항상 10% 미만의 성능만 사용하고 있을지 모른다. 결국 하드웨어는 사용자의 목적이 무엇인지 알아내는 것이 중요하다. 문서 작업만 하고 인터넷을 주로 본다면 최고급 성능의 그래픽 카드와 엄청난 클럭수의 CPU 그리고 바다를 헤엄칠 것 같은 광활한 메모리를 일부분만 쓸지 모른다.

소프트웨어도 사용자의 목적이 무엇인지에 따라서 선택된다. 노트북으로 이동하면서 문서작업을 자주하는지 누군가에게 웹페이지나 파일을 제공할 목적으로 컴퓨터를 쓰는지에 따라서 당연히 운영체제는 달라져야 한다. 우리가 인터넷에 접속하는 웹사이트는 '누군가의 컴퓨터'에 접근해서 제공하는 페이지와 데이터를 얻어오는 것이다. 누군가에게 서비스를 해주는 '서버 server' 는 항상 누군가 어떤 목적으로 접근하는지 대기하고 있어야 한다. 놀고 있다가 누군가 접근하면 그때 필요한 서비스를 메모리에 올리고 처리하면 그만큼 느려진다. 컴퓨터 자체는 빠르더라도 누가 언제 어떻게 접근할지 대비하고 있지 않으면 그만큼 느려진다. 따라서 서버란 메모리에 가능한 많은 프로그램을 올려놓고 필요할때 빠르게 접근하는 사람에게 서비스를 바로 제공해줄 수 있는 형태가 되어야 하고 노트북과 같이 개인적인 용도를 쓴다면 사용자가 노트북에서 쓰는 만큼만 빠르게 실행시켜주고 빠르게 메모리에서 제거하는 형태가 되어야 할 것이다.

서버는 많은 이들에게 서비스해주기 위한 성능좋은 컴퓨터이다.

그래서 컴퓨터의 성능은 단순히 비싼 컴퓨터에서 좌우되는 것이 아니라 하드웨어의 성능을 얼마나 잘 활용할 수 있는 소프트웨어의 지원이 기본이 되고 어떤 환경에서 어떤 목적으로 사용되는지에 따라서 알맞은 목적성을 가지는 운영체제를 운영하는 것이 가장 중요하다.


Mobile as machines ...

거의 모든 사람들이 가장 가까이 두고 다니는 기계는 이제는 스마트폰이 되었다. 주머니에 넣을 정도로 작은 기기지만 그 작은 기기가 할 수 있는 일들은 컴퓨터와 거의 동일하다고 본다. 스마트폰이 컴퓨터의 역할을 하기에 아직 부족한 부분은 화면과 입력 편리성 정도지만 스마트폰이 주변기기와 확장하기 편리해지고 주변에 있는 모니터에 연결이 되고 키보드를 같이 가지고 다닌다면 기존에 노트북을 가지고 다니며 할 수 있는 작업들은 거의 할 수 있다고 본다. 노트북은 가질 수 없는 통신의 자유로움은 노트북보다 장점이 될 수 있는 부분이다. 중요한 것은 어떤 작업을 하는지에 따라서 다르겠지만 거의 대부분 컴퓨터가 할 수 있는 작업의 영역을 이미 작은 모바일 기기가 할 수 있도록 도와주고 있다는 점이다.

두가지 측면을 살펴볼 필요가 있다. 첫번째는 초기의 스마트폰이 가진 여러가지 컴퓨팅 능력을 극복하고 있다는 사실이고 두번째는 정말 우리의 작업이 상당한 컴퓨팅 능력을 요구하는 것이 많지 않다는 것이다. 컴퓨터에서 중앙처리장치 CPU 와 메모리 및 연결을 위한 장치 소위 Northbridge & Southbridge 를 포함하는 작은 사이즈의 장치를 만들어 모바일 기기가 작동할 수 있도록 하는 것은 초기에는 쉽지 않았기 때문에 성능을 희생시키는 방법을 사용했지만 반도체 집적 기술과 모바일 기기에서 어떤 프로세서를 많이 사용하는지에 대한 연구와 함께 표준화가 이루어지면서 모바일 AP 의 발전은 놀랍게 발전하고 있다. 그래서 기술 개발을 하는 사람이 아닌 사용자의 입장에서 하드웨어의 성능 다른 말로 해서 컴퓨팅 능력 computing power 에 대한 걱정은 이제는 그리 크게 하지 않아도 될 것이다. 동시에 근본적으로 정말 인간이 일상적으로 하는 작업들은 컴퓨팅 능력을 심하게 요구할만큼 필요로 하는 작업들은 아닌 것이 아닌지 생각해 볼 필요가 생긴다.


많은 사용자들은 자신의 모바일 기기가 느려지거나 어떤 작업을 하다가 순간 멈추는 장면을 목격하면 반사적으로 생각하게 된다. "그래 핸드폰을 바꿔야 할 때가 왔구나" 혹은 시간이 지나면 기기는 성능이 떨어져서 제대로 사용하기 어려워진다는 것을 당연하게 받아들인다. 컴퓨터의 경우 부품 사이에서의 청결 문제나 접촉 문제 등에 의해서 하드웨어의 문제가 발생하는 경우는 존재하지만 거의 대부분 소프트웨어의 사용 상에서 무리를 주거나 필요 없는데 컴퓨터에 무리를 주는 어떤 요인이 상주하며 발생하는 경우가 많다. 말을 돌려 이야기했지만 제대로 된 프로그램을 깔지 않거나 제대로 된 프로그램도 문제를 일으킬 수 있다는 것이다. 모바일 기기도 비슷하다. 열에 의해 전체 시스템에 영향을 크게 주어 성능이 떨어질 가능성이 분명 존재하지만 그렇다고 쉽게 성능이 떨어지는 것은 대부분 소프트웨어의 문제일 가능성이 더 높다는것을 생각해야 한다.

그래서 어쩌면 여전히 어느정도 계산 능력을 가지고 일반적인 작업을 충분히 할 수 있는 모바일 기기들이 쓰이지도 못하고 버려지고 더 좋은 핸드폰을 바라는 것은 그냥 실증난 옷을 바꾸는 것과 비슷할지 모른다. 조금 더 좋아 보이는 핸드폰을 들고 사용하고 싶은 것이고 미디어에서는 새로운 핸드폰을 사용하면 지금까지는 할 수 없는 무엇인가 할 수 있을 것이라고 계속 자극하고 있기 때문에 버려지는 핸드폰은 지금도 계속 늘어나고 있을 것이다.


Something as machine ...

궁극적으로 기계 machine 를 말할 때 컴퓨팅 능력 computing power 을 가지고 있는 모든 것을 말할 수 있다. 심지어 디지털 알람 시계도 어느정도의 컴퓨팅 능력를 가지고 있기 때문에 이 또한 기계라고 말할 수 있다. 즉, 컴퓨팅 능력를 가지고 있는 모든 사물 중 통신 능력을 가지고 있는 것을 요즘 말하는 사물인터넷 (IoT; Internet of Things) 이라 부를 수 있다. 그렇다면 컴퓨팅 능력이란 무엇인가 생각해봐야 한다. 복잡하게 설명할 능력이 되지 않으니 개인적으로 생각하는 정의를 다음과 같이 표현하고 싶다.

어떠한 문제를 해결하기 위한 순차적인 체계와 논리처리할 수 있는 능력

그래서 단순히 기계란 전기가 들어오는 컴퓨터를 먼저 떠올릴 수 있지만 넓은 의미에서 DNA 가 생화학 법칙 (자연 법칙) 을 통해서 필요한 단백질을 만들어내는 과정도 컴퓨팅 능력에 포함되어야 한다고 생각한다. 전자 시계가 아닌 일반 태엽으로 돌아가는 시계를 바라보아도 시간을 알고 싶다는 문제를 해결하기 위해서 부속품들이 가지는 기계적인 특징 mechanical properties 을 통해서 우리에게 시간을 알려주는 능력을 가지고 있기 때문에 넓은 의미에서 아날로그 마저도 컴퓨팅 능력을 가지고 있다고 말 할 수 있다. 그리고 앞에 말한 '어떠한 문제를 해결하기 위한 순차적인 체계와 논리' 를 보통 알고리즘 algorithm 이라고 부른다. 따라서 컴퓨팅 능력이란 '알고리즘을 처리할 수 있는 능력'이다.

화성 탐사선 큐리오시티 Curiosity 는 바퀴로 모스부호를 만들거나 거리 측정을 위한 주행 패턴을 변화시키는 알고리즘을 적용했었다. - NASA Jet Propulsion Laboratory

현실 세상에서 '어떤 문제를 해결하기 위한' 은 인간의 불편함으로 연결되는 경우가 많다. 그래서 인간의 발명품은 인간의 불편함을 제거하기 위한 노력들이다. 그런데 그 불편함을 느끼는 감수성이나 문제의 근본적인 원인을 알아내는 능력은 개인마다 다르기 때문에 발명품의 품질이나 효용성은 달라지게 된다. 그리고 역사에서 보면 해결책이 좋다고 대중화되는 것이 아니라는 것도 알고 있다. 더 효율적이고 더 좋은 것이지만 정치 경제 그리고 시대의 흐름에 따라서 더 좋은 발명품은 역사에 사라지고 한동안 많은 문제를 가지는 발명품이 당연하게 받아들여지는 경우도 있다. 가장 대표적인 예로 전기 자동차와 내연기관 자동차를 생각한다. 전기 자동차가 개발된 것은 우리가 생각하는 것보다 상당히 오래된 일이지만 여전히 낮은 기름값(?)과 내연기관 산업 발전을 위해서 전기 자동차는 만들어졌다가 정책적으로 사라지는 과정을 겪게 되었다. 그리고 우리에게 남아 있는 것은 내연기관이 만들어 낸 다양한 공해 물질과 내연기관 연료를 만들기 위한 높은 석유의존성을 남기게 되었다. 더 길게 보면 무엇이 인류에게 좋은 것인지는 알 수 없지만 내연기관은 쉽게 끊기에는 너무도 광범위한 기계가 된 것은 인정해야 할 것이다.

결국 기계란 인간의 불편함을 해결하기 위한 작업들이다. 우리의 일상 생활에서 느끼는 불편함이 무엇인지 확인하고 불편함을 해결할 수 있는 적절한 재료들이 존재한다면 그 재료를 가지고 적절하게 조합해서 만들어 내는 과정은 결국 인간이나 기계의 컴퓨팅 능력을 요구하게 된다.


Useless means ...

기계를 사용하는 사용자로 인간은 종종 '쓸모없음 uselessness' 에 대해서 쉽게 말한다. 어쩌면 완제품의 시대 era of ready-made product 에서는 완제품이 제공하는 모양과 기능에서 조금이라도 벗어나면 쓸모없다고 말하는지 모른다. 예를 들어 3G 통신 제품은 지금은 쓸모없는 스마트폰일 뿐이다. 어쩌면 쓰고 싶지 않다고 말하는 것이 솔찍한 표현일 것이다. 그래서 기계를 사랑하는 사람들의 모임은 두 종류로 구별되기도 한다. 새로운 제품과 뛰어난 성능을 보여주고 싶어하는 모임이 첫번째이다. 새로운 제품 그래서 대체로 뛰어난 제품을 통해서 성능을 보여주는 데 집중하는 모임이 있고 다른 종류는 고물상같은 느낌으로 버려지고 쓸모없는 제품들의 사용 가능성을 보여주거나 필요하다면 부품으로 분해해서 새로운 제품을 만드는 모임이다. 개인적으로 후자를 좋아한다. 완제품이 주는 매력적인 성능의 이끌림이 나쁘다고 말할 수 없지만 많은 경우 우리에게 한계로 다가오는 것은 그만큼 무엇을 발전시킬 수 있는 부분이기도 하기 때문이다.


무제한 통신 요금제를 사용하면 편리해서 좋을 수 있지만 어떤 프로그램 (앱) 이 얼마나 네트워크를 사용하는지 신경쓰지 않을 것이다. 핸드폰에서 어떤 앱을 보면 통신요금이 적용되지 않는 네트워크 환경 (주로 무선랜) 에서 필요한 내용을 받았다가 모바일 환경에서도 통신요금에 영향을 주지 않게 만든 앱들이 있다. 무제한 통신 요금제를 사용하지 않아서 소위 통신 요금 폭탄을 걱정하는 이유이기도 하지만 기본적으로 무제한 통신 환경을 생각하고 앱이나 프로그램을 만드는 것은 다른 한편으로 생각하면 통신이 되지 않는 환경에서는 제대로 작동하지 않는 것을 말하기도 한다. 그래서 개인적으로 모바일 통신 환경이 아닌 오프라인에서도 제대로 사용할 수 있는 환경을 제공하는 앱이나 프로그램에 대한 신뢰를 더 가지게 된다. 왜냐하면 어떤 환경에서도 쓸모없이 되는 것을 최소화하려는 생각을 하는 개발자의 작품이기 때문이다.

인간의 쓸모있음 usefulness 은 절대적인 대상의 문제가 아닌 인간이 얼마나 활용하고 인간이 얼마나 활용할 수 있도록 환경을 만들어주는지에 따라 변화하는 문제라는 것이다. 그래서 가끔 쓸모없는 대상을 어떻게 하면 쓸 수 있을까 고민하는 과정은 문제를 해결하는 과정에서 필요한 부분이라고 생각한다.


Brand new born as ...

예전에 [ 오래된 컴퓨터 활용기 ─ 사라지는 것들에 희망을... ] 글을 통해서 사용하지 않는 노트북을 서버로 만들어 사용하는 방법을 소개한 적이 있다. 하드웨어 성능이 좋지 못해 일반적 작업에 사용하기 어려운 노트북을 서버로 만들어서 남는 저장장치와 연결해서 집안 내부에서 사용하는 홈 네트워크 서버로 사용하는 내용이였다. 시대가 변화해서 이제 큰 부피를 차지하는 노트북을 이용하지는 않지만 그 노트북에 연결된 저장장치는 거의 15년이 넘어가는 시점에서도 문제없이 계속 사용하고 있다. 다만 조금 더 적은 공간과 다양한 활용을 위해서 구형 노트북에서 라즈베리 파이 Raspberry Pi 로 바꾸었다. 그러나 여전히 저장장치로 사용하는 외장하드들은 대부분 10년 이상 넘어가고 있는 구형 장치들이다. 그래서 USB 3.0 도 아닌 USB 2.0 속도이고 네트워크도 전설에서나 들을 법한 100Mbps 속도이다. 그러나 활용도에서는 그 어떤 서버보다 더 즐거움을 줄 때가 많다.

소형 컴퓨터인 Raspberry Pi

구형 저장장치를 이용한 서버 뿐만 아니라 몇년전 부터는 핸드폰을 더이상 구매하지 않게 되었다. 개인적으로 좋아하는 넥서스 시리즈가 사라지고 이제는 구글에서도 픽셀 Pixel 시리즈를 내놓았지만 넥서스 5X [ Nexus 5X in Júne's Wiki가 2년째 쓰는 핸드폰이다. 2013년쯤 얻은 넥서스 4 [ Nexus 4 in Júne's Wiki ] 도 여전히 잘 쓰고 있는다. 확실히 연산 능력은 떨어지기 때문에 느린 부분이 존재하지만 여전히 통신도 잘하기 때문에 일종의 사물 인터넷 지휘소 fleet beacon 같은 역할을 하게 두었다. 그렇게 넥서스 시리즈의 다양한 핸드폰을 사용하고 더이상 쓸모없어 버린 제품들을 모아서 기존 운영체제가 아닌 최신 운영체제에 맞춰 사용할 수 있도록 도와주는 커스텀 롬 custom rom 을 설치해서 사용하게 된다. 기기의 특성이나 품질에 따라서 달라질 수 있지만 커스텀 롬 하나만 바꾸어 보면 사용하는데 전혀 지장이 없는 정도로 사용할 수 있게 된다. 개인적으로 사용하는 롬은 리니지롬 [ Lineage Rom ] 이다.

Lineage Custom ROM 사용이 가능한 기기들

보통 쓸모없어 버리거나 방치한 기기들을 모아서 쓸수 있는 부품들을 모아서 새롭게 핸드폰을 만들기도 한다. 이런 과정 속에서 재미있는 것도 있지만 가장 기본적인 내용들을 알게 되는 경우가 더 많기 때문이다. 혹시나 핸드폰에 새로운 롬을 깔아서 완전히 쓸 수 없게 망가지는 것은 아닐까 걱정할 수 있지만 어짜피 버려진 기기라면 해봐서 나쁠 것도 없다. 뿐만 아니라 새롭게 시도하는 과정 속에서 발생하는 문제들을 해결하다 보면 나와 같은 경험을 하는 사람들이 세상에 많다는 것 그리고 그 해결책을 누군가는 가지고 있고 문제가 일어나는 이유를 알게 되는 과정 역시 새로운 탐험이다.

그러나 항상 구형 기기만으로 해결할 수 있는 것은 아니다. 문제 해결 과정에서 절대적으로 필요한 컴퓨팅 능력이 있을 수 있다. 예를 들어 아무리 잘 구성하고 빠른 서버를 구축했다고 해도 동영상 실행에 필요한 하드웨어가 존재할 수 있다. 이런 경우 자신에게 필요한 것이 무엇인지 고민하는 과정에서 컴퓨팅 능력이 가지는 한계와 극복 방법도 함께 생각할 수 있을 것이다.


Useless to Useful ...

몇가지 예를 통해서 어떤 과정으로 구성하고 활용할 수 있는지 간단하게 소개하려 한다. 또한 구성하는 과정에 필요한 매뉴얼은 동시에 개인 위키 (영문) 를 통해서 소개하려고 한다.

A. Home network storage ...

클라우드 서비스가 일상적이지만 기본적으로 클라우드는 용량 제한과 속도를 생각해 일정 네트워크에서 사용할 수 있는 파일 공유를 생각하는 경우가 많다. 그래서 그런 필요성을 충족하기 위해 많은 제품들이 만들어진다. 외장하드 형태이지만 네트워크에 연결해서 사용자들이 필요한 자료를 올리고 내려받거나 바로 실행해서 사용할 수 있는 환경을 만들어 준다. 그러나 많은 경우 제품 제조사들이 만든 앱이나 프로그램을 사용해야 하거나 문제가 발생했을 때 자신이 스스로 해결할 수 없는 경우 그래서 다음 번 펌웨어를 기다려야 하는 경우가 종종 생긴다.

그래서 앞서 소개한 구형 노트북을 리눅스 서버로 만들어서 네트워크에 연결해 기본적으로 리눅스가 제공하는 파일 공유 서비스 samba 등을 사용하는 방법을 사용할 수 있다. 구형 노트북을 사용하는 방법도 좋지만 개인적으로 손바닥 크기의 라즈베리 파이란 기계를 사용한다. 소형이고 가격도 저렴하고 기계에 사용할 운영체제도 호환성이 좋고 무엇보다 많은 이들이 이를 활용한 활용법이 많기 때문이다. 확장성은 좋다고 할 수 없지만 기본적인 내용은 모두 가능하기 때문에 별 문제없이 사용할 수 있다.


삼바까지 설정하고 나면 설정한 아이디 / 비밀번호를 통해서 다른 컴퓨터에서도 저장장치를 사용할 수 있게 된다. 위에 링크된 내용들은 개인적인 용도로 정리한 것이기 때문에 다른 곳을 찾아보는 것이 더 유용할 것 같다.


이렇게 삼바 서버를 설정하고 나면 사용하는 컴퓨터의 필요없는 자료를 백업하거나 동영상과 같이 용량이 큰 자료들은 옮겨 놓고 사용할 수 있을 것이다.

B. Wish to wiki my own ...

무엇인가 새롭게 알게 된 것을 잘 정리하고 싶을 때 노트를 위한 앱이나 프로그램 (예: 구글 킵 Google Keep, 에버노트 Evernote 나 원노트 OneNote) 와 같은 프로그램을 사용할 수 있지만 만약 동기화된 핸드폰이나 노트북이 없다면 다시 찾기 어려울 때가 많다. 보통 많은 사람들이 모여서 지식을 정리하고 소위 집단 지성을 만들기 위해 위피피디아 Wikipedia 를 만들었지만 이런 필요성은 개인에게도 필요할 수 있다. 또한 자신이 한번 설정하고 반복적으로 그 설정값을 적용하고 싶을 때는 어딘가에 적힌 메모에서 반복해서 복사해서 사용하기 보다는 웹에서 바로 복사해서 사용하면 더 편리할 것이다. 그래서 개인적인 용도로 위키를 만들 수 없을까 싶었다.

웹에서 사용할 수 있는 위키 종류는 그렇게 많지 않다. 위키피디아를 구성하는 미디어위키 MediaWiki [ MediaWiki ] 가 좋은 방법이지만 설치해야 할 서버가 필요하고 필요한 서버를 호스팅하는 방법도 있지만 비용뿐만 아니라 접근성의 문제로 불편할 것이다. 그래서 생각한 것이 이왕 사용하고 있는 라즈베리 파이를 이용해 웹서버로 만들고 위키를 올리는 것이다. 다만 미디어위키의 경우 데이터베이스를 사용해서 원래 사용하려는 용도에 비해 무거울 수 있을 것 같아 다른 대안을 찾아 데이터베이스를 사용하지 않는 위키를 올리기로 했다.

기본적으로 삼바 서버까지 설정하는 과정을 그대로 거치고 추가적으로 웹서버를 설치한다. 웹서버로 Nginx (엔진엑스라 읽는다) 를 설치하기로 결정했다. 웹서버를 설치하고 나서 기본적으로 필요한 SSL 설정 (보안웹 설정) 을 위해 Let's Encrypt 의 인증서 서비스를 설치하고 등록했다.



이후 나에게 맞는 위키로 생각한 DokuWiki [ DokuWiki ] 를 설치한다. 위키를 설치하고 나서 운영하면서 작업의 여러 변화들이 일어난다. 간단한 설정값을 확인하기 위해 노트 프로그램을 찾거나 다른 웹 서비스에 들어가 확인하는 과정이 아니라 위키에 잘 정리된 내용이 있기 때문에 항상 위키에 먼저 접근해서 해당 설정을 찾아내거나 네트워크 관리도 간단한 php 스크립트를 통해서 관리하는 서버가 지금 문제가 있는지 아닌지 바로 페이지에서 확인할 수도 있다. 어떤 문제가 발생했을 때 다음 번에도 동일한 문제가 발생하는 경우가 많은데 예전에는 인터넷에서 검색해서 똑같은 페이지에서 해결방법을 찾았지만 위키에 한번 정리를 하고나면 동일한 문제에 바로 위키에서 해결할 수 있게 된다.

C. Security sensor using phone ...

잘 사용하지 않는 오래된 핸드폰이라도 기본적인 기능은 가지고 있다. 특히 센서 기능은 유용하게 쓸 수 있다. 활용도가 떨어지는 핸드폰은 다양한 용도로 쓸 수 있다. 핸드폰으로 가지고 다니며 사용하기는 힘들지 몰라도 집이나 사무실에 두고 다양하게 사용할 수 있다. 특히 스마트폰의 괜찮은 앱들은 그런 용도를 바로 구현하기 좋은 경우도 많다. 예를 들어 A 라는 서버에 있는 자료들을 B 서버에 정기적으로 옮겨 놓고 싶을 때 컴퓨터로 그 작업을 생각날 때마다 하는 것이 아니라 동기화 기능을 제공하는 앱 (예: FolderSync) 을 설치해 놓고 A 서버와 B 서버를 등록해서 A 서버에 변화가 생기면 바로 동기화 해주거나 주기적으로 동기화 Synchronization 를 해주도록 설정해 놓는다.

본인이 집을 비운 동안 누군가 집에 몰래 들어오지 않을까 걱정이 된다면 사용하지 않는 구형 핸드폰을 이용할 수 있다. 핸드폰에 있는 근접 센서 proximity sensor 를 이용할 수 있다. 문에 핸드폰을 올려 놓을 수 있도록 하고 핸드폰을 가릴 수 있는 적당한 가림막을 놓아 문을 열면 핸드폰이 가림막에서 멀어지게 하거나 반대로 가까워지게 한다. 근접 센서에 변화가 발생하면 특정 프로그램을 실행시키거나 집 주인에게 메세지를 보내도록 하는 것이다. 구체적인 방법은 활용하고 싶은 이들의 상상력으로 더 발전시킬 수 있기를 바라며 이런 작업이 가능하게 하기 위해서는 소위 자동화 앱 (프로그램) 이 필요하다.

전화 통화 중 귀에 가까워지면 화면이 꺼지는 이유는 근접 센서 때문이다.

자동화 앱 (프로그램) 이란 특정 조건이 이루어지면 triggered 정해진 내용을 실행 execute 하도록 만든 것이다. 예를 들어 새벽 1시가 되면 알람 소리를 제외하고 모든 소리가 나지않게 한다거나 읽기 위한 앱들 예를 들어 웹브라우저나 책 읽는 앱을 실행시키는 동안에는 화면이 꺼지는 시간을 길게 하도록 하거나 무선랜을 사용할 수 없으면 네트워크 사용량이 많은 동기화 auto-sync 나 다운로드 받는 작업을 중단하도록 한다 와 같이 반복적으로 실행하는 내용을 자동으로 구현해주는 것이다. 가장 대표적인 안드로이드 앱은 Tasker [ Tasker ]이다. 이런 자동화 앱을 사용한다면 문에 설치한 핸드폰에서 근접 센서가 변화가 있을 때 집주인에게 메세지를 보내고 그 이후 자동으로 녹음을 하도록 할 수 있다.

앞에서 설명한 '어떠한 문제를 해결하기 위한 순차적인 체계와 논리' 를 핸드폰에서 구현하는 것이다. 이런 자동화 앱은 순차적인 체계와 논리를 구현해주기 때문에 사용자는 프로그래밍 능력 ability to code 을 가지고 있지 않아도 문제를 해결할 수 있게 된다.


Algorithm without programming ...

종종 알고리즘을 프로그래밍 할 수 있는 능력 as a coder 과 동일하게 생각하는 경우가 많다. 그러나 개인적인 생각으로 '알고리즘을 구현할 수 있는' 다양한 방법 중 가장 근본적인 능력은 프로그래밍이 될 수 있지만 앞서 본 자동화 앱이나 정리가 잘된 운영체제로 일반 사용자들이 쉽게 쓸 수 있다면 알고리즘은 그 본연의 뜻인 '순차적인 체계와 논리' 로 돌아갈 수 있고 일반 사용자들도 쉽게 자신이 원하는 알고리즘을 구현할 수 있을 것이다. 프로그래밍 능력을 가지고 있다면 좀 더 다양한 범위에서 해결할 수 있게 되는 것도 생각해야 한다. 즉, 자동화 앱이나 일반적인 설정에서 제시되지 않은 문제가 발생하거나 제대로 실행이 되지 않을 때 문제를 해결할 수 있는 능력은 문제의 더 근본적인 부분을 찾아서 해결할 수 있어야 하고 근본적인 해결책은 대부분 프로그래밍 능력을 요구하는 경우가 많기 때문이다.


예를 들어 리눅스를 누구나 쉽게 화면에 나오는 안내에 따라서 잘 설치하고 사용할 수 있고 심지어 내용은 알 수 없지만 인터넷에 잘 설명된 명령어를 그대로 따라해서 성공할 수 있지만 만약 그 과정에서 문제가 발생한다면 해결하기 위해서는 리눅스 시스템의 기본적인 내용을 알고 있을 때 더 쉽게 문제를 해결할 수 있다. 또한 기본적인 명령어 체계와 구조를 이해하고 있다면 인터넷에 소개된 따라하기 내용들도 자신에 맞게 응용해서 적용할 수 있다.

결과적으로 알고리즘은 프로그래밍으로 해결하는 과정만이 아니라 인간의 모든 문제들을 해결하는 체계와 논리를 모두 다 포함하고 그것을 얼마나 효율적으로 해결할 수 있는지에 고민하는 과정에서 인간은 자연스럽게 컴퓨팅 능력을 요구하게 되었다. 예전에는 사람들이 수작업으로 확인하고 정리하는 과정에서 컴퓨터가 자료를 읽어내고 자동으로 분류하고 실수없이 결과를 만들어 내는 과정은 수작업에서 소요되는 시간이 길고 실수에 의한 효율성이 떨어지는 불편함을 해결하기 위한 과정이다. 인간의 불편함은 좀 더 정확할 수 있는 가능성이 상당히 높은 컴퓨터의 데이터 처리 능력에 더욱 더 의존하게 되는 것이다. 그리고 알고리즘도 컴퓨팅 능력에 좀 더 의존하게 되는 것이다.

그러나 이제는 프로그래밍을 몰라도 알고리즘을 구현할 수 있는 다양한 도구를 제공한다. 앞서 소개한 자동화 작업 automatic workflows 은 안드로이드에서만 가능한 것이 아니라 웹서비스에서도 가능하다. 예를 들어 트위터에 올린 글을 자동으로 페이스북에도 올리게 하거나 내가 유투브에서 좋다고 누른 혹은 특정 리스트에 저장한 동영상을 내 블로그에 자동으로 올라가게 하게 하는 것처럼 웹서비스 사이에서 데이터의 이동이나 저장을 도와주는 서비스이다. 가장 대표적인 서비스가 IFTTT [ IFTTT ] 이다. IFTTT 은 if this, then that 란 뜻으로 서비스의 이름에서 바로 알 수 있듯이 안드로이드의 자동화 앱과 동일한 내용임을 알 수 있다. 이론상으로 기기 내부에서 자동화가 이루어지는 앱과 웹 서비스 사이에서 이루어지는 자동화 서비스를 연결한다면 궁극적으로 거의 대부분이 자동화가 이루어질 수 있음을 상상할 수 있다.

IFTTT - IF This, Then That


Lazy makes creative ...

인간의 창의력은 어디서 오는 것이냐 누군가 묻는다면 개인적으로 '게으름'이라고 대답하게 된다. 가끔 반복적으로 하는 작업들이 있다. 예를 들어 맘에 드는 음악의 음원을 구매하고 나면 초기에는 어디에 저장을 할까 고민을 하게 되어 일정한 공간에 저장하지 않아서 결국 다시 구매한 내역에서 다시 다운받기도 한다. 클라우드가 보급되고 사용할 수 있는 용량이 늘어나서 음원 파일을 클라우드에 올려놓기도 했지만 클라우드 서비스가 무료 사용자에게 파일 당 용량 제한을 해서 제대로 사용하지 못하게 되고 다시 고민하게 되기도 한다. 여러가지 우여곡절 끝에 지금은 개인 서버에 저장해서 용량 걱정도 하지 않고 저장하게 되었지만 개인서버에서 매번 연결해서 듣기가 불편하기 때문에 구글 음악 Google Music 에 올려놓고 모바일 기기나 웹브라우저를 통해서 듣게 된다. 그런데 음원 파일을 가수별로 정리를 하고 파일 이름도 내려받은 그대로 사용하기에는 불편함이 있어서 음원을 앨범이나 가수별로 잘 정리를 해주는 iTunes 를 이용한다. 이처럼 필요에 의해서 다양한 서비스나 프로그램을 사용하게 되지만 목표는 하나일 것이다. 그냥 잘 듣고 잘 보관하고 잘 정리했으면 좋겠다.

음원을 받고 나면 거의 동일한 작업이 이루어진다. ① 음원 파일을 내려 받고 음원 파일의 태그 tag 정보를 편집해주는 프로그램으로 불필요한 정보를 지워주고 구글 뮤직에 올려도 비 라틴 문자 non Latin characters 를 제대로 보이게 하기 위해서 편집해준다. (mp3tag 를 사용한다.) ② iTunes 를 열어 음원 파일을 끌어 넣으면 자동으로 iTunes 는 음악가에 따라서 폴더를 형성하고 파일명도 자동으로 정리해서 저장한다. iTunes 는 별도로 음원 파일을 관리해 준다. ( 기본값은 %USERPROFILE%\Music\iTunes\iTunes Media\Music ) ③ 내려받은 음원은 앨범 단위로 압축하고 ④ 압축한 파일들은 특정 클라우드 및 개인 서버에 올리고 ⑤ 올린 파일들은 삭제한다. ⑥ 구글 뮤직에 업로드 하기 위한 프로그램을 실행하면 자동으로 iTunes 에 올린 음원을 구글 뮤직에 업로드해준다. (업로드를 위한 프로그램만 실행하면 된다.)


간단하게 여섯 과정 정도이지만 이런 작업들조차 하고 싶지 않을 정도로 귀찮아지면 음원은 받아 놓고 관리도 안하고 쌓여갈지 모른다. 이런 과정 다 귀찮고 그냥 음원 스트리밍으로 들으면 될 것 아니냐고 하면 별로 할말은 없지만 특정 서비스에 귀속되거나 스트리밍을 통해 발생하는 안 써도 되는 모바일 데이터도 그냥 개인적 취향에 맞지 않다고 하자. 내가 필요로 하는 목적 - 음악을 잘 듣고 싶어요 - 을 이루기 위해 태그도 편집하고 iTunes 에 옮기고 구글 뮤직에도 업로드 하지만 순간 이 모든 것을 맘먹고 하기에 너무 귀찮아지고 하나의 생각이 든다.

"좀 더 편하고 덜 움직일 수 없을까?"

최소한 음악을 고르고 음원은 내려받는 것 까지야 어쩔 수 없다고 해도 특정 폴더에 음악을 내려 받으면 자동으로 모든 과정을 다 해주어 나는 그냥 음악을 구글 뮤직에서 들을 수 없을까 하는 생각이 들었다. 그런 생각의 근원은 아마도 귀찮음일 것이다. 그리고 그 귀찮음은 결국 여러가지 찾아보게 된다. 한번 고생하고 계속 귀찮아 보자

① 당장 자동화할 수 있는 방법이 없어 프로그램 (mp3tag) 를 실행시키고 태그를 편집한다. (사용자 작업: 프로그램 실행 및 편집)
② 편집이 완료된 음원 파일은 iTunes 에 있는 Automatically add to iTunes 폴더로 복사하면 자동으로 iTunes 에 등록된다. (사용자 작업: 복사, 프로그램 실행 필요 없음)
③ 폴더 별로 압축한다. rar 명령어를 이용해서 자동으로 폴더별로 압축 파일을 만들어 놓는다. (사용자 작업 없음) - rar 명령어를 포함하는 스크립트로 폴더 별 압축 파일을 만든다.
④ 압축 파일 *.rar 을 지정된 클라우드와 개인 서버로 동기화 한다. (사용자 작업 없음)
⑤ 동기화 프로그램에서 동기화 이후 압축 파일을 삭제한다. (사용자 작업 없음)
⑥ 구글 뮤직 매니저가 알아서 iTunes 의 변화된 내용을 업로드 한다. (사용자 작업 없음)

동기화 프로그램 GoodSync - 특정 폴더에 변화가 발생하면 동기화를 실행한다.

이 과정에서는 음원을 다운 받아서 MP3 태그를 편집해서 iTunes 의 특정 폴더 (Automatically add to iTunes) 에 복사하면 나머지 과정은 특별히 사용자가 손 댈 필요없이 클라우드에 올려 음원을 백업하는 과정도 구글 뮤직에 올리는 과정도 신경쓸 필요없이 바로 구글 뮤직으로 음악을 즐기면 된다. 이 과정에서 사용자 작업이 필요없는 과정들은 해당 작업이 자동으로 실행되기 위한 방법이 있어야 한다. 예를 들어 특정 폴더에 변화가 생기면 자동으로 특정 작업을 수행하게 된다. 참고로 여기에서 동기화 작업을 위해 GoodSync [ GoodSync ]란 프로그램을 사용한다. 이 정도만 하면 적당히 귀찮지 않을 수 있지만 이제는 귀찮음을 떠나 더 체계적인 구조를 원하게 된다.


Push all behind ...

적절한 그리고 좋은 프로그램은 인간을 좀 더 게으르고 좀 더 편하게 만들 수 있고 잘 조합을 하면 목적을 이룰 수 있을 적당한 (혹은 훌륭한) 수준의 결과를 얻을 수 있다. 바로 앞의 예를 통해서 음원 파일을 받아서 태그만 편집하고 특정 폴더에 넣고 나면 모든 것이 자동으로 이루어지는 편리함도 좋지만 무엇보다 수작업에서 만들어지는 실수를 줄일 수 있다는 것이 더 좋은 점이다. 그런데 이 정도에서 만족하고 그냥 쓸 수 도 있지만 좀 더 욕심이 생기게 되고 귀찮아서 시작한 자동화의 목표는 더 많은 일과 귀찮음을 만들게 되는 역설을 만든다. 좀 더 체계적으로 프로그래밍으로 내가 원하는 섬세한 과정을 만들어 보고 싶은 것이다.

앞의 예들을 통해서 생각해 볼 부분이 바로 자동화 automation 라는 과정 속에서 생각해볼 것이 있다. 우리는 그래픽 환경으로 이루어져 마우스로 키보드로 작업하는 환경에 익숙해져 있다. 눈 앞에 어떤 창이 떠서 내가 원하는 작업을 실행할 수 있는 화면이 있어야 무엇인가 할 수 있다. 그런 그래픽 환경에서는 사용자가 어떤 입력을 원하는지 대기하고 있어야 한다. 그렇기 때문에 사용자를 귀찮게 한다. 그래서 알아서 자동화가 이루어진다는 것은 사용자 눈앞에 '어떻게 해주세요' 라고 명령을 기다리는 것이 아니라 정해진 조건이 충족되면 정해진 작업을 알아서 해야 하고 그렇기 때문에 그래픽 환경의 작업은 적당하지 않다는 것을 알 수 있다. 오히려 사용자가 원하는 작업을 자동으로 할 수 있는 명령어들로 실행되어야 한다. 이러한 환경을 그래픽 사용자 환경 (GUI; Graphic User Interface) 와 대비되어 명령어줄 환경 (CLI; Command Line Interface) 라고 부른다. 그래픽 환경이 사용자들이 작업하기 편리할 수 있지만 사용자의 선택을 기다려야 prompt 하기 때문에 사용자의 반복적인 작업에서는 오히려 더 불편할 수 있다.

명령어줄 환경

예를 들어 여러 파일들이 들어있는 폴더에서 파일명을 일괄적으로 다 바꿔버리고 싶을 때 원도우에서 어떻게 바꿔야 하는지 난감할 때가 있다. 파일명 변경을 원하는 파일들을 모두 선택하고 (Ctrl-A) 파일변경 단축키 (F2) 를 누르고 탭 (Tab) 을 누르면 순차적인 번호를 붙이며 변경될 수 있지만 옛 도스 DOS 시절 와일드 카드 문자 wild card characters 로 더 편리하고 유연한 변경이 가능하다는 것을 생각해보면 그래픽 환경이 편리하다고 보기 어려울 때가 많다. 특히 정해지고 반복된 작업들 대량의 데이터를 처리하는 과정은 더욱 더 그렇다. 그래서 원도우도 이런 작업을 할 수 있도록 명령어를 통해 작업할 수 있도록 하기도 하고 기능을 더 확장해 사용자가 그래픽 환경없이도 원하는 작업을 수행할 수 있도록 한다. 다른 예로 네트워크 환경에서 새롭게 IP 주소를 받고 싶을 때 원도우 그래픽 환경에서는 네트워크에 관련된 설정 화면을 들어가서 해당 버튼을 눌러 작업을 할 수 있지만 명령어 줄로는 ipconfig /renew 로 명령을 하면 화면을 찾아 들어갔던 작업을 바로 실행할 수 있기 때문이다.

기본적으로 리눅스는 그래픽 환경도 제공하지만 주된 작업은 명령어줄로 이루어진다. 그래서 간단한 명령어만으로도 설정 settings 이나 구성 configuration 을 할 수 있다. 외부에서 서버로 접근해서 원격으로 관리하는데 명령어줄 환경은 아주 큰 장점이다. 그래픽 환경이 필요한 경우라면 원격 서버를 화면으로 뜨게 해서 관리해야 하지만 명령어줄은 간단하게 텍스트로만 들어갈 수 있는 터미널로 접속해서 명령어로 거의 대부분을 관리할 수 있다. 원격 서버의 화면을 멀리서 불러오는데 네트워크 속도가 좋지 않다면 제대로 보여주지 못할 수도 있고 보안 상으로도 불리하다.


Back-front workflows ... 

만약 원도우나 맥에서 일반 사용자들이 하는 작업들을 모두 명령어줄로 해결할 수 있다면 앞서 예를 든 음원 파일의 관리처럼 특정 조건 trigger 이 발생하면 필요한 작업 action 을 실행하도록 하고 작업에 필요한 명령어가 존재해서 그래픽 환경을 요구하지 않는다면 어떨지 상상해 본다.

안드로이드 기기 안에서는 앞서 설명한 것처럼 자동화가 광범위하게 가능하다. 필요하다면 아주 섬세한 수준까지 가능하다 예를 들어 평소에 밝기 수준을 낮게 했다가 이북 리더를 실행시켜 읽는다면 화면 밝기를 독서에 좋은 화면 밝기로 유지하고 자동으로 화면이 어두워지거나 꺼지는 것도 끄거나 길게 변경하고 알람도 소리없이 진동만 유지하도록 할 수 있다. 그리고 사용자가 설정하기 어려운 시스템 단위의 설정도 특별한 권한 root 을 가지고 있다면 리눅스 서버와 같이 사용할 수도 있다. 웹서비스와 클라우드 저장 공간은 이러한 개념으로 확장할 수 있다. 클라우드에 저장된 데이터를 특정 웹서비스에 자동으로 처리하게 해서 자신이 원하는 파일 형태로 유지할 수 있다. 예를 들어 녹음 파일이 wav 포맷으로 저장되어 있는데 필요에 의해 mp3 로 유지하고 싶다면 파일포맷을 변경해주는 웹서비스를 통해서 자신이 클라우드에 가지고 있는 파일들을 일괄적으로 변환할 수도 있다. 웹서비스 사이에서의 데이터의 교환과 유지도 가능하다.


그래서 자연스럽게 원도우나 다른 운영체제에서도 비슷한 자동화 작업이 가능하지 않을까 생각하게 된다. 전혀 없는 것은 아니지만 그렇게 만족스러운 것은 아니다. 동영상을 볼 때는 화면 밝기를 최대로 바꾸고 싶을 수 있다. 방법이 없는 것은 아니다. 원도우는 기본적으로 전원 프로파일 power profiles 를 가지고 있고 전원에 관련된 설정을 변경할 수 있는 powercfg 명령어가 존재하기는 하지만 문제는 조건과 실행을 연결해서 관리할 수 있는 구조가 편리하게 있는지 살펴봐야 한다. 물론 방법이 전혀 없는 것은 아니다. 기본적으로 명령어들이 있고 powershell 이란 참 괜찮은 도구도 있지만 사용하기 익숙하지 않기도 하고 근본적으로 그래픽 환경의 운영체제는 자동화 작업 automatic workflows 이 필요한 환경이 아닐 수 있지 않을까 생각해 볼 필요가 있다.

그러나 여전히 반복 작업은 존재한다. 개인적으로 웹에 올리기 위해 필요한 이미지 파일들을 압축해서 용량을 줄이고 올리고 싶은 욕심이 생겼다. 웹에 올리기 위해 이미지 파일들을 내려받고 이미지 압축을 해주는 도구를 사용해서 압축을 하고 올리면 된다. 이때 다양한 도구들이 있다. 웹서비스도 많아서 쉽게 사용할 수 있지만 해당 서비스에 들어가서 내려받은 파일들을 올려서 압축하고 다시 압축된 결과물을 내려받아야 한다. 이 과정조차도 귀찮다고 생각해서 방법이 없을지 찾아보았다. 쉽게 말해 웹서비스에 접속을 해서 압축을 하고 내려 받는 과정을 명령어로 해결할 수 없을지 찾아보게 되는 것이다. 당연히 방법이 있다. 개인적으로 사용하는 서비스인 TinyPNG [ TinyPNG ] 에 들어가면 개발자 API Developer API 를 제공해준다. 개발자 API 를 통해서 특정 폴더에 있는 이미지 파일들을 한번에 압축해서 결과물을 만들 수 있다. 따라서 자동화 작업 과정을 다음과 같이 설계할 수 있다.

ⓐ 이미지 파일을 특정 폴더에 내려 받는다. → ⓑ 폴더에 변화가 발생하면 이미지 압축을 위한 명령어를 실행한다. 폴더 내에 있는 모든 이미지 파일을 압축한다. 이미 압축된 이미지 파일이 있다면 더이상 압축이 되지 않고 그대로 남아 있는다. → ⓒ 압축된 결과물을 블로그 등 개인적 용도로 사용한다.

품질 변화를 최소로 하며 이미지 크기를 줄여주는 TinyPNG 서비스의 개발자 API

반복적으로 실행되는 작업들은 실제로 사용자의 주의 (혹은 참여) attention 가 필요하지 않다면 컴퓨터는 보여주지 않고 백그라운드 background 에서 작업을 끝내는 것이다. 예전에 웹서버나 데이터베이스서버를 백엔드 오피스 back-end office 라고 부르고 워드나 엑셀과 같은 프로그램을 프론트엔드 오피스 font-end office 라고 부른 적이 있다. 백엔드 back-end 는 주로 기반 fundamental 서비스에 해당하고 워드나 엑셀과 같이 키보드로 입력하고 마우스로 작업해서 사용자가 필요했던 오피스를 프론트엔드로 불렀다. 그러나 이제 자동화 작업이 가능해지고 유연해진다면 사용자가 필요한 작업을 정의 define 하고 반복적인 작업을 줄일 수 있다. 이런 의미에서 실행해서 돌아가는 것은 background 이지만 실제 작업의 성격은 frond-end 의 내용이기 때문에 백-프론트 작업 back-front workflows 이라 부르고 싶다.


Lean Computing as Practical ... 

이제서야 제목에 나온 Lean Computing (충분한 한국어 표현을 찾지 못해 그대로 영문으로 표현한다.) 에 대해 설명하게 된다. Lean 은 '결핍'이란 뜻도 있고 '기대다'란 뜻도 있다. 그러나 여기에서는 아마도 '군살없는' 정도가 아닐까 싶다. 즉, 사용자가 원하는 작업을 할 수 있는 충분한 자원을 대기해 놓고 작업하는 것이 아니라 작업에 필요한 적당한 수준을 유지하며 사용하는 것이다. 게임을 주로 하는 사용자와 계산을 주로 하는 컴퓨터 작업을 떠나서 일상적인 작업들을 해결하기 위해 필요한 컴퓨터는 이제 충분한 자원을 가지고 있다고 본다. 그리고 그 반증이 이미 많은 스마트폰이 일반 컴퓨터가 할 수 있는 작업의 영역을 포함할 수 있게 되었고 일부는 오히려 스마트폰이 더 장점을 가지는 경우가 많다. (지역기반이나 모바일 환경 등) 따라서 더 좋은 컴퓨터 기술과 자원을 챙겨 놓고 컴퓨터를 사용하는 과정이 아니라 적당한 자원을 가지는 다양한 기기들을 통해 컴퓨팅 환경을 구축할 수 있지 않을까 생각한 것이다.

그래서 Lean Computing 이 구축되기 위해서는 두가지를 먼저 충족시켜야 한다.

1. 하드웨어 성능을 최적화할 수 있는 소프트웨어 환경이 존재해야 한다.

다양한 커스텀 롬으로 하드웨어 성능을 최적화 한다.

안드로이드 초기 버전을 쓰다보면 안드로이드에 대한 많은 실망을 하게 되는 경우가 많다. 하드웨어의 문제인 경우에는 어쩔 수 없지만 충분히 사용할 수 있는 하드웨어지만 소프트웨어 특히 운영체제의 최적화가 이루어지지 않아서 제대로 사용할 수 없는 경우도 많기 때문이다. 그래서 너무 오래되거나 호환되지 않는 하드웨어는 제외한 여러 기기의 다양한 커스텀 롬들이 나오는 것을 보면 여전히 구형 하드웨어를 돌릴 수 있는 충분한 소프트웨어 개발 가능성이 존재한다는 것을 알게 된다. 그리고 LineageOS 와 같은 개발 공간을 보면 5~6년이 넘어가는 기기들도 충분히 쓸 수 있도록 롬을 제공하고 있다. 어떤 기기들은 커스텀 롬을 설치하고 예전에는 볼 수 없던 성능과 사용 편의성을 가져오는 경우도 많이 볼 수 있다.

2. 자동화 작업을 극대화할 수 있는 사용자 환경이 존재해야 한다.

사용할 수 있는 기기의 충분한 최적화가 이루어졌다면 기기들이 실행해야 하는 작업을 최소화할 수 있는 자동화 작업 환경이 필요하다. 앞에서 본 이미지 파일 압축 과정을 스마트폰에서 할 수 없는 것은 아니다. 스마트폰도 웹브라우저에 접근할 수 있기 때문이다. 그러나 만약 이미지를 내려받고 웹브라우저를 실행하고 해당 파일을 웹에 올리고 내려받는 과정을 스마트폰에서 한다면 분명 느리고 불편하고 때로는 원하는 작업을 성공하지 못할 수 있다. 그러나 자신의 서버에 특정 폴더를 만들어 놓고 해당 폴더에 이미지를 올리기만 한다면 (복사) 자동화 작업을 통해서 특정 폴더에 있는 파일들을 알아서 압축해서 만들어 놓아 준다면 스마트기기는 아주 간단하게 복사할 능력정도만 되는 구형 스마트폰이라도 충분히 가능하다는 것이다.


그래서 처음 의도에서 Lean Computing 의 Lean 이 '군살없는' 뜻이였지만 실제로는 '기대어'라는 뜻도 통하게 된다. 사용자의 모든 작업들을 한 기기에서 하기 위해서라면 최신 핸드폰만이 살아남을 수 있지만 자동화 작업을 잘 만들어 놓는다면 구형 스마트폰도 사용 가치를 가지게 될 것이다. 그리고 사용 가치란 제품 혹은 기기 자체가 만들어 내는 것이 아니라 그 기기를 어떻게 쓸 수 있는지 고민하고 상상하는 과정에서 오히려 인간의 상상으로 더 극대화 된다는 사실은 강조하지 않아도 충분할 것이다.


Your Highness, Performance ... 

한동안 고성능 컴퓨팅 High Performance Computing 환경이 주목받았던 적이 있었다. 여전히 중요한 분야이긴 하다. 계산과학에서는 계산하기 효율이 떨어지는 문제를 어떻게 잘 변환해서 빨리 풀 수 있는 문제로 바꿀지 심지어 그런 것도 잘 해결이 되지 않아 결국 무조건 계산해도 언제 해결될지 모르는 많은 문제들을 풀기 위해서는 분명 빠르게 계산하는 고성능의 컴퓨터가 필요할 때도 있다. 그러나 일상 생활에서 사용자들이 필요한 고성능은 아니다. 역설적으로 컴퓨터 하드웨어가 이렇게 빠르게 발전해도 부팅하는데 얼마나 걸리는지 얼마나 빨리 파일을 복사하는 성능에 크게 관심가지지 않는다. 오히려 사용자의 작업을 관찰해 보면 충분히 자동화 작업으로 금방할 수 있는 작업들을 컴퓨터라는 작업공간만 빌려 사용하는 경우가 많다.

충분히 자동화가 가능한 영역이 왜 사용자의 진부한 수작업으로 여전히 이루어지고 있는지 생각해보면 자동화가 가져다 줄 수 있는 가능성 뿐만 아니라 인공지능 영역이 자율형주행시스템이나 바둑같은 엄청난 능력(?)을 가지는 것이 아니라 오히려 인간의 사용자 영역 앞서 표현한 프론트엔드 front-end 영역에 더 큰 가능성을 보여주고 있다고 생각한다. 자동화 작업의 가장 큰 장애는 그렇게 자동화 작업을 제대로 할 수 있는 명령어가 무엇인지 그리고 실행하다 생기는 예외에 대해서 어떻게 처리할지 exception handling 확신할 수 없었기 때문에 여전히 사용자들은 자동화 실행 과정을 믿지 못하는 것도 있다. 만약 적당한 능력의 인공지능을 가지는 기기가 존재한다면 특별히 모든 기기들이 똑똑해질 필요가 없다고 생각한다. 앞서 설명한 것처럼 최소한의 작업만 할 수 있는 기기들이라면 적당히 똑똑한 기기와 통신할 수 있는 능력만 존재한다면 전체 네트워크의 기기는 충분히 똑똑해(?) 질 것이라 예상한다.

음성 명령의 최종 목표는 무엇인가?

결국 Lean Computing 의 핵심은 기기들의 최적화도 필요하지만 기기 자체에서 해결할 수 없는 문제나 컴퓨팅 능력이 필요한 문제 해결은 어떤 특정 기기에 의존해야 한다는 것이다. 지금은 검색엔진이라는 조금 대화 능력이 떨어지는 아주 괜찮은 성능의 기기가 있지만 개인의 작업 내용까지 구글이 해결해줄 수 있는 것은 아니다. 예를 들어 "구글 내 이미지 파일들을 웹에 올리기에 적당하게 압축해줘!" 라고 명령을 내린다면 지금은 그냥 그렇게 할 수 있는 방법정도를 검색엔진에서 찾아서 검색 내용만 보여줄 것이다. 그러나 만약 적당히 컴퓨팅 능력을 가지는 서버를 자신의 네트워크에 놓고 자신이 자주 반복적으로 하는 내용을 자동화 작업으로 만들어 놓는다면 복사만 하면 된다. 좀더 멋지게(?) 구축하고 싶다. 기기에 음성 명령으로

"알파 기기 (임의의 기기)에 있는 이미지 폴더의 이미지 파일들을 솔라 서버 (임의의 서버이름) 이미지 압축 작업에 올려줘"

대상 (기기 및 폴더 이름 등) 을 정의내리면 아마 영화에서 보는 작업을 멋지게 할 수 있을 것이다. (지금도 전혀 불가능하지 않다. 구글 어시스턴트 Google Assistant 와 태스커 Tasker 를 연결하면 된다.)


What further next ... 

글이 너무 길어지기 때문에 모든 자동화 작업 및 실행 automatic workflows & execution 을 웹으로 올려서 설계할 수 없을까? 하는 내용은 이 글을 통해 소개하기 어려울 것 같다. 웹의 발전 과정을 보면 2차세계대전의 핵개발보다 더 빠른 것이 아닐까 싶어진다. 한때는 웹에서 채팅을 한다는 것은 정말 인내심을 요구하고 이래서 '온라인 데이트는 성공할 수 없어'란 한숨을 들었지만 이제는 거의 실시간으로 대화하는 것 뿐만 아니라 대화 환경 내부에서 여러 개발자들끼리 작업을 해서 웹서비스를 개발할 수도 있는 세상이 되어버렸다. 이제 거의 대부분 사용자 작업은 웹에서 거의 모두 가능하게 되고 개인 컴퓨터에서 필요한 컴퓨팅 능력은 크게 향상되지 않아도 된다. 개인적으로도 10년 가까이 되는 고물이 되어가는 노트북이 있지만 여전히 Windows 10 을 돌리기도 충분하고 거의 대부분의 작업을 웹에서 하기 때문에 별 무리없이 사용하고 있다. 점점 웹 (클라우드 포함)이나 서버에 컴퓨팅 능력을 의존하게 되기 때문에 사용자가 눈 앞에서 작업하는 컴퓨터에게 요구하는 능력이 그리 크지 않아도 된다.


그런 의미에서 궁극적으로 지금 당장 생각할 수 있는 Lean Computing 의 도착점웹 환경에서 이루어지는 자동화 작업이라고 생각한다. 웹에서 자동화 작업은 오히려 원도우 환경보다 더 수월할 수 있다. 특히 리눅스 서버 환경에서는 많은 개발자들이 문제 해결을 위해서 명령어줄 환경에서 만들어 놓은 뛰어난 스크립트 나 프로그램이 존재한다. 심지어 대부분 사용에 큰 제한도 없는 오픈 소스이기 때문에 개인적 필요에 의해서는 자유로운 편집으로 개인에게 맞게 고칠 수도 있다. 그래서 원도우 환경과 같은 그래픽 환경보다 오히려 웹 환경은 자동화 작업 및 실행을 위해 더 유리한 환경이라 생각한다.

Lean Computing 에 대한 소개는 마무리하며 앞으로는 웹에서 자동화 작업이 이루어지는 과정과 왜 점점 개인화되는 컴퓨팅 환경이 필요한지에 대한 내용으로 이어갈 예정이다.


0 comments:

Post a Comment