2020. 12. 14. 14:33ㆍ웹서비스
공장을 생각해보자. 어느 공장인지는 알고 있는 공장, 마음에 드는 제품을 만드는 공장, TV에 많이 나온 공장 등등 아무 공장이나 좋다. 작은 공장도 상관없고, 개인이 하는 공방도 상관없다. 나도 공장에서 어떤 프로세스로 제품을 만드는지 직접 보지는 못해서 어떻게 제품이 만들어지는지는 일반적인 생각과 감으로 알고 있을 뿐이다.
공장이라고 하기에는 조금 많이 부족하지만, 3D 프린팅을 시도한 적이 있다. 3D 프린터 제조부터 제품까지 한 공정의 경험을 잠시 이야기로 풀겠다.
3D 프린팅에 대한 기술이 들어온 지 3,4년 정도 지난해였다. 핫이슈까지는 아니더라도, 미래 육성 기술이라고 간간히 매스컴에 소개되는 정도였다. 한참 사업거리를 찾던 중에 Adult Toy가 유행을 달릴 때 3D 프린팅으로 제조하면 좋지 않을까 하는 상상으로 시작했다.
3D 프린트 완제품의 가격은 천차만별이다. 아무리 싸도 100만 원은 훌쩍 넘기고, 몇천, 몇억 대까지 하는 장비들이 즐비했다. 몇천, 몇억은 거들떠보지도 않고, 저렴하게 시도하려니 100만 원도 너무 비싸 보여 직접 조립하기로 했다. 예전부터 프라모델 조립이나, 전자기기 조립은 어줍지만 자신이 있어서 이틀이면 완성할 수 있을 것 같았다.
3D 프린트 Kit을 20만 원대에 사서 유튜브와 설명서에 나와 있는 절차대로 하나하나 만들기 시작한 지 1주일 만에 완성하였다. 뼈대만 있는 기계인데도 자잘한 부품이 많고, 수평 유지, LCD 화면 회로 연결 등 생각보다 쉽지 않은 작업이었다. (지금도 있는지는 몰라도 이 당시에는 3D 프린트 제작 자격증까지 있었다. 뭐 하나만 유행을 타면 바로 자격증이라는 것이 생기는 게 개인적으로 마음에 들지 않는다.)
절차대로 진행하지 않으면 LCD 화면이 나오지 않거나, 수평이 맞지 않고, 노즐이 위아래 좌우로 이상하게 움직였다. 그럴 때마다 다시 분해하고 설명서를 다시 보고 제대로 절차대로 했는지 확인했다. 분해를 10번은 넘게 하고 다시 조립하기를 반복했다.
3D 프린팅 기계 하나 만드는데도 이렇게나 어렵고 고된 작업인데, 자동차 같은 대형 기계를 혼자서 만든다는 건 생각할 수도 없는 일이다. 차체, 엔진, 계기판, 브레이크, 기어, 연료, 가스 분출, 핸들 조작, 타이어 등등 차량에 들어가는 모든 부품들을 혼자서 만드는 건 생각만 해도 머리가 지끈거린다.
이런 차량의 경우에는 차체를 만드는 업체, 엔진을 만드는 업체, 기어만 만드는 업체, 타이어만 만드는 업체 등등 각기 다른 업체에서 생산한 부품들을 조립하여 완성품을 만들어 낸다.
공방이나 소규모 공장(수공업 등)을 생각해 보면, 3D 프린팅을 직접 만드는 것처럼 하나부터 열까지 사람의 손을 거쳐 제품이 완성된다. 완성된 제품에 문제가 생기면 폐기하거나 다시 분해해서 재작업을 해야 한다. 이런 수공업적인 상품은 대량생산은 불가능하고, 시간도 많이 걸린다. 그리고 한번 만들면 되돌리기가 쉽지가 않다.
대량 생산이 가능한 공장은 대부분 기계를 이용하여 조립하는 경우가 많다. 필요한 부품들은 이미 제작되어 있어 조립만으로 빠르게 완성품을 만든다. 완성된 제품에 하자가 생기면 하자가 있는 부품만 교체하면 된다. 수공업처럼 폐기하거나, 다시 분해해서 재작업하지는 않는다. 부품을 교체하기 위해 조립을 분해하는 경우는 있어도 모든 것을 분해하지는 않는다.
프로그래밍 개발에도 이와 비슷한 방식으로 개발을 한다. 수공업처럼 하나부터 열까지 절차대로 직접 개발하는 방식을 절차적 프로그래밍(Procedural Programming)이라고 한다. 대표적으로 C언어로 개발되는 프로그램으로 순차적으로 흐름을 만들고 흐름에 맞는 프로그램을 개발하는 방식이다. 중간에 변경되어야 한다면, 변경되는 중간부터 다시 만들어야 한다. 개발 시간도 오래 걸리고, 한번 만들어지면 수정이나 유지보수도 힘들다. 과거에는 이런 방식으로 개발했기 때문에 코드의 라인수(line)가 굉장히 길었다. 라인 수 길이로 경쟁했던 때도 있었다. 라인 수 길이가 그 사람의 실력을 가늠하는 척도였었다.
공장 조립 방식의 대량 생산처럼 조립만 하고, 수정이 필요한 부분만 교체할 수 있고, 개발 시간을 줄일 수 있는 방법으로 객체지향 프로그래밍(Object Oriented Programming - OOP)방식이 개발되었다. 대표적으로 JAVA, C++ 언어가 있다. 절차적 프로그래밍처럼 하나부터 열까지 일일이 개발하지 않아도 된다. 기능 단위별로 미리 만들어 놓고, 이를 사용하여 조립하는 방식이라고 생각하면 된다. 기능 단위별로 미리 만들어 놓은 것을 객체(Object)라고 하고, 이 객체들을 엮어서 완성된 프로그램을 만든다.
내 방을 꾸민다고 생각해 보자. 책상, 의자, 책장, 침대, 매트리스, 이불, 베개가 있어야 한다. 절차적 프로그램 방식으로 하면 DIY을 제작하 듯 일일이 만들어야 한다. 책상, 의자, 침대 뼈대, 책장에 필요한 나무를 구해서 일일이 자르고 붙여야 하고, 매트리스에 필요한 용수철, 철, 커버를 만들고, 이불에 필요한 솜과 원단을 구해서 만들어야 한다. 한번 만들고 나면 다시 분해해서 만들기란 쉽지 않다. 또한 색상이나, 크기가 마음에 들지 않는다고 교체하는 것도 힘들다.
객체지향 프로그램으로 생각하면 의자, 책상, 책장, 침대, 매트리스, 이불, 베개가 각각의 객체(Object)이고, 누군가가 또는 어느 회사가 미리 만들어 놓은 것을 구매하면 된다. 이런 객체들을 내방 공간에 배치만 하면 끝이다. 배치했는데 색상이나, 크기가 마음에 들지 않으면 다른 것을 구매해서 배치하면 된다. 변경이나 수정이 용이하다.
방 꾸미기에서 살펴봤듯이 절차적 프로그램은 전체 구조보다는 소품 제작에 시간을 더 사용한다. 전체 구조는 한번 생각하면 그걸로 끝이다. 그 구조에 맞는 소품을 제작해야 하기 때문이다. 객체지향 프로그램은 소품 제작에 시간을 많이 쓰지 않고, 전체 구조에 좀 더 시간을 쓸 수 있다.
현재는 절차적 프로그래밍보다는 객체지향 프로그래밍으로 거의 대부분 개발되고 있고, 몸(절차적)보다는 머리(객체지향적)가 고생하는 개발방식이다.
Background Photo by Charles Deluvio on Unsplash
'웹서비스' 카테고리의 다른 글
프로그램 패턴 (0) | 2020.12.29 |
---|---|
프로그래밍 용어 (0) | 2020.12.20 |
프로그램 언어의 번역과 통역 (0) | 2020.11.16 |
웹 프로젝트 - 시작편 (0) | 2020.11.08 |
소통은 무엇보다도 중요하다. (0) | 2020.10.10 |