※주의 : 정리 없음 2

먼저 결론을 말하자면

전국민은 프로그래밍이 아니라 데이터를 정리하는 방법을 배워야한다.

, 그것이 프로그래밍에 알맞는 방법으로 정리하는 방법을 배워야한다.

더 쉽게 말하면 구조화, 모듈화, 정형화, 등등… 같은 맥락의 의미를 가진 단어를 생각하시면 된다.

평소에 이런 생각은 늘 하고 다녀서 언젠가는 글로 써야지 생각만 하다가

얼마전 중소기업 엑셀 데이터를 정리 해달라는 회계사의 간단한 부탁을 듣고 일을 하면서

얼마나 혐오스러운 데이터를 고급인력이 노가다를 하고 있는지 그 처참한 현상을 알 수 있게 되었다.

부탁의 내용

우선 데이터는

제품 코드 생산 회사 재료 단가 제품 코드 소요량 세부 재료 목록              
제품 1                          
AAA 회사1 원자재 23 A08BXP-01H 0.1 A-01 A-02 A-03 A-05        
AAA-29 회사1 부자재 23 A08BXP-01H 2 GB02J-21 AT-022 KQ-098 TTY-112 LAK-01 QO-12    
BG - PO2 회사2 부자재 23 A08BXP-01H 0.15 GB02JDDO-29 KL0-02 DF-1-03          

대략 이런식이며 반복되는 구조다.

한 눈에 봐도 데이터의 축, 즉 Axile이 여러개인 데이터다.

‘제품 1’을 만들기 위한 원자재와 부자재 그리고

원자재와 부자재를 만들기 위한 세부 자료를 만들기 위해 필요한 재료가 담긴 데이터가 있다.

얼핏보면 잘 만든 데이터 셋 같고 하나의 행에 어떤 세부 재료가 필요한지 한눈에 파악하기 쉽고

또 액셀의 도구를 사용하면 원하는 제품의 재료들을 한눈에 볼 수 있다.

하지만, 세부 재료에 따라 데이터를 재구조화 하기에는 여러 축(Axile)이 하나로 압축되어 있기 때문에 불편한 구조다.

여기서 말하는 축은

(1) 최종 제품을 의미하는 ‘제품 1’

(2) ‘제품 1’을 만들기 위해 필요한 제품들(AAA, AAA-29, BG-PO2)

(2) - 1 ‘AAA’를 만들기 위해서 생산회사, 재료, 단가, 제품 코드

(2) - 1 - 1 ‘AAA’를 만들기 위해서 또 필요한 세부 재료들(A-01, A-02, …)을 의미한다.

무엇보다 엑셀이라는 독자규격 내 엑셀의 기능을 이용해서 분류했기 때문에

다른 툴 혹은 프로그래밍 언어의 라이브러리를 이용한 활용이 상당히 불편하다.

그리고 무엇보다 더 최악은 저 모든 것이 하드 코딩, 즉 참조(reference)된 데이터가 아니기 때문에

데이터의 변화에 취약하다는 것이었다.

..

나에게 도움을 요청한 회계사의 부탁은

세부 재료의 동일한 계열(예를 들어 GFSDF-(색깔 코드)-23 이런식으로 되어 있으면 색깔 코드 별로 반복해서 엑셀 데이터를 만들어 달라는 것)로 나누는 것인데

원본 데이터는 사람이 직접 손으로 입력하면서 중복된 값이 있거나,

색을 의미하는 재료 코드 중에 Variation이 있는 재료의 이름에 있는 한글 ‘칼러(color)’를 ‘컬러’, ‘컬라’ 이런식으로 작성되어있는 등

사람이 직접 손으로 데이터를 작성함으로 인해 발생하는 문제들이 많았다.

그래서 무엇이 문제이냐면

문제는 단순하다.

업계의 표준과 같다고 생각한 엑셀 그 자체가 문제다.

엑셀은 X, Y 축 그리고 시트(sheet)로 3개의 축이 있다.

물론 엑셀 기능을 통해 예를 들어서 직원 데이터를 만들 경우

