소프트웨어의 본질에 대해서 생각해 보자. 소프트웨어의 정의는 프로그램과 데이터를 통칭해서 소프트웨어라고 한다. 일반적으로 프로그램이 수행되기 위해서는 관련된 데이터가 있어야 한다. 인공지능을 보면 알듯이 인공지능 소프트웨어가 제대로 동작하려면 인공지능이 학습하기 위한 데이터가 필요하다. 그리고 이 학습된 결과를 인공지능에서 갖고 있어야 다음에 인공지능이 필요한 업무를 할 때 제대로 된 동작이 가능하다. 그러므로 인공지능 소프트웨어라고 하면 인공지능과 관련한 프로그램과 그 일을 하면서 사용되는 데이터가 있어야 한다. 소프트웨어에 대한 법적인 정의는 약간 다르다. 소프트웨어와 소프트웨어를 설명하는 설계서, 명세서까지를 포함한다.

일반적으로 소프트웨어와 프로그램은 같은 의미로 사용된다. 소프트웨어 전문가 위주로 진행되는 소프트웨어 개발 프로젝트에서도 별 다른 구분없이 혼용하여 사용한다. 사람들이 만들어야 하는 소프트웨어의 큰 부분이 프로그램이기 때문이다. 소프트웨어 개발에는 프로그램을 코딩하는 것이 포함하지만 소프트웨어를 코딩한다고 하지는 않는다. 소프트웨어 개발에는 프로그램의 설계와 개발을 포함하고 있지만, 프로그램 코딩이라는 말에는 설계가 포함되는 말은 아니다.

소프트웨어의 설계도가 소프트웨어의 범주에 들어가는 것은 소프트웨어의 비가시적 특성 때문이기도 하다. 비가시적이라는 말을 쓰는 이유는 하드웨어와 다르게 소프트웨어는 눈으로 확인하고 볼 수 없기 때문이다. 사람들은 컴퓨터의 화면이 있는데 왜 보이지 않느냐고 할 수 있다. 소프트웨어는 프로그램 속의 알고리즘과 같이 실제로 눈으로 볼 수 없는 영역이 더 많이 있다.

또 소프트웨어는 하드웨어의 도움 없이 자신을 스스로 보여 줄 수 없다. 화면으로 보는 것은 소프트웨어의 일부 만을 눈으로 보는 것이다. 소프트웨어가 수행되어 우리에게 보여지는 화면은 소프트웨어의 처리된 결과만을 하드웨어인 모니터를 통해서만 보여지는 것이다. 프로그램은 개발 도구용 소프트웨어로 프로그램을 열어서 보지 않으면 볼 수 조차 없다. 또한 프로그램을 열어본다고 쉽게 이해되는 것도 아니다. 프로그램 방법을 교육 받아서 코드를 읽을 수 있는 사람들이어야 이해할 수 있다.

소프트웨어 설계도는 이러한 비가시적인 특성에서 오는 어려움을 해결하는 방안으로 사용된다. 소프트웨어전문가들은 자신이 만든 프로그램이 아닌 다른 사람이 만든 프로그램을 보자마자 이해하는 것이 잘 안되기 때문에 설계도를 보면서 이해하는 것을 선호한다. 설계도는 보이지 않는 프로그램을 보완 설명하는데 중요한 역할을 한다. 소프트웨어의 보이지 않는 특징으로 인하여 소프트웨어 개발에서 분석가, 설계자 그리고 개발자의 부담이 가중된다. 고객이 요구한 소프트웨어를 보여줘야 할 때면 상당한 어려움에 봉착하게 된다. 그래서 소프트웨어 모델링을 통하여 상대에게 보여주는 준비에 많은 시간을 쏟게 된다. 분석가가 모델링한 결과가 소프트웨어 설계의 시작이다. 모델이 나오면 비로소 자신의 만들어야 할 소프트웨어의 대략적인 구조를 알 수 있으며, 관련된 사람들과 조금은 용이하게 얘기할 수 있다.

소프트웨어는 보이지 않기 때문에 프로젝트를 계획하고 진척 사항을 관리하는 것도 어렵고, 품질을 관리하는 것에도 많은 어려움이 있다. 개발된 소프트웨어가 어느 정도의 품질을 갖고 있는지 파악하는데 많은 시간이 소요된다. 좋은 품질의 소프트웨어인지를 파악하는 것에도 어려움이 따른다. 이것을 증명하는 것도 용이하지 않다. 그리고 사람들에게 이해시키고 설득하는 것에도 한계가 있다. 감추어져 있는 문제를 일일이 찾아내기도 힘들다. 모든 것이 소프트웨어의 특성 때문에 발생하는 일이다.

소프트웨어 개발은 책상에 앉아서 프로그램을 코딩 하는 것으로 시작하는 것이 아니다. 대부분의 사람들이 오해하는 것이 소프트웨어는 프로그램을 바로 코딩 하는 것 만으로 완성할 수 있을 것으로 착각한다. 물론 간단한 프로그램은 깊은 고민이 없어도 가볍게 시작하여 프로그램을 완료할 수 있다. 소프트웨어를 많이 만들어 본 경험자일수록 바로 코딩을 시작하는 것이 얼마나 무모한 짓인지 알기 때문에 프로그램을 코딩 하기 전에는 항상 자신의 알고리즘을 먼저 정리한다. 좋은 습관이 베어 있는 것이다. 일반적인 소프트웨어 개발 과정은 분석가에 의해서 요구사항이 정리되면 요구사항을 받아서 설계자가 소프트웨어 설계 문서를 개발하고 프로그램 전문가가 설계도에 따라 프로그램을 개발한다. 개발이 완료된 프로그램을 사용자가 사용하면서 데이터가 생성되고 정보로 가공되는 것이다.

채성수 chaesungsoo@iabacus.co.kr 소프트웨어개발 전문기업 ㈜애버커스 사업총괄부사장. 엘지전자와 엘지씨엔에스(LG CNS)에서 다년간 컴퓨터 관련 사업을 추진한 전문가이다. 국가 공인 최고 자격인 정보관리기술사로 대학에서 컴퓨터 관련 연구를 하였다. ‘속도경쟁사회’, ‘코딩을위한컴퓨팅사고력’, ‘소프트웨어 인사이더’ 등 6권의 책을 저술하였으며 넥스트데일리의 컬럼니스트로 활동하고 있다.

(*이 칼럼은 Nextdaily의 편집방향과 다를 수 있습니다.)

관련기사

저작권자 © 넥스트데일리 무단전재 및 재배포 금지