HW에 내장된 SW를 개발하는 임베디드 개발자
전기자동차 시대가 되면서 자동차도 가전제품이 되었다 한다. 메카닉스가 집약된 대표 소비재였던 자동차가 전기로 움직이는 TV, 세탁기와 같은 가전제품과 별다를 게 없다는 말이다. 반면 가정에 쓰는 가전제품 또한 컴퓨터가 되어가고 있다. 제품마다 LCD 계기판의 터치 버튼으로 작동하고, 복잡해서 못 쓸 정도로 복잡한 기능들로 가득하다. 전기밥솥의 다양한 밥 짓는 코스, 매뉴얼 한 가득한 세탁기 세탁종류, 자동차의 자동 연료 조절과 같은, 기계 속에는 프로그램이 잔뜩 들어있다.
가전제품과 자동차의 변신의 주역은 그 안에 들어 있는 SW다. 오늘날 SW가 없는 기계장치를 발견하기는 쉽지 않다. 어떤 미래학자는 극단적으로 말한다. 미래의 모든 자산은 정보라는 형태로 존재할 것이고, 이러한 정보는 SW 즉, 코딩이라고 한다.
임베디드라는 말은 '내장형'이라는 의미의 영어이다.
임베디드 SW는 어딘가에 내장된 프로그램이라는 의미다. 일반적인 프로그램은 컴퓨터나 컴퓨터나 다름없는 스마트폰에서 작동한다. 그러나 임베디드 SW은 PC나 스마트폰에서 작동하는 프로그램, SW가 아니라 어떤 장치나 기계에 내장되어 그 장치나 기계를 움직이거나 또는 장치나 기계에 의해 작동하는 프로그램을 말한다.
임베디드 SW는 기계에 내장된 프로그램을 말한다. 임베디드 SW가 내장된 기계나 장치를 임베디드 시스템이라고 한다. 자동차, TV, 세탁기, 청소기 등 우리의 일상에 있는 것들이 임베디드 시스템이다. 임베디드 시스템에도 SW를 동작하게 하는 작은 컴퓨터(마이크로 컴퓨터, micro computer)가 내장되어 있다. 냉장고 같은 가전제품에는 마이크로 컴퓨터가 내장된 컨트롤 보드가 있어 그 안에 내장된 SW가 온도를 일정하게 유지하도록 조절한다. 컨트롤 보드에 내장된 SW가 냉장고의 기능을 조정하는 두뇌 역할을 한다고 볼 수 있다.
임베디드 프로그램은 기계, 장치와 같은 HW를 제어하는 SW이다.
임베디드 SW가 탑재된 장치를 임베디드 시스템이라 한다.
임베디드 시스템에는 작은 컴퓨터가 있어, 그 안에 SW가 내장되어 있다.
냉장고와 같은 임베디드 시스템에는 작은 컴퓨터가 있는 컨트롤 보드에서 자동적으로 온도를 조절한다.
일반적인 SW는 PC의 키보드나 스마트폰의 터치에 의해 작동된다.
임베디드 SW는 임베디드 시스템(가전제품 같은)의 버튼, 센스 등과 같은 기계장치에 의해 작동된다.
임베디드 SW는 HW를 움직이기 위한 프로그램이다. 따라서 제품이 출시될 때 하드웨어 장치에 SW가 이미 내재되어 있다. 즉 우리가 컴퓨터를 사서 프로그램을 깔거나 스마트폰에서 앱을 받아 설치하는 것과 다르게 이미 HW에 SW가 내장되어 있다. 그래서 임베디드 SW를 HW와 순수한 SW의 중간에 있다는 의미로 'Firmware'라 하기도 한다.
|펌웨어(Firmware)|
펌웨어(firmware)는 컴퓨팅과 공학 분야에서 특정 하드웨어 장치에 포함된 소프트웨어로, 소프트웨어를 읽어 실행하거나, 수정하는 것도 가능한 장치를 뜻한다. 하드웨어의 제어(low-level control)와 구동을 담당하는 일종의 운영체제이다. 펌웨어는 ROM이나 PROM에 저장되며, 하드웨어보다는 교환하기가 쉽지만, 소프트웨어보다는 어렵다.(출처:위키)
대부분 일반인들은 컴퓨터나 스마트폰에서 사용하는 응용 SW(애플리케이션, 웹, 앱)에 익숙하다. 이름이 익숙하지 않은 임베디드 SW도 일상 가까이 있다. 우리가 매일 사용하는 자동차나 가전제품 안에 있다. 다만 기계장치에 내장되어 있어 우리가 SW라고 잘 느끼지 못할 뿐이다.
응용 SW는 운영체계만 같으면 어떤 PC에서도 사용할 수 있지만, 임베디드 SW는 HW와 밀접하게 결합되어 있기 때문에 그 장치나 기계에 전용으로 고정되어 있다. 처음부터 그 장치를 염두에 두고 개발되었기 때문에 같은 종류의 장치라도 다른 장치에 사용할 수 없다.
응용 SW는 데이터의 처리에 중점을 둔다. 사용자의 정보를 데이터로 저장하는 것이 중요하다. 따라서 데이터를 저장하는 DB가 매우 중요하다. 프로그래밍을 이러한 데이터를 가공하고 처리해서 저장하는 것에 주안을 둔다. 따라서 개발자는 DB를 다루는 SQL과 같은 언어는 필수이다.
반면 임베디드 SW는 데이터의 처리보다 HW의 제어가 주목적이다. 따라서 정보를 저장하기 위해 DB를 사용하는 일은 거의 없다. 정보를 다를 일도 거의 없고 필요한 정보가 있다면 주로 파일에 보관한다. 빠른 계산과 하드웨어와의 통신을 해서 하드웨어를 움직이도록 하는 것이 주된 프로그램이라 할 수 있다.
응용 SW가 정보처리가 목적이다 보니 데이터의 정합성에 중점을 두면서 테스트를 한다고 보면, 임베디드 SW 하드웨어와 연결된 동작 테스트가 중요하다. 응용 SW에서 부정확한 데이터 처리로 인한 위험도 크지만, 임베디드 SW에서 하드웨어 오류로 인한 위험도 매우 크다. 특히 안전과 관련된 자동차가 SW오류로 문제가 된다면 큰 일이다. SW종류와 상관없어 SW개발은 쉬운 것이 없다.
앞서 언급한 임베디드 SW를 개발하는 IT 개발 직군을 임베디드 개발자, 임베디드 SW 엔지니어라고 한다. 임베디드 개발자는 개발에 필요한 HW의 환경을 고려해서 개발하여야 한다. HW를 제어하여야 하기 때문에 HW 장치와 연결된 개발 환경이 필요하다.
C, C++
임베디드 개발자가 주로 사용하는 언어는 'C언어'이다. C언어는 자바나 C#에 비해 HW 제어가 용이한 언어이다. 또한 적은 HW자원을 이용하므로 PC나 스마트폰과 달리 마이크로 컴퓨터를 장착한 장치에 더 적합한 언어이다.
*C가 자바나 C#과 같은 개발 언어에 비해 왜 HW제어에 유리한지는 설명하지 않겠다.(좀 깊이 들어가야 함)
사용 언어는 현장이나 HW에 따라 다양할 수 있는데 공통된 것은 C와 C++와 같은 HW를 잘 컨트롤할 수 있는 언어이고, 각종 라이브러리를 사용하는 것보다 직접 프로그래밍하는 것을 택한다. 이는 프로그램 양을 가볍게 하여, 성능을 확보하고, 메모리를 적게 사용하여 컨트롤 장치를 가볍게 할 수 있기 때문이다.
회로 및 하드웨어 장치에 대한 지식
임베디드 프로그래밍은 SW개발 지식 이외에 HW에 대한 지식도 필요하다. 회로보드와 연계되어 개발과 테스트가 이루 지기 때문에 기본적인 전기지식과 회로도를 읽는 능력이 필요하다. 보드제작과 계측 및 테스트에 이르는 장비와 연계된 개발 환경에 대한 이해가 필요하다. 임베디드 개발자는 엔지니어로서의 자질과 개발자의 자질을 다 갖추어야 한다.
특정 기능이 내재된 반도체 칩, 반도체 공정 라인, 로봇, 항공기, 자율 주행자동차와 같은 첨단 산업에서 부터 세탁기, 냉장고와 같은 가전에 이르기까지 임베디드 SW가 필요하지 않은 곳은 없다. 임베디드 SW가 없다면 소위말하는 4차 산업 혁명도 불가능하다. 그래서 정부는 임배디드 개발자 양성이 필요성을 알고 다양한 정책지원 교육과정을 개설하고 있다.
임베디드 개발자가 일하는 분야는 주로 제조업체이다. 장치를 제어하다 보니 장치를 만드는 제조 업체나 임베디드 SW전문 업체에서 일을 한다. 항공, 국방, 자동차, 반도체 메모리, 전자 회사와 같은 대기업 중심의 제조업체에서 부터 이들 회사에 납품하는 작은 중소기업에 이르기까지 임베디드 SW가 필요한 제품이 많은 만큼 셀 수 없이 많은 회사들이 있다.
두 개발자의 진로를 결정하는 것은 웹 개발자가 될 것인가? 앱 개발자가 될 것인가?라는 것보다 더 심각하다. 왜냐하면 앱 개발자에서 웹 개발자로의 전환은 크게 어렵지 않다. 개발언어는 다르지만 두 개발자는 같은 곳에서 일하는 경우가 대부분이다. 서로 협업해야 하고, 시스템의 구조도 유사하다. 따라서 상호 간의 전환은 크게 어렵지 않다.
그러나 임베디드 개발자가 일반 응용 SW개발자나 웹 개발자로의 전환은 쉽지 않다. 임베디드 개발자와 일반 웹개발, 응용 SW개발자와 같은 곳에서 일할 경우는 드물다. 그래서 서로에 대해 잘 모른다. 이러한 환경적인 요소뿐만 아니라 기술적인 부분에서도 많이 다르다. 앞서 말했듯이 응용 SW개발자가 DB처리가 중심이라면, 임베디드 개발자는 제어 중심이라 DB에 대해 잘 알지 못한다.
장비, 기계와 같은 엔지니어링에 적성이 맞다면 임베디드 개발자로 진로는 좋다. 산업에서는 전문적인 임베디드 SW개발자가 많이 필요하다. 선도 기업에서 필요한 첨단 임베디드 개발자로서 진로를 꿈꾼다면 좋은 방향이다. 장비, 기계에서도 핵심 SW 역할은 더 중요해지고 있다. 자율 주행 자동차만 보더라도 알 수 있다. 전문화된 SW기술은 개발자의 가치를 높여 줄 것이다.
그러나 임베디드 SW는 제조사의 제품 일부로 간주되기 때문에, 제조업에서 SW개발에 대한 인식은 일반 서비스 산업에서의 SW개발에 대한 인식이 차이가 있다. 앱으로 서비스하는 온라인 업체, 스타트업 등에서의 개발자와 제조업체에서 인식하는 개발자는 차이가 있다. 제품을 생산하는 제조업 생리와 SW개발의 생리는 꼭 같지 않다. SW개발을 제품 생산과 같은 시각으로 본다면 불협화음이 생길 수 있다. 진로를 선택하기 전 이런 현실도 잘 살펴볼 필요가 있다.
임베디드 개발자로 진로를 선택했다가 일반 웹 개발, 응용 SW개발자로 전환은 쉽지 않다 했다. 임베디드 경력이 있다 하더라도 상호 간의 기술적인 차이가 커서, 전환을 한다면 다시 신입이 된다는 각오도 해야 한다. 임베디드 개발 경력을 웹, 응용개발자로 온전히 인정하기 어렵다.
필자도 임베디드 개발을 하다가 경력직으로 지원한 이들을 면접한 경험이 많다. 개발 스펙이 달라 어쩔 수 없이 선택을 할 수 없었다. 개발자가 모자라 어쩔 수 없이 인원을 채용해야 할 경우에 빠른 전환 가능성이 있을 것 같은 지원자 일부만 선택했다. 다행히 적응을 잘했지만, 본인 경력만큼 따라잡는 데는 시간이 좀 걸렸다.
임베디드 SW개발자는 그 분야의 전문성으로 인정을 받을 수 있지만, 혹시 전환을 한다면, 일반적인 웹 개발자, 응용 SW개발자로 전환이 어려우므로 선택하기 위해 반드시 한번 이런 상황을 고려해야 한다.
체계적이고 보완된 내용으로 브런치 글과 같은 이름으로 출간을 하게되었습니다. 아래의 링크를 통해 자세한 내용을 확인할 수 있습니다.
교보문고
나에게 맞는 IT 직업 찾기
예스24
나에게 맞는 IT 직업 찾기
알라딘
나에게 맞는 IT 직업 찾기
지금까지 IT직군에서 대부분의 개발자 직무에 알아보았습니다. 물론 더 특수하고 전문적인 개발자도 있지만 이 정도에서 마무리할까 합니다. 다음 편에는 IT의 다른 직군으로 넘어가기 전에 개발자 교육 기관 현장에서 개발자 교육이 어떻게 이루어지는 지를 알아보겠습니다.