임베디드 설계에서 하나를 얻으면 하나를 잃는 관계들. 면접에서 "왜 그렇게 했나"를 물을 때 이 축으로 답한다.
주요 축
① 성능 vs 전력
- 클럭을 올리면 빠르지만 전류가 늘어난다 (동적 전력 ∝ f × V²)
- 배터리 기기는 "필요할 때만 빠르게" (DVFS, 슬립 활용)
- 평균 전류가 아니라 "에너지"로 생각한다
- 빨리 끝내고 자는 것이 천천히 오래 하는 것보다 나을 수 있다 ★
★ "race to sleep" — 클럭을 올려 빨리 끝내고 깊은 슬립에 들어가면 총 에너지가 더 적을 수 있다. 직관과 반대라 면접에서 좋은 답이 된다.
② 메모리 vs 속도
- 룩업 테이블 — : 플래시를 쓰고 계산을 없앤다
- 실시간 계산 — : 메모리를 아끼고 CPU를 쓴다
sin() 계산 : 수백 사이클 256엔트리 테이블 : 512바이트 + 몇 사이클
③ 유연성 vs 결정성
동적 할당, 가상 함수, RTOS → 유연하지만 예측이 어렵다 정적 할당, 직접 호출, 베어메탈 → 경직되지만 WCET 계산 가능
하드 실시간일수록 결정성 쪽으로
④ 개발 속도 vs 최적화
HAL 라이브러리 : 빠르게 만들지만 크고 느리다
-
레지스터 직접 — : 작고 빠르지만 시간이 걸리고 이식성이 낮다
-
프로토타입은 HAL, 병목만 직접 최적화
⑤ 비용 vs 성능
- MCU 등급을 낮추면 단가가 내려간다
- 10만 대 양산이면 개당 500원 차이가 5000만 원
- 소프트웨어 최적화에 투입할 공수와 비교해 판단한다
단가 차이 × 수량 vs 엔지니어 공수 — 이 계산을 할 줄 아는 것이 양산 경험자의 특징이다.
⑥ 안전성 vs 복잡도
- 검증 코드, 이중화, MPU, 워치독 → 안전하지만 코드가 늘고 검증 부담
- 위험 분석(FMEA)으로 필요한 곳에만 집중
⑦ 신뢰성 vs 응답성 (통신)
-
재시도·ACK — → 확실하지만 느리다 (TCP, I2C)
-
재시도 없음 — → 빠르지만 유실 (UDP, 일부 CAN 메시지)
-
늦은 데이터가 무가치하면 재전송은 손해
면접에서 답하는 방식
❌ 나쁜 답변 "FreeRTOS를 썼습니다."
✅ 좋은 답변 "응답 요구가 1ms인 제어 루프와 100ms 주기의 통신·UI가 섞여 있어
-
슈퍼루프로는 제어 주기를 지킬 수 없었습니다.
-
인터럽트만으로 나누는 방법도 검토했지만 통신 처리에 블로킹 대기가
-
많아 상태 머신이 지나치게 복잡해질 것으로 판단해 RTOS를 도입했습니다.
-
대가로 태스크 스택 때문에 RAM이 6KB 늘고, 우선순위 역전을 고려해야
-
했습니다. 스택은 워터마크로 실측해 조정했고, 공유 자원에는 뮤텍스를 써서
-
우선순위 상속이 동작하게 했습니다."
구조
- ① 무엇이 문제였나 (제약)
- ② 어떤 대안을 검토했나
- ③ 왜 이것을 골랐나 (판단 근거)
- ④ 무엇을 잃었나 (대가 인식) ★
- ⑤ 그 대가를 어떻게 관리했나
★ ④가 핵심이다. 대가를 말하지 않으면 "장점만 아는 사람"으로 보인다. 모든 선택에 대가가 있음을 아는 것이 경험의 증거다.
"정답이 없는 질문"에 답하는 법
- "RTOS를 쓰는 게 좋을까요?"
- "상황에 따라 다릅니다"만으로는 부족하다
- "이런 조건이면 A, 저런 조건이면 B" 로 기준을 제시한다
판단 기준을 제시하는 것이 좋은 답변이다.
자주 나오는 질문
"인터럽트와 폴링 중 무엇을 쓰겠습니까?" "RTOS를 쓸까요 베어메탈로 갈까요?" "동적 할당을 써도 될까요?" "이 기능을 하드웨어로 할까요 소프트웨어로 할까요?" "C++를 임베디드에 써도 될까요?"
전부 트레이드오프 질문이며, 한쪽을 단정하면 감점이다.