성별 / 직급 / 팀 / 입사 시기 / 연봉 / 등등…

많은 데이터를 2 차원으로 넣을 수 있다.

하지만, 위에 예시로 보여준 것과 같이 하나의 값 타입이 아닌

여러개의 데이터가 필요한 경우 (흔히 List, Array 데이터가 필요한 경우) 2차원의 엑셀은 한계를 맞이한다.

!세부재료:$B4처럼 따로 시트를 만들어 참조를 할 수 있다.

말처럼 쉽게 해결할 수 있는 문제도 있지만,

이렇게 하나의 줄에는 어떤 데이터가 들어가 있고, 어떤 열에는 어떤 데이터가 들어갈지

스키마(scheme)를 짤 수 있는 생각을 잘 하지 못하는 것이 크다.

프로그래밍 이론이 경험의 누적을 통해서 지금 현재 객체지향 언어에서 역할 모델(Actor model)을 통해

클래스, 인터페이스, 추상 클래스를 만들었듯이 엑셀 또한 그래야하지만

엑셀을 사용하는 산업 현장에서 가지고 있는 관습 그리고

추후 나중에 이 데이터를 활용할 수 있는 유연한 데이터 구조를 만들 수 있는 능력이 없기 때문에

CPA 시험에 합격한 고급 인력이 엑셀에 매달려 밤을 새가면서 데이터를 정제, 재구축하는 짓이 일어나는 것이다.

한국의 프로그래밍 교육 방향성

이제 한국 뿐만 아니라 전 세계가 프로그래밍 없이는 돌아가지 않는 다는 것을 알고

전세계적으로 프로그래밍 교육의 보편화가 이루어진 것은 좋다.

하지만, 그 보다 중요한 것은 데이터를 어떻게 깔끔하게 만드는 것을 배우는 것이다.

정책의 의도는 좋은나, 현실적으로 필요한 능력과 모든 한국 국민의 협조는 데이터를 잘 만드는 것이다.

데이터를 잘 만든다고 전처리가 필요 없을 정도로 만드는 것이 아니고

다만, 데이터를 가공하는 사람의 입장에서 상식선에서 만드는 방법을 배우는 것이다.

물론 각자의 도메인에 있으면서 만들어지는 데이터는 가지각색이다.

위에 예시로 만든 데이터처럼 겉보기에는 합리적인 데이터가 만들어 질 수 있고

이름이 너무 많아 중복과 오타가 발생할 수 있다.

또한 알수 없는 코드지만 예를 들어

ASBBF094-A, ASBBF994-A, ASBBF221-E, ASBBF221-A

이런 데이터가 있을 경우

각자 고유의 데이터가 있는 것처럼 데이터를 파악하는게 아니라

ASBBF(Family code) 094(Number code) - A(Product code) 와 같이 같은 코드 내에서도 분류를 통해서

데이터를 더 용이하게 파악할 수 있도록 만들 수 있게

데이터의 특징을 미리 기입해, 입력시 오류나 오타를 방지하는 것이다.

모든 사람이 프로그래밍을 잘한다고 한국의 산업계가 발전하는 것이 아니다.

현실적으로 유용한 데이터와 관련된 프로그램을 만드는 것은 소수의 사람에 불과하고

일반적인 사람은 프로그램을 구입해 프로그램 구입에 들인 비용에 비해 더 많은 가치를 창출하는 것이 선순환적으로 돌아가야한다.

데이터를 개같이 만들고 회계사를 불러 몇 억씩 주면서 CPA 자격증이 있는 고급인력을 노가다로 돌리는 것은 잘못된 것이다.

정부에서 OpenAPI, 그리고 공개 데이터라고 데이터를 제공하는 것을 봤는데

공무원들이 쓴 돈의 내역(흔히 지역 맛집 찾는데 사용하는)이 담긴 데이터만 봐도

같은 서울시, 서초구, 서초동의 동사무소 각각 다른 부서가 만든 데이터는

pdf, 엑셀, 한셀, hwp, 워드, 등 제각각의 형식으로 올라와 있다.

