코딩 칼럼
- 코딩의 분야와 임베디드 코딩
코딩은 첫 연재에서 논했듯이 아주 광범위한 의미를 가진 단어입니다. 이번 칼럼에서는 다양한 코딩의 분야를 나누어 살펴보고, 특히 임베디드 코딩의 개념을 정의하고자 합니다. 코딩의 분야를 좀 더 알기쉽게 살펴보기 위해, 컴퓨터나 스마트폰을 구성하는 소프트웨어의 분야를 예로들어 아래와 같이 나누어 살펴보겠습니다.
첫째는, 컴퓨터나 스마트폰의 펌웨어와 펌웨어를 보여주는 UI(유저 인터페이스) 가있습니다. 컴퓨터를 처음 켜면 메인보드 제작사 로고와 함께 사라지는 화면이 있습니다. 이때 특정키 입력으로 인터페이스로 진입하여 컴퓨터 메인보드와 직접 연결된 장치들의 스펙을 확인하거나 설정을 변경할 수 있습니다. 이 프로그램은 메인보드의 물리적 흐름을 통제하는 역할을 합니다.
둘째는, OS(운영체계)입니다. 컴퓨터 부팅시 펌웨어 단계를 넘어서면 OS로고를 시작으로 잠시 후 시작화면으로 넘어가게 됩니다. 이 영역부터는 물리적 영역이 아닌 유저 인터페이스의 관점으로 구성된 프로그램입니다. 즉 OS는 컴퓨터 장치를 우리가 이해할만 하도록 사용환경을 계층적, 시각적으로 표현하며, 시스템 자원(처리능력, 메모리 등등)을 원활히 배정하여 컴퓨터를 사용 대기상태로 유지 합니다. 응용프로그램을 사용할 수 있는 베이스 환경입니다. 일반 사용자에게 OS 자체는 그다지 쓸만하지 않습니다.
셋째는, Application ware(응용프로그램)입니다. 개념적으로 OS의 위에 설치되는 프로그램입니다. 요즘 스마트폰 앱이라는 말은 에플리케이션 웨어를 나타내는 말로 안드로이드나 IOS 위에 설치되어 구동됩니다. 컴퓨터는 이제 응용프로그램과 만나서 진가를 발휘하게 됩니다. 우리가 컴퓨터를 켜는 행위는 응용프로그램을 사용하려는 목적일수도 있습니다. 가장 많이 쓰는 프로그램은 단연, 웹브라우져- 윈도우 인터넷 익스플로어 일 것입니다. 동영상플레이어, 워드, 엑셀 같은 것들을 사용하기 위해 우리는 매일 컴퓨터나 스마트폰을 사용하는 것입니다.
이렇게 컴퓨터를 구성하는 소프트웨어들은 접근 방식이 다릅니다. 그런 이유로 분류자체가 소프트웨어 개발의 분야가 될 수 있습니다. 이 분류 안에 다시 많은 분야로 쪼개져서 알 수 없는 이름이 붙는 분야들이 생겨납니다.
임베디드 시스템 코딩 분야는 위의 분류의 첫 번째에 해당합니다. 수십년 전 퍼스널 컴퓨터 보급의 초창기에는 엄청난 하드웨어에 아주 간단한 OS ( 도스라는 걸 기억하실 건데, 몇 메가바이트의 작은 용량을 가진, 디스켓으로 작동하는 운영체계였어요) 가 탑재되어, 초보적인 응용프로그램을 구동했습니다. 이제는 엄청난 기술적 진보를 통해 대단히 복잡한 기능과 광범위한 활용성이 생겼지만 초기의 개념은 유지되고 있습니다. 다시 임베디드 얘기로 가자면, 이런 프로세서가 탑재된 장치의 기동(전원을 켜는 행위)부터 전기적 신호가 그 장치를 장악하여 동일한 상태를 유지하기까지, 혹은 어떤 명령의 입출력을 받을 준비 상태를 유지 하도록 하는 연속적 흐름, 이런 작동을 하도록 미리 숨겨둔 프로그램을 임베디드 프로그램이라 합니다. 프로그램에 시스템이란 말을 붙이려면 , 연속적 성질을 갖추어야 됩니다. 즉 펌웨어나 운영체계는 시스템의 지위에 있다는 것입니다.
물리적 장치, 즉 기계장치나 전자장치를 통제하고 유지할 목적으로 개발하는 프로그램이 임베디드 코딩의 기본적 개념입니다. 쉽게 생각하면 가전제품에 들어가는 명령프로그램들이 이 분야이며, 전자요소로 작동하는 모든 것, 사실상 우리가 보는 모든 움직이는 것들은 모두 펌웨어가 필요하며, 이것이 기계와 인간의 가장 밀접한 소통형태입니다. 최근 코딩의 대중화를 이끈 것이 이 임베디드 시스템코딩입니다. 간단한 작동 하드웨어를 만들고 명령을 수행하게 하는 모습이 그동안 우리 대중이 하고 싶었던 것이 아닐까 합니다. 거창한 내용일수도 있지만, 기술이 교육레벨로 내려오면서 편리하고 값싼 개발환경구축이 가능해졌고, 수많은 인터넷망의 집단지성그룹들의 정보공유가 많은 사용 예를 만들어내고 있습니다. 실로 ‘상상이 현실로‘라는 꿈같은 문장이 이루어지는 장면이 아닐까 합니다.
이번 연재 에서는 코딩분야의 분류를 컴퓨터시스템을 예로 알아보았고 임베디드시스템 코딩의 분야가 뭔지 정의해 보았습니다. 다음 연재에는 임베디드 코딩의 개발환경과 교육레벨의 개발 환경구축 그리고 그 사용예를 알아보겠습니다.
* 이 칼럼은 필자와 주식회사 디자인랩(이하-주디)의 주관적 견해입니다.