임베디드 소프트웨어 취업 지침서 – 당신이 임베디드 분야로 진출하고 싶다면?
목차
임베디드 소프트웨어 분야로 취업하려면 어떻게 해야 할까?
안녕하세요. 코드도사 운영자입니다. 이번 글에서는 “임베디드 소프트웨어” 분야로 취업을 희망하는 분들에게 도움이 되고자 “가이드” 형식의 글을 작성해 보려고 합니다.
저는 리눅스와 임베디드 리눅스를 기반으로 개발을 했던 프로그래머입니다. 시작한지는 어느덧 15년이 넘었네요.
저는 대략 이런 이력들을 가지고 있습니다. 궁금하신 분들은 위 링크의 글을 참고하시면 됩니다.
최근에는 IT 개발자가 지속적으로 인기있는 직종으로 바뀌고 있는 추세인거 같습니다. IT 개발자에는 임베디드 소프트웨어 개발자도 포함이 됩니다.
임베디드 분야로 진출할때 사전에 알아둬야 할 점들
임베디드 혹은 펌웨어 개발자는 다른 직군들의 IT 개발자들에 비해 만만치 않은 분야인거 같습니다. 이 점을 사전에 반드시 염두해 두고 고민을 해봐야 할 것입니다.
일단 위 글들을 한번 읽어보시기 바랍니다. 위 글들은 제가 임베디드 소프트웨어 분야에 15년 정도 있으면서 경험했던 것을 토대로 작성된 글입니다.
미래에 대한 전망은 나쁘지 않으나 근무 환경과 처우가 현재까지도 열악한 것은 “Fact” 라고 볼 수 있습니다. 관련 분야 대기업을 가더라도 연봉적인 부분은 만족스럽겠지만 개발의 난이도와 인력 부족으로 인해 만만치 않은 개발 커리어를 쌓을 수도 있습니다.
상대적으로 PC만 있으면 개발을 할 수 있는 웹(프론트), 앱, 서버(백엔드) 개발자들은 훨씬 더 수요가 많고 개발 환경이 좋으며 경력을 쌓으면 연봉이 급상승 하는 장점이 있습니다. 반면에 임베디드 소프트웨어 개발자들은 아직까지 대한민국에서는 연봉 상승률과 대우가 열악합니다.
장점이라고 하면 수요가 끊임없이 발생하고 있고 현장에서 개발 인력이 부족하기 때문에 처우는 점점 좋아질 가능성도 있고 나이가 들어서도 계속 프로그래머로서 생활이 가능할 수 있습니다. 즉 일자리 걱정은 하지 않아도 될 것입니다.
저는 개인적으로 “재미” 때문에 경력을 쌓았지만 그렇지 않고 많은 연봉과 좋은 환경에서 개발을 하고 싶다면 “임베디드 소프트웨어” 분야의 진출은 하지 않는게 좋다고 생각합니다.
정말 흥미가 있고 임베디드 소프트웨어 분야에 목표가 있다면 진출해도 괜찮습니다.
임베디드 소프트웨어 개발자는 어떤 일을 할까?
그럼 임베디드 소프트웨어 개발자들은 어떤 일을 하게 될까요? 간략하게 설명을 해보도록 하겠습니다.
임베디드 분야는 크게 두 부분으로 나뉩니다. OS를 올리지 않고 시스템의 플래쉬에 S/W 코드를 올려서 시스템을 구동시키는 “펌웨어 개발” 과 OS를 올려서 OS를 구동하고 커스텀 어플리케이션을 개발하여 구동시키는 “임베디드 시스템 개발” 이 있습니다.
펌웨어 개발
작은 CPU(MCU라 지칭)와 특정 기능을 하는 패리패럴들로 구성된 시스템의 소프트웨어를 개발하는 분야입니다.
위에서 언급했듯이 펌웨어 개발은 OS가 올라가지 않습니다. 시스템을 부팅시키는데 필요한 작은 “커널” 코드만 올릴 뿐입니다. 아무래도 MCU의 성능이 비교적 떨어지고 복잡한 기능의 시스템을 개발하는거보다 상대적으로 작고 단순한 기능 위주로 개발하려고 하다 보니 한정된 MCU 자원에서 빠른 성능을 내려면 OS를 올리지 않는게 유리합니다.
그래서 기능 구현은 프로그래머가 직접 C 를 사용하여 구현을 하게 됩니다. 물론 처음부터 일일이 다 코드를 새로 짜는것은 결코 아닙니다. MCU 제조사에서 제공하는 개발킷에 라이브러리를 사용하거나 오픈소스를 통해 커스텀 개발 위주로 하게 될 겁니다.
국내에서 주로 사용하는 MCU 들은 대략 아래와 같습니다.
- ST Micro 계열
- Microchip 계열
- Atmel 계열(현재 Microchip 에게 인수됨)
- TI 계열
- 아두이노(Atmel 기반), 아두이노는 교육용 위주
현장에서 많이 쓰는 MCU는 주로 ST Micro 제품이나 Atmel 제품이 많습니다. 아두이노의 경우에는 Atmel 칩 기반으로 되어 있으며 현업에서보다는 주로 교육용으로 많이 쓴다고 보시면 됩니다.
펌웨어 개발자는 회사에서 프로젝트가 기획되고 MCU와 패리패럴들이 선정이 되고 샘플 PCB가 나오게 되면 시스템이 정상으로 부팅되고 부품들이 잘 동작하는지 “호흡을 불어넣는 과정”을 거치게 됩니다. 이 과정에서 하드웨어 엔지니어들과 협업을 하게 되고 이 과정이 끝나면 본격적으로 펌웨어 코드를 개발하여 기능 구현을 하게 됩니다.
기능 구현을 마치고 충분한 테스트를 거친 후에(테스트는 하드웨어 이슈가 나오게 되면 Support를 해야 할 수 있습니다) 여러 인증 단계를 거쳐 제품을 출시하게 됩니다. 제품 출시 전에 “생산” 단계에서도 생산 공정 툴을 개발할 수 도 있습니다.
본격적으로 제품이 출시되었다고 해서 내 임무가 끝난게 아닙니다. 제품 출시 후에도 제품은 끊임없이 문제가 발생하기 때문에 이슈 대응을 끊임없이 하게 되고 디버깅 및 수정 작업을 하게 됩니다.
임베디드 시스템 개발
펌웨어 개발도 사실 “임베디드 시스템 개발”의 한 범주입니다. 그런데 OS 가 들어간 시스템 개발과 구별을 하기 위해 용어를 이렇게 정의 해봤습니다.
임베디드 시스템 개발은 펌웨어 개발 과정과 큰 차이는 없습니다. 다만 OS가 들어가기 때문에 개발의 난이도와 디버깅이 좀더 어려운 부분이 있습니다.
일단 위 링크의 글을 먼저 읽어보시기 바랍니다. 제가 정리한 “임베디드 리눅스”의 개념입니다. 예전에는 OS를 WinCE 와 Linux 등을 올렸으나 최근에는 많은 비율로 Linux 를 주로 올려 사용하고 있습니다. 또한 “안드로이드” 를 탑재하여 임베디드 시스템을 개발하는 비율도 꽤 많습니다.(안드로이드의 커널은 Linux 커널을 탑재)
임베디드 시스템에는 Linux 외에도 RTOS인 VxWorks 같은 OS도 사용하기도 합니다. 아무래도 실시간 응답성이 중요한 시스템의 경우에는 RTOS를 사용하는거 같습니다.
임베디드 리눅스 기반의 시스템을 개발하면 다음과 같은 분야로 진출이 가능합니다.
위 글을 읽어보시고 리눅스 프로그래머들이 어떤 분야로 진출할 수 있는지 가늠을 해보시기 바랍니다.
OS를 올릴 수 있는 MCU의 경우에는 아래와 같은 MCU를 많이 사용합니다.
- ARM 기반의 MCU(Cortex-A 시리즈)
- MIPS 계열의 MCU
- 제조사는 NXP, ST Mirco, TI, Mediatek, Xilinx, Qualcomm, 삼성 등등 다수
하드웨어 엔지니어들과 협업
펌웨어, 임베디드 시스템을 개발하는 프로그래머는 필연적으로 “하드웨어 엔지니어” 들과의 협업이 필요하게 될 것입니다.
임베디드 분야에 진출을 하게 되면 내 옆자리나 옆팀에는 하드웨어 엔지니어들이 시스템의 회로를 설계하고 PCB를 제작하며 디버깅을 위해 납땜을 하는 모습을 보게 될 것입니다.
따라서 내가 개발을 혼자서만 할 수는 없습니다. 시스템에 코드를 올릴려면 하드웨어가 준비가 되어 있어야 하기 때문입니다. 프로젝트가 시작되면 초반에는 하드웨어 엔지니어가 부품 수급과 회로 설계를 시작하고 PCB를 제작해줍니다. 이때까지 시간이 소요가 되기 때문에 바로 개발에 착수하기는 어렵습니다.
PCB 제작이 완료되고 개발 환경이 구축되었다고 해도 하드웨어적인 문제가 발생하면 그걸 확인해 줘야 하는 것도 프로그래머의 몫입니다. 이 과정에서 하드웨어 엔지니어와 토론 및 책임 공방, 다툼이 발생할 수 있으며 이 과정을 슬기롭게 헤쳐나가는 “덕목”도 필요하게 됩니다.
이런 부분에 있어서 프로그래머가 스트레스를 받을 소지도 있습니다. 하드웨어 적인 이슈를 소프트웨어에서 처리를 해야 할 수 있으며 검증에 시간을 많이 투입할 수 있습니다. 따라서 내가 원인을 유발하지 않았더라도 내가 같이 확인해야 하는 일들이 꽤나 발생할 수 있습니다.
임베디드 분야에 진출하는 프로그래머들은 그래서 “전자 회로” 지식을 어느정도 쌓아놓는게 좋습니다. 그래야 하드웨어적인 문제에 대응하는 것도 가능하기 때문입니다.
임베디드 소프트웨어 분야에 진출하기 위해서는 어떤 전공이 좋을까?
예전에 코드도사 사이트에 방문하셔서 제게 많은 분들의 문의를 하신 적이 있습니다. 임베디드 분야에 진출하려면 어떻게 해야 하냐는 것입니다.
일단 전공 부분에 대하여 이야기해 보겠습니다.
전공은 주로 프로그래밍을 배우는 “컴퓨터 공학” 전공자가 진출해도 됩니다. 임베디드 분야이긴 하지만 개발의 주는 “프로그래밍” 이기 때문입니다. 대신에 임베디드 소프트웨어 분야로 진출하기 위해서는 “전자 회로” 지식을 쌓는게 좋습니다.
다음으로는 전자적인 지식을 배우는 “전자 공학 계열” 이나 “정보통신 공학” 계열의 전공자가 진출할 수 있습니다. 이들 전공자들은 전자 회로를 배우고 C 같은 로우 레벨 언어를 배우기 때문에 임베디드 분야 진출에 유리한 편입니다. 혹은 “제어 계측” 분야 전공자도 임베디드 분야에 진출이 가능합니다.
“전산학과” 계열의 전공자도 진출이 가능할꺼 같습니다. 학과 커리큘럼에 프로그래밍 수업이 있다면 진출을 생각할 수 있습니다. 대신에 “전자 회로” 같은 지식을 꼭 쌓아두기 바라며 별도 “부 전공” 으로 전자 회로 지식을 수강해도 괜찮을거 같습니다.
최근에는 IT 분야로 “비전공자” 들도 6개월 과정의 국비 학원을 통해 진출을 하고 있는데요, 사실 임베디드 소프트웨어 분야는 “비전공자” 들이 진출하기에는 다소 어렵지 않나 생각합니다. 개발이 프로그래밍 위주가 아닌 시스템 설계이기 때문입니다. 그래서 시스템에 대해 전반적으로 알아야 하고 하드웨어 지식도 알아야 하며 “Low Level” 적인 개념도 알아야 하기 때문입니다.
따라서 비 진공자는 복수 전공으로 전자공학, 컴퓨터 공학 등을 수강 하는게 좋을거 같습니다. 기업에서도 “비 전공자”는 채용을 하는게 쉽지 않을거란 생각이 드는군요.
임베디드 분야에 진출하기 전에 해야 할일들
임베디드 분야에 경험이 없다면 취업을 하기 위해서는 “준비” 가 필요할 것입니다. 대학생들의 경우에는 졸업을 하기 전에 미리 “교육” 수강이나 “토이 프로젝트” 등을 통해 포트폴리오를 쌓아두면 임베디드 소프트웨어 분야 취업에 많은 도움이 됩니다.
위 글은 얼마전에 제가 신입 프로그래머를 겪어보고 느낀점을 적은 글입니다. 당신이 임베디드 분야에 진출을 목표로 한다면 한번 읽어보면 도움이 될 것입니다.
C/C++ 같은 언어를 취업 전까지 지속적으로 다룬다
당신이 임베디드 분야의 프로그래머로 활약하고 싶으면 가장 기본적인 스킬인 C 언어에 능숙해야 할 것입니다. C++ 의 경우에는 C 보다는 우선 순위를 미뤄도 됩니다. 그래도 C++ 을 같이 해두면 임베디드 분야 진출에 많은 도움이 될 것입니다.
전공 과목에 C언어가 없다면 지금부터라도 C 언어 책을 사거나 인터넷 강좌를 보면서 시작하면 됩니다.
위 모두의 코드 C 강좌는 추천할 만한 강좌인거 같네요.
C 언어는 지금까지 나온 언어중에서 “어려운” 언어에 속합니다. 그럼에도 불구하고 이해가 되지 않더라도 계속 ~ 혹은 매일같이 몇줄의 코드라도 직접 입력해보고 결과물을 출력해 보세요. 그래서 익숙하지 않은 당신의 습관을 C에 익숙하게 만들어야 합니다.
도저히 이해가 되지 않는다면 가까운 C 강좌 학원을 다녀보는 것도 좋은 방법입니다. 시중에는 C 강좌 학원이 있습니다. 직잡 수강을 하고 모르는 부분을 강사에게 물어봐서 해결해 보세요. 분명 도움이 됩니다.
C를 잘하게 되면 자바, JS(자바 스크립트), 파이썬 같은 언어를 하는 것은 그만큼 수월해집니다. 설사 다른 분야로 진출을 하더라도 C를 다뤄본 경험은 당신에게 큰 도움이 될 것입니다.
임베디드 소프트웨어 관련 교육을 받는다
임베디드 소프트웨어는 IT 쪽에서도 나름 특수한 분야입니다. 따라서 인력을 채용하는데 있어서 “교육”을 수강한 것도 점수를 딸 수 있습니다. 또한 교육을 받게 되면 그만큼 임베디드 분야로 진출에 많은 도움이 됩니다.
위 과정은 “한컴 MDS” 에서 운영하는 교육 과정 리스트입니다. 한컴 MDS는 국내에서 임베디드 SW 분야 솔루션을 제공하는 기업인데요, 별도로 위와 같이 임베디드 분야의 교육 과정도 진행을 하고 있습니다. 위와 같은 교육 과정을 수강해도 많은 도움이 됩니다.
제가 추천하고 싶은 교육 과정은 위와 같이 6개월 동안 임베디드 시스템 관련 교육을 받는 과정입니다. 장기 교육 과정이며 위 교육은 “비트교육센터” 에서 운영을 하네요. 예시로 언급을 한 것이고 이런 장기 교육 과정들이 분명 개설이 되어 있습니다.
예전 신입 시절의 직장 동료가 생각이 나는군요. 그는 제어 계측을 전공했으며 임베디드 리눅스 교육 과정 6개월 짜리를 수강하고 난 다음에 취업이 되었다고 했습니다. 제가 채용 담당자라고 해도 C 를 다룰 줄 알고 위와 같이 장기 교육 과정을 수강했다면 충분히 채용 의사가 있을 것으로 생각됩니다.
임베디드 분야로 진출을 목표로 한다면 “교육”은 되도록 받는게 좋습니다.
토이 프로젝트를 진행해 본다
임베디드 프로그래머를 목표로 하는데 “하드웨어”가 없어서 실습을 해보지 못한다고요? 이미 당신 앞에는 저렴하고 훌륭한 도구들이 있습니다.
아두이노와 라즈베리파이 입니다.
아두이노와 라즈베리파이는 개발도상국 국가들을 대상으로 저렴하게 “코딩” 교육을 위해 만들어진 오픈소스 하드웨어 입니다. 이들은 임베디드 분야로 진출하는데에 매우 좋은 토이 프로젝트 도구가 될 수 있습니다.
C를 잘 다루고 “교육”을 받았다면 아두이노나 라즈베리파이로 실습을 해보면 됩니다. 펌웨어 분야로 진출하려면 “아두이노” 위주로 토이 프로젝트를 진행하면 되고 임베디드 시스템 개발로 진출하려면 “라즈베리파이”로 토이 프로젝트를 진행하면 됩니다.
토이 프로젝트라고 해서 거창하게 할 것은 없습니다. 위의 예시와 같이 아두이노로 온습계 습도계를 만들어도 됩니다. 아두이노로 무선 통신을 해서 사물을 제어해보는 프로젝트를 해도 됩니다.
라즈베리파이로 WiFi 를 이용하여 통신을 해보거나 온도계 모듈을 달아서 온도 측정을 해봐도 됩니다. 이 외에도 많은 토이 프로젝트를 구상할 수 있으며 이들을 다뤄보고 경험해보는 것은 임베디드 분야로 진출하는데 많은 도움이 됩니다.
아두이노나 라즈베리파이로 개발을 하는 것은 실제 현업에서 개발하는 것과 큰 차이가 없습니다. 단지 아두이노와 라즈베리파이 라는 안정적으로 동작하는 시스템에서 개발을 한다는 점이 다를 뿐입니다.
당신이 임베디드 분야로 진출하길 희망한다면 이들 오픈소스 하드웨어를 통해서 토이 프로젝트를 진행해보는 것을 추천드립니다.
임베디드 분야로 진출하려는 그대에게….
사실 최근에는 “임베디드 소프트웨어” 분야로 진출하려는 학생들이나 취업 지망생들이 많이 줄어든거 같습니다.
저 또한 아직까지 열악하고 경력대비 적은 연봉에 보수적인 기업 문화가 마음에 들지 않아 임베디드 분야를 떠난 상태입니다. 이제는 회사를 다니지 않고 자유롭게 “프리랜서” 생활을 하고 있습니다.
이 분야에서 오래 일한 것은 아니지만 중간 이상의 위치에 있는 저로서는 현재 업계의 생태계가 이렇게 된것이 무척 안타깝다고 생각합니다. 현장에는 오랜 경력자들도 열악함을 견디지 못해 떠나고 있으며 일거리에 비해 사람이 부족하다고 아우성이라고 합니다.
많은 연봉과 좋은 대우 보다는 “재미가 있어서” 임베디드 SW 분야에서 15년 정도 일을 했지만 현실은 꽤나 열악하고 대우도 좋지 않습니다. 다른 IT 서비스 업이나 게임 회사들이 많은 연봉을 지급하고 대우가 좋으며 사상 최대의 실적을 낸 것과는 완전 대비되는 상황입니다.
따라서 이제 임베디드 SW 분야로 진출하려는 신입 개발자나 학생들에게 “권유”는 하고 싶지 않습니다. 차라리 임베디드쪽으로 오는거 보다 웹이나 앱 개발을 하는게 훨씬 대우도 좋고 워라밸도 챙길 수 있으며 경력이 쌓이면 많은 연봉을 지급 받을 수 있습니다.
하지만 임베디드 SW 분야는 다른 분야에 비해 특수하므로 희소성의 가치는 있습니다. 현재는 암울하고 대우가 썩 좋지는 않지만 현장에는 사람이 부족해서 프로젝트가 진행이 되지 않는 상황이 꽤 발생하고 있습니다.
얼마전에 제게도 “외주 개발” 제의가 들어왔습니다. 그 이유는 해당 회사에서 개발팀 전체가 퇴사를 진행한다고 하더군요. 급하게 제의가 들어와서 협의중이지만 급하게 퇴사하는 개발자들이 무슨 이유가 있길래? 라는게 궁금해졌고 한편으로는 그만큼 열악하다는 의미가 담겨있지 않나 생각됩니다.
이렇게 현재 현장은 서서히 변화를 하고 있는거 같아 보입니다. 개발 인력이 부족해지면 그만큼 시장에서의 가치는 높아집니다. 그래서 조금만 시간이 지나고 처우가 대우는 조금씩 좋아지지 않겠나? 라는 예측은 해봅니다.
그래서 현재 이런 상황이기 때문에 “임베디드 SW” 분야로 진출하려는 분들은 신중을 가하시기 바랍니다. 그런거 상관없이 나는 임베디드 분야를 꼭 해보고 싶다~라고 하는 분들은 환영입니다^^