이딴식으로 데이터를 만들어 놓고 데이터 댐이라는 보여주기 정치를 하고 있으니

데이터 강국이라는 소리를 하면 부끄러워 미칠 지경이다.

그나마 간단한 데이터의 경우 파일 확장자에 따라 전처리를 하면 그만이지만,

같은 데이터를 두고 제각각 다른 축의 데이터를 만들면 (예를 들어 하수처리 데이터가 있으면 어떤 곳은 산소포화도가 있고 어떤 곳은 없는)

거기에 따른 비용이 발생한다.

책임의 분산이 필수적이다

좋은 데이터를 만들기 위해선 일정한 표준이 필요하다.

표준을 통해서 인류는 불필요한 자원(개발에 들이는 시간과 노동력도 포함된다)을 줄일 수 있었다.

우리가 흔히 여행갈 때 열 받는 것이 콘센트(돼지코 110v vs 둥글코 220v)인 것처럼

일정한 표준이 있어야 빅데이터의 의미가 생긴다.

재활용의 경우 페트병 라벨을 공장에서 떼어낸 체로 출품하도록 허가하는 법의 지원과

최종적으로 소비하는 소비자가 물을 마시고 라벨을 떼야하는 책임의 전가가 있어왔다.

마찬가지로 데이터를 만들 때 현재의 상황은

데이터를 ㅈ같이 만들어 놓고 빅데이터 사회이에염 뿌뿌 ㅇㅈㄹ하는 꼴을 보고 있다는 것이다.

쉬운 이해를 위해 비유를 들자면 페트병 라벨을 이중 삼중으로 감아 놓은 페트병을 만들어 파는 것과 같다.

빅데이터를 위한 사회를 위해선 데이터를 만드는

각자의 도메인에 종사하는 직원들, 즉 회사에 엑셀을 다루는 직원들이 잘 만들어야 한다.

현재 국가에서는 데이터를 어떻게하면 잘 분류하는지를 잘 가르쳐야 한다.

이 모든것을 통틀어서 추상화(Abstraction)일반화(Generalization)를 가치는 것은 상당히 어려운 것이다.

꼴에 대학생이라고 추상 클래스의 존재 의의도 모르는 애들이 태반이니 초중고,

그리고 필수 교육과정에서 가르친다는 것은 인류를 한 단계 진화하는 수준의 난이도와 같다고 할 수 있다.

우리는 잘 만드는 것이 아닌 잘 사용하는 사회로 진입하고 있다

우리는 점점 프로그램을 잘 사용하는 사회로 진입하고 있다.

잘 만드는 것은 대체로 수학처럼 위상수학을 공부하기 위해서 특정 기업의 프로그램을 알아 할 수 있는게 아닌 것처럼

본질(essence) 그 자체를 배울 수 있는 것에 가깝다.

상투적으로 말하면 ‘어떤 회사가 망하면 그게 없어지느냐?’라고 물을 때 ‘아니오’라고 답이 나오면 ‘잘 만드는 것’에 가깝다.

워드, 엑셀, 파워포인트

전세계적으로 통용되는 하나의 표준처럼 자리를 잘 잡았지만 한 회사로부터 만들어 진것이다.

우리는 워드를 잘 활용하는 것에 초점에 맞춰져 있지 워드 자체를 만드는 것에 초점을 두지 않는다.

마찬가지로 프로그래밍을 배워서 잘 활용하는 것은 좋지만,

기업에서 만든 데이터 분석 툴을 잘 활용할 수 있게끔 데이터를 미리 잘 만드는 것에 초점을 둬야한다.

모두가 프로그래밍을 해야한다고 생각하지 않는다.

다만, 프로그램을 잘 활용할 수만 있다면 그것으로 충분하다.

이렇게 글로 쓰는 것도 말로 전달하는 것에 비해 왜곡될 여지가 많을 것 같다.

추상적인 지식일 수록 더욱 더 구체적으로 설명해야하는 이 아이러니함은 글로 표현하기에 한참 부족하다.