임베디드 리눅스 프로그래머의 처우, 전망은 어떨까?
목차
얼마전에 코드도사에서는 “프로그래머의 종류”와 “임베디드 리눅스의 개념”에 대하여 소개를 해 드린 적이 있습니다.
위 글을 통해서 “임베디드 리눅스 프로그래머”에 대한 개념이 어느 정도 설명이 된듯 합니다. 그래서 이번 시간에는 저의 경험을 바탕으로 “임베디드 리눅스 프로그래머”의 처우와 향후 전망에 대해 저 나름대로 정리를 해볼까 합니다. 물론 이 내용은 저의 주관적일 수 있습니다.
임베디드 리눅스 프로그래머의 길….
임베디드 리눅스(Embedded Linux)를 다룬다는 것은 세상의 다양한 프로그래머들이 접하는 분야중 다소 제한적인 분야가 될꺼 같네요. 그 이유는 이세상의 임베디드 장치는 CPU부터 OS까지 정말 다양하지만 그 중에서 리눅스를 탑재한 시스템의 Software를 다루기 때문입니다. 웹에서부터 안드로이드 앱, 어셈블리 코드까지… 정말 프로그래밍은 다양하지만 임베디드 리눅스 프로그래머는 ARM, MIPS, PowerPC 등의 프로세서가 탑재된 시스템에 부트로더, 리눅스 Kernel, 파일시스템을 올린 장치나 장비를 다루게 됩니다.
임베디드 장치는 종류가 꽤 많습니다. 리눅스 뿐만 아니라 Windows 계열인 WinCE, Windows XP 임베디드 , RTOS, VxWorks, iOS 등등 그 종류가 꽤나 다양합니다. 다소 덩치가 큰 OS외에 AVR, PIC, STM32 등의 프로세서에 들어가는 사이즈가 작은 Firmware도 미세한 OS가 탑재된 임베디드 장치라고 보면 됩니다. 그 여러 임베디드 장치 중에서 리눅스를 탑재한 장치를 다룬다는 것은 임베디드 시스템의 분야에서도 제한적인 분야가 될꺼 같습니다.
따라서 보통 ARM이나 MIP CPU 기반의 임베디드 리눅스가 탑재된 제품들을 주로 다룬다고 보면 될꺼 같습니다. 임베디드 리눅스가 탑재된 제품은 그 종류가 매우 많으나 대표적인 예를 들면 약간은 다르지만 “안드로이드 스마트폰”이 전세계적으로 가장 많이 사람들에게 사용이 될꺼 같네요. 정확히는 임베디드 리눅스 커널이 탑재되어 사용된다고 정의 할 수 있습니다.
참고로 안드로이드 앱 개발과 안드로이드 포팅 및 시스템 개발과는 분명히 구분이 되어야 합니다. 임베디드 리눅스 프로그래머는 안드로이드 앱을 직접 개발하거나 하지 않습니다. 임베디드 리눅스 프로그래머는 주로 안드로이드를 타켓 보드에 포팅(Porting)을 하거나 각 패리패럴들의 드라이버를 올리는 작업을 주로 하게 됩니다. ( 물론 임베디드 리눅스 프로그래머가 안드로이드 앱도 동시에 개발하는 능력자는 존재합니다^^)
기타, 임베디드 리눅스가 탑재된 네트워크 장비/장치, TV 셋탑박스, 차량용 블랙박스, DVR 등이 주로 임베디드 리눅스가 탑재되어 제품화 됩니다. 이들 제품들을 임베디드 리눅스 프로그래머들이 다루고 개발을 주로 하게 되는 것이지요.
임베디드 리눅스 프로그래머는 개발시에 항상 내 앞에 개발보드와 리눅스와의 씨름을 동시에 해야 되는 운명을 가지고 있습니다.
임베디드 리눅스 프로그래머가 갖춰야 할 소양
임베디드 리눅스 프로그래머는 제가 경험한 바로써는 프로그래머이지만 프로그램 외적인 것을 많이 신경써야 되는 특이함을 지니고 있는거 같습니다. 가장 큰 예를 들면 물리적인 요소 즉 하드웨어(Hardware) 입니다.
임베디드 리눅스가 탑재된 제품을 개발하는 프로젝트가 시작되면, 메인 CPU와 각종 패리패럴들(Flash, 이더넷, WiFi, Bluetooth, Sensor, LCD, LED, 오디오장치, LTE 등등…)을 하드웨어 엔지니어들과 함께 검토작업들을 하게 됩니다. 이때 선정 CPU에 따라서 BSP(Board Support Package) 지원여부와 각 선정 패리패럴들의 Linux Driver 지원 여부를 확인해야 되는 작업들을 진행하게 됩니다. 그래서 어쩔수 없이 하드웨어적인 내용과 요소들을 하드웨어 엔지니어들과 함께 같이 공유하게 되는거 같습니다.
그래서 임베디드 리눅스 프로그래머의 경력을 시작하기 초창기때에는 “내가 이럴려고 프로그래머를 선택했나?” 라는 자괴감이 들기도 합니다. 생판 처음보는 PCB와 회로 그리고 각종 계측 장비들을 보고 있노라니 “여긴 누구? 난 어디?”라는 이상한 체험도 하게 됩니다. 심지어는 프로그래밍을 하는게 아닌 하루종일 테스트를 하거나 규모가 작은 곳에서는 심지어 “납땜” 까지 하는 신비한 체험을 할 수도 있습니다. ( 되도록 프로그래머는 납땜은 거부하는게 좋습니다. 한번 하게 되면 계속 하게 되요ㅋ )
임베디드 리눅스 프로그래머는 생각보다 코딩(Coding)을 많이 하진 않는 듯 합니다. 제품 개발 프로젝트가 시작되는 초창기에는 타켓(Target) 보드에 CPU 제조사에서 제공받은 BSP를 Nand나 Nor Flash에 올리는 작업을 주로 하게 됩니다. 부트로더(대표적으로 U-boot)와 임베디드 리눅스 커널, 루트 파일 시스템들을 타켓 보드에 잘 올려야 개발을 본격적으로 진행 할 수 있게 되는 것이지요.
보틍 임베디드 리눅스가 탑재된 시스템의 개발을 시작하게 되면 초기에는 선정한 CPU의 제조사에서 판매하는 레퍼런스 개발 보드를 구입해서 사전 파악을 한 후에 회로를 비슷하게 설계하여 신규 타켓 보드를 제작하게 됩니다. 타켓 보드가 제작되게 되면 임베디드 리눅스 프로그래머는 타켓 보드의 Flash에 부트로더 및 리눅스 커널, 루트 파일 시스템들을 올리는 작업을 하게 됩니다.
타켓 보드의 개발 초창기에는 하드웨어 자체가 완전한 하드웨어가 아니기 때문에 물리적인 문제가 발생하게 됩니다. 이때 하드웨어 엔지니어와 프로그래머 사이에는 초기 타켓 보드의 정상 동작 문제를 놓고 많은 디버깅과 의견 조율을 하게 되는데요, 이때 의견 충돌도 일어나고 소프트웨어 적인 난관도 부딛히게 됩니다.
이는 일반적인 앱 개발 프로그래머나 일반 리눅스 개발 프로그래머와는 사뭇 다른 경험이 될 수 있습니다. 이미 물리적으로 문제가 없는 시스템에서 개발하는 프로그래머는 하드웨어적인 요소가 잘못되었는지 검증할 필요가 없지만, 임베디드 리눅스 프로그래머 혹은 임베디드 시스템 프로그래머는 제품의 개발 단계에서 타겟 보드의 물리적인 요소를 검증해야 하는 숙명을 타고 났다고 봐야 될꺼 같습니다.
사실 이점은 제품 개발 단계에서 꽤 난관에 부딛히는 요인이 될 수도 있습니다. 스마트폰이나 PC에서 돌아가는 프로그램들의 오류는 프로그래머가 짠 코드의 문제로 여기면 되지만, 임베디드 시스템의 개발 단계에서의 오류는 원인이 물리적인 요소인지 짠 코드의 문제인지 판별하기가 꽤(?) 어렵기 때문입니다.
따라서 검증에 많은 시간을 소비하기도 합니다. 개발시에 타켓 보드에서 부팅이 정상적이지 않다면, SDRAM이나 Flash의 물리적인 문제인지, 부트로더를 잘못 Download 하거나 코드가 잘못된 것인지를 검증을 해야 될 것입니다. 이때에 하드웨어 엔지니어와 리눅스 프로그래머는 어떤 점이 문제인지 디버깅과 분석을 해야 하며 서로간에 의견 조율과 합리적인 결론에 도출해야 되는 과제에 직면하게 되는 것이지요. 임베디드 리눅스 프로그래머로써는 코딩과 기술적인 지식 외에도 하드웨어 엔지니어와 의견 조율을 잘 하고 대화를 해야 하는 추가적인 소양이 있어야 할꺼 같습니다.
이런거 보면 임베디드 리눅스 프로그래머는 프로그래밍만 잘 해서는 안될꺼 같네요. 하드웨어 엔지니어들과의 협업, 의견 조율, 디버깅이 필요하고 문제 해결을 위해 Software 적인 문제와 더불어 물리적인 문제가 있는지 여부도 확인이 필요합니다. 관련하여 테스트 도구들과 계측기들을 때론 다룰줄도 알아야 하고, 또한 제품의 개발이 마무리된다면 제품의 생산 프로세스와 테스트 방법을 같이 고민해야 되는게 임베디드 리눅스 프로그래머들이 갖춰야 될 지식과 소양일듯 합니다.
더군다나 리눅스에 대한 지식과 사용법, 오픈소스 활용, Software 기능 구현 등의 Software 개발도 동시에 진행해야 됩니다. 성격이 약간 다르더라도 엄연한 프로그래머이기 때문에 Software의 비중을 70%로 둔다면? 그 외에 것들이 30 %가 될꺼 같습니다. 임베디드 리눅스 프로그래머는 알아야 될께 생각보다 많은거 같습니다.
임베디드 리눅스 프로그래머의 처우
지금까지 나열해 본 여러가지 내용들을 종합해 봤을때, 임베디드 리눅스 프로그래머는 리눅스 지식 Base + CPU와 패리패럴 디바이스들의 정보 + H/W지식 및 디버깅 기술 + S/W 기술 및 프로그래밍 + H/W엔지니어와 의견 조율하기 등의 다양한 것들이 필요한 어찌보면 종합 예술인(?) 같은 성격을 띄고 있다는 것을 알 수 있었습니다.
그렇다면 임베디드 리눅스 프로그래머의 처우는 어떨까요? 제가 경험한 사실들을 토대로 알아보도록 하지요.
최근에 제가 다니는 회사에서 느끼는 거지만 임베디드 리눅스 프로그래머를 채용하기란 꽤 어렵습니다. (아래 링크 참고)
일단 어느순간 부터 대학생들은 임베디드 리눅스 포함 임베디드 관련 분야의 프로그래머를 기피하는듯 합니다. 일단 진입장벽이 어렵고, 눈에 띄는 성과도 보이지 않으며 하드웨어 기반 지식을 어느 정도 알고 있어야 하고 계측장비도 만져야 하기 때문에 컴퓨터 공학이나 전산학과 출신의 대학생들은 특히 더 기피하는거 같다는 생각이 듭니다. ( 참고로 저의 전공은 전자공학 입니다. )
얼마전에 리눅스 서버 관련 일을 하는 분들과 이런 저런 대화를 나눠봤는데, 그분들도 임베디드 프로그래머를 해보고 싶었지만, 막상 경험하고 나니 나랑 안맞아서 도망(?)을 쳤다. 라는 우스겟 소리를 들은적이 있습니다. 물론 이분들은 10년 정도 된 경력자 들입니다.
그런데 이상합니다. 임베디드 리눅스를 탑재하는 시스템은 아직도 꽤 많고 인력 수요도 끊임없이 있는 편인데, 그 많은 사람들은 다 어디로 갔을까요? 최근에 개발 보드에 붙일 디바이스들을 검토하기 위해 기술적인 부분을 협의하기 위해서 관련 FAE에게 문의를 한적이 있는데요, 이들 FAE들도 임베디드 리눅스를 경험한 분들이 많지도 않고 아예 취급안하는 대리점들도 많습니다.
사실 임베디드 리눅스 프로그래머들이 신입시절부터 많은 연봉과 대우를 받기 위해서는 우리나라에서 전자 대기업인 삼성전자나 LG전자, 하이닉스 같은 관련 대기업을 가야 합니다. 하지만 이들 회사들도 자사에서 개발하기 보다는 협력업체들에게 외주를 주는 경향을 보입니다. 따라서 임베디드 리눅스 프로그래머들이 진출하는 기업은 위에 언급한 대기업을 갈 수 있으나 그 자리는 한정되어 있어서 중견이나 중소기업으로 대부분 진출을 하게 됩니다.
그러나 처음에는 희망적인 기대를 품고 임베디드 시스템을 개발하는 프로그래머로 시작하지만 지나친 격무와 일한것에 비해 열악한 연봉과 대우는 임베디드 리눅스 프로그래머를 떠나서 임베디드 시스템을 개발하는 프로그래머들이 더이상 이 분야에 종사하기가 어렵게끔 만들기도 합니다. 또한 그나마 국내에서 관련 제조를 하던 수많은 중견/중소 기업들이 중국이나 대만의 가격경쟁에 밀려서 도산하거나 인수 합병이 되어 실업자의 신세가 되는 처치가 한동안 계속되었던거 같습니다. 대표적인 기업이 얼마전 구사일생으로 살아났지만 그 명맥이 거의 사라진 “팬텍” 같은 기업입니다.
이런 연유로 인해 열심히 개발을 해도 대우를 받지 못하는 기존의 임베디드 리눅스 프로그래머들의 경험이 후배들에게 전달되었을 가능성이 높습니다. 더군다나 소프트웨어 개발만 잘하면 되는 것을 떠나서 여러가지 요소를 알고 있어야 되는 특성으로 인해 어려워 하거나 중간에 포기하는 프로그래머들도 많았을 것입니다. 정말 임베디드 리눅스 시스템 개발에 미치지 않고서야 말이죠.
그리고 기업 규모가 작은 회사들이 주로 임베디드 리눅스 시스템 개발을 하고 있었던 특성상 이들 기업에서 종사하는 임베디드 리눅스 프로그래머들의 대우는 상대적으로 열악합니다. 보통 규모가 작은 중소기업의 연봉 수준이 최저 임금 수준이다 보니 이들 기업에 종사하는 프로그래머들도 마찬가지로 최저 임금 수준에서 신입을 시작하게 되는 것이지요. 하는 일에 비해 대우가 열악했던것은 사실이었습니다.
이런 상황이다 보니 국내에서 임베디드 리눅스 포함 임베디드 관련 시스템을 개발하는 프로그래머들을 찾기가 어려워 졌습니다. 현재 국내 관련 기업들이 수없이 망하기도 하지만 또 수요는 끊임없이 발생하는게 임베디드 리눅스 프로그래머이기도 합니다. 또 기술적으로 뛰어난 사람도 드물기도 합니다. 참 안타까운 현실이 아닐 수 없습니다.
임베디드 리눅스 프로그래머의 향후 전망
지금까지 다소 부정적인 얘기를 한거 같습니다. 저도 십여년을 종사하다 보니 안좋은 모습도 많이 봤고 현재도 같이 일할 사람을 뽑기 어려운게 현실이기 때문에 부정적인 얘기는 어쩔수 없이 한거 같은데요, 그럼에도 임베디드 리눅스 프로그래머의 전망은 나쁘지 않고 오히려 더 좋아질꺼라는게 저의 생각입니다.
그동안은 우리나라의 산업 구조상 제조업 위주로 발전을 하고 물리적인 요소를 중요시 해서 그런지 프로그래머들의 대우는 전반적으로 매우 열악했습니다. 예전 70~80년대의 “까라면 까~”의 수직적인 기업문화에서 프로그래머도 똑같이 적용을 받아서인지 아직까지도 그런 인식을 가지고 있는 국내의 제조 대기업들도 있긴 합니다. 그러나 시대의 트랜드가 바뀌고 인터넷과 모바일(안드로이드)이 산업의 트랜드도 바꿔버리는 바람에 또다시 프로그래머들의 중요성이 계속 높아지고 있습니다.
최근에는 IoT 장치가 중요해 지고 있죠? IoT 장치의 수요가 많다는 것은 네트워크와 리눅스의 역할도 계속 중요해지고 있다는 사실을 의미합니다. 물론 IoT 모든 장치에 리눅스가 탑재되는 것이 아니지만 리눅스가 탑재된 IoT 단말이나 시스템의 수요는 계속 늘어날 거라는 전망에는 확신을 가지고 있습니다. 제가 바로 그런 신규 사업 분야의 회사에 재직중이기도 합니다.
또한 인공지능, 로봇, 드론, 자동차 등에도 리눅스가 탑재될 가능성이 점점 높아지고 있습니다. 커넥티드 장치의 중요성이 높아지면서 네트워크 분야에 뛰어난 리눅스는 그 가능성이 매우 높기 때문입니다. 최근에는 라즈베리파이라는 아주 훌륭한 리눅스 개발 오픈 플렛폼이 등장해서 리눅스의 접근도 더욱 쉬워진점도 있습니다.
특히 리눅스는 최근 소프트웨어 산업에서 “오픈소스”라는 트랜드에 아주 충실한 OS이기 때문에 리눅스의 수요는 늘어났으면 늘어났지 줄지는 않을꺼 같다는 생각이 듭니다. 아직은 한국이 “오픈소스”전문 기업이 등장하지는 않았지만 시간이 흐르면 관련 기업들도 점차 늘어날 가능성이 높습니다. 오픈 소스를 취급한다고 해서 돈을 못버는게 아니라 돈을 벌 수 있는 가능성이 높기 때문입니다.
이렇듯 임베디드 리눅스 프로그래머 혹은 리눅스 프로그래머는 제한적이라고 할지라도 시장에서의 수요는 늘 끊임없이 있습니다. 제 주변 리눅스 프로그래머도 기술 수준과 경력이 그리 많지 않았음에도 불구하고 어렵지 않게 괜찮은 중견기업에 이직을 하는 모습을 본적이 있습니다. 만약 당신이 임베디드 리눅스 혹은 리눅스 프로그래머를 고민한다면 신입 시절에 기술적인 부분만 잘 닦아 놓으면 됩니다. 그렇다면 향후에는 괜찮은 대우를 받으며 개발일을 계속 할 수 있을 것으로 보입니다.
얼마전 협력 회사의 한 임베디드 리눅스 프로그래머와 같이 일한적이 있습니다. 나이가 지긋해 보이셔서 물어보니 50대 중반이라는 것을 알게 되었습니다. 대학생 아들이 있다고 하시더군요. 그럼에도 현업에서 열심히 활동하시는거를 보고 미래가 밝다는 생각이 들었습니다. 물론 저는 임베디드 리눅스 시스템이 흥미롭기 때문에 계속 해볼 생각입니다^^
리눅스, 임베디드 리눅스 프로그래머에 대한 추가적인 내용은 아래 글 참고하세요.