내가 임베디드 분야를 좋아하는 이유
저자: 유영창 / (주)제이닷디앤티 개발이사
나는 남들에게 순돌이 아빠형 프로그래머라고 소개한다. 지금까지 여러 가지 형태의 프로그램을 해 왔기 때문이다. 지금은 주로 기계를 상대로 하는 프로그램을 작성한다. 이 분야를 다른 사람들은 시스템 프로그래머라고도 하고 임베디드 프로그래머라고도 한다. 그런 것은 나에게 그리 중요한 것은 아니다. 단지 사람과 관련되지 않고 기계와 관련된 직종이기 때문이다. 그래서 좋아한다.
개인적으로 회계 프로그램과 같이 OA와 관련된 프로그램을 작성하는 사람들을 존경한다. 기술적인 것이야 서로 다른 분야기 때문에 존경하고 자시고 할 것은 별로 없지만 OA라고 하는 분야가 끊임없이 사람들과 의사소통을 해야만 하는 분야기 때문이다. 사람이 수행하던 일을 컴퓨터가 수행하도록 하는 것이기 때문에 단순하게 프로그램만 잘 작성한다고 해서 될 일이 아니다. 사람 사귀는 것을 어려워하는 나는 그래서 OA와 관련된 프로그램을 작성할 때 애로사항이 많았다. 그리고 사람은 정말 예외가 많고 편법적인 방법론이 너무 많다.
컴퓨터가 하느냐, 사람이 하느냐
임베디드 시스템을 하기 전에 병원 전산 관련 프로그램을 작성할 때의 이야기다. 전산화라는 것이 사람이 하는 일을 컴퓨터가 대신하도록 하는 것이기 때문에 업무 파악이 프로젝트의 성패를 좌우하는 핵심이다. 따라서 프로젝트를 하기 위해서 관련 업무의 직원들과 대화는 필수적이다. 그래서 나름대로 담당자에게 열심히 업무를 설명받고 각종 처리 문서를 분석하면서 시스템 설계를 하였다. 설계를 바탕으로 열심히 코딩하고 화면과 데이터베이스 처리 루틴을 만들어 갔다.
프로젝트가 어는 정도 무르익어 갔고 1차 데모를 해야 할 시점이 되었다. 이것저것 점검하면서 프로그램이 정상적으로 동작되는지 확인하였다. 특히 돈과 관련된 부분은 조그마한 계산 오차도 문제가 되기 때문에 무척 신경 쓰이는 부분이었다. 예외적인 상황도 무척 많은 부분이라 담당자에게 확인하고 또 확인하였다.
최종적인 마무리를 하고 나서 담당자에게 사전 데모를 보여주었다. 담당자는 별 말 없이 지나갔고 전체 데모를 할 상황이 되었다. 데모 하루 전날 담당자가 술이나 한 잔 하자고 하는 것이었다. 대충 마무리도 된 상황이라서 별 생각 없이 술을 마시는데 담당자는 나에게 폭탄과 같은 이야기를 하는 것이었다. 그것은 나에게 지금까지 이야기하지 않았던 업무처리에 대한 부분이었는데 약간은 불법(?)적인 상황에 대한 처리 요구였다. 사람이 처리할 때는 감추어지는 부분이지만 컴퓨터로 처리하면 감추어질 수 없는 부분이었다.
그 요구를 받고 난감했다. 난감한 이유는 두 가지였다. 하나는 법적인 것은 잘 모르지만 약간 불법적인 느낌이 드는 요구라는 점이었고 두 번째는 요구를 수용하려면 시스템을 엎어야 하는데 그날은 데모 하루 전날이었다. 담당자도 고민 끝에 이야기하는 것이라서 그때 이야기했던 것으로 보였다. 그래서 어떻게 했는가는 여기서 이야기하고 싶지 않다. 여러분의 상상에 맡기겠다. 그 뒤로 나는 OA 쪽은 쳐다보지도 않는다.
예외상황은 적을 수록 좋다
나는 임베디드 시스템에 동작하는 프로그램을 좋아한다. 좋아하는 가장 큰 이유는 기계는 거짓말을 하지 않기 때문이다. 내가 프로그래밍을 잘못해서 오동작을 하는 경우는 있지만 기계가 나를 속이는 경우는 없다. 어떤 문제가 발생해도 모두 내가 잘못한 것이다. 기계가 알아서 잘못하지는 않는다. 기계는 그냥 시키는 대로만 한다. 기계와 갈등을 일으킬 이유도 없다. 기계는 내가 아무리 막 대해도 시키는 대로만 한다. 내가 시킨 것과 절대 다른 동작을 하지 않는다.
기계는 예외적인 상황이 별로 없다. 항상 동일한 입력을 주면 동일한 결과를 보장한다. 이런 경우에는 이렇게 해야 하고 저런 경우에는 저렇게 해야 하는 경우가 너무 많아서 핵심 루틴보다 보완 루틴이 많은 OA 프로그램처럼 골치 아프지 않다. 그렇다고 아주 예외적인 상황이 없는 것은 아니지만 내가 느끼기에는 사람의 업무처리만큼 그렇게 예외상황이 많지 않다.
IT 개발자의 역할과 비전 세미나(1) : 임베디드/게임/웹
그리고 임베디드 시스템은 화면을 그리 많이 만들지 않는다. 프로그래밍을 해 본 사람이라면 누구나 느끼는 것이지만 화면을 만들고 이를 구현하는 때만큼 내가 노가다를 하는구나 하는 생각이 들 때가 없다. 정말 화면 만들기는 싫다. 그리고 다 만들어진 화면은 화면 수만큼 수정 요구가 생긴다. 담당자마다 직급별로 요구 사항이 다 다르다. 대부분 관련 담당자는 기능은 기본이고 프로그래밍 자체를 잘 모르는 경우가 많기 때문에 화면을 보고 많은 수정 요구를 내 놓는다. 다른 사람이 보기에 별것도 아닌 수정사항이 프로그래머 입장에서는 많을 수도 있다. 그에 반해서 임베디드 시스템의 화면은 대부분 심플하거나 아예 없다. 특히 네트워크 관련 장비를 만들 때나 제어 관련 프로그램을 작성할 때는 화면이 아예 없는 경우가 많다.
또한 임베디드 시스템은 개발 기간이 짧은 경우가 많다. 그래서 쫓기듯 개발하기도 하지만 프로젝트를 질질 끌어서 지치는 경우는 별로 없다. 아주 거대하거나 복잡한 임베디드 시스템도 있겠지만 대부분의 경우는 6개월 이내에 끝난다. 그래서 지루하지 않다.
기계에 생명을 불어넣는 신의 느낌
임베디드 시스템을 하다 보면 가끔 내가 신이 되는 듯한 느낌이 들기도 한다. 기계에다 생명을 불어넣는 것 같기 때문이다. 아무것도 못하는 물체가 내가 작성한 프로그램에 따라 메시지도 표출하고 LED도 반짝거리고 움직이기도 하는 것이다. 혼자서 무언가 열심히 묵묵하게 처리한다. 특히 움직이는 장비를 만들 때 더 재미있다.
이런 점들이 내가 계속 임베디드 시스템 프로그램을 만들 수밖에 없는 이유들이다.
본 컨텐츠는 IT 각 분야의 전문 프로그래머 7인의 경험적 철학을 담은 도서
[나는 프로그래머다] 중 유영창님의 글에서 발췌한 것입니다.