Krafton Jungle/1. 정글 개발일지

임베디드 소프트웨어 및 펌웨어, 하드웨어 제어

munsik22 2025. 6. 5. 15:27

본 글에서는 운영진 티타임에서 임베디드 시스템 개발 전반에 걸친 개념과 실무적 요소에 대해 들은 내용을 정리하였다. 임베디드 시스템은 소프트웨어와 하드웨어가 밀접하게 결합되어 동작하는 특성이 있으므로, 각 요소 간의 역할과 협업의 중요성을 함께 이해하는 것이 필요하다.

임베디드 시스템이란?

‘임베디드(Embedded)’는 문자 그대로 "내장된"이라는 의미를 가지며, 특정 목적을 수행하기 위해 전자기기 내에 소형 컴퓨터가 탑재된 시스템을 의미한다. 일반적인 데스크톱 컴퓨터와 달리, 임베디드 시스템은 제품의 특정 기능을 위한 용도로 설계되며, 복잡한 기능보다는 안정성과 목적 중심의 성능이 강조된다.

임베디드 시스템은 주로 MCU(Micro Controller Unit) 또는 SoC(System on Chip) 기반으로 구성되며, 이를 통해 제어 및 통신 등의 기능을 수행한다. 대부분의 경우, 기기 제조사는 칩을 자체 설계하지 않고 칩 벤더(Qualcomm 등)로부터 칩을 제공받고, SDK(Software Development Kit), 회로도, 기술 문서를 포함한 개발 환경을 기반으로 제품에 맞게 커스터마이징하여 개발을 진행한다.

임베디드 개발 방식

임베디드 개발 방식은 크게 두 가지 방향으로 나뉜다.

  • 칩 벤더사에 소속되어 SDK를 직접 설계 및 구현하는 경우
  • 외부에서 MCU를 구매하여 제공된 SDK 기반으로 소프트웨어를 개발하는 경우

국내 임베디드 엔지니어의 대부분은 후자에 속하며, 이때 사용되는 SDK에는 Embedded OS나 RTOS(Real-Time Operating System), 혹은 운영체제가 포함되지 않은 경우도 존재한다. 실무에서는 문서화가 미비한 보드 기능들이 많기 때문에, 검색 엔진이나 도구에 의존하기보다는 실제 보드를 기반으로 시행착오를 겪으며 개발을 진행하는 방식이 일반적이다.

협업의 중요성

임베디드 시스템은 소프트웨어, 하드웨어, 기구 설계 등 다양한 영역의 전문 인력과 협업을 통해 개발되므로, 원활한 커뮤니케이션과 팀워크가 필수적이다. 각 역할은 다음과 같다.

  • 하드웨어 개발자: 테스트 보드 제작, 회로 설계, 부품 설계
  • 소프트웨어 개발자: 펌웨어 구현, 기능 검증
  • 기구 엔지니어: 외부 케이스 및 물리적 구조 설계
  • 생산 기술자: 양산 조립 및 생산 라인 구축
  • 튜닝 엔지니어: 영상 및 음향 보정
  • QA, FM 엔지니어: 품질 검증 및 유지보수

따라서, 실무에서는 기술력뿐 아니라 협업을 선호하는 태도 또한 중요한 평가 요소로 작용한다.

펌웨어(Firmware)의 개념

펌웨어란 기기 내부에 내장된 소프트웨어로, 임베디드 소프트웨어와 거의 동일한 의미로 사용된다. 펌웨어는 하드웨어에서 직접 실행되므로, 하드웨어와의 연동 검증이 매우 중요하며, 이를 위해 디버거, 오실로스코프 등 고가의 측정 장비가 필요하다.

하드웨어 제어 방식

컨트롤러 내부의 하드웨어는 MMU(Memory Management Unit)를 통해 메모리 주소로 매핑되며, 해당 주소에 존재하는 레지스터(register)를 통해 제어된다. 이때 외부 장치와의 통신은 다음과 같은 방식으로 구성된다.

  • 직렬(Serial) 통신
  • 병렬(Parallel) 통신

하드웨어 개발자는 회로를 설계하고 실제 라인을 연결하며, 소프트웨어 개발자는 데이터 송수신을 위한 통신 로직을 구현한다. 예를 들어, OTA(Over-The-Air) 업데이트는 SoC 내부의 통신 모듈을 활용하여 병렬 통신 기반으로 설계될 수 있다.

통신 및 네트워크에 대한 이해

임베디드 시스템, 특히 RTOS 환경에서는 통신 모듈에 대한 직접 개발 또는 외부 라이브러리 도입이 필요한 경우가 많다. 이에 따라 통신 및 네트워크에 대한 기본적인 개념과 작동 원리에 대한 추상적 이해가 요구된다.

코딩 컨벤션 및 품질 관리

임베디드 개발에서는 코드의 일관성과 안전성이 핵심이므로, 코딩 컨벤션 준수가 필수이다. 이를 위해 Jenkins 등의 도구로 자동 검증 시스템을 구축하고, 코드 리뷰 역시 매우 엄격하게 이루어진다. 오류 발생 시 시스템 전체가 오작동할 수 있으므로, 웹 개발에 비해 소스 코드 검증이 훨씬 더 보수적으로 이루어진다.

또한, 최신 기술보다는 검증된 안정적 기술을 우선시하며, 장기간 유지보수 가능성을 고려한 보수적 접근을 택하는 경우가 많다.

커리어 및 산업 트렌드

임베디드 산업은 시대의 흐름에 따라 주요 분야가 변화하는 경향이 있다. 예를 들어, 스마트폰 산업이 활성화될 당시에는 모바일 임베디드가 각광받았고, 최근에는 차량 전장 분야가 주목받고 있다. 그러나 특정 도메인 경험보다 어떤 기술을 사용했는지가 커리어에 더 큰 영향을 미치며, 제조 기반의 스타트업들이 다수 존재하는 특징도 있다.

다만, 이직 문화는 다소 폐쇄적인 편이며, 진입 후 일정 기간 이상(5년 이상) 안정적으로 근무하는 것이 유리하다.

임베디드 입문을 위한 준비 사항

  • C언어 숙련도는 필수적이다.
  • PintOS 프로젝트 경험은 OS 구조 이해와 함께 실무 적응력을 높이는 데 매우 효과적이다. (핀토스가 더 복잡함)
  • 하드웨어 지식은 실습을 통해 습득해야 하므로, 현업에서 배운다는 자세가 필요하다.
  • 전자공학 전공자에게 소프트웨어를 교육할지, 반대로 소프트웨어 개발자에게 하드웨어를 교육할지는 회사마다 상이하지만, 어떤 방식이든 학습을 통한 적응이 요구된다.
  • UART 등 범용적인 하드웨어 인터페이스에 대한 이해와 관심은 입사 시 강점으로 작용할 수 있다.