면접 시나리오·트러블슈팅 — 임베디드 면접 (실제 기출 기반·심화)
지식 질문을 넘어 "이 디바이스가 가끔 멈추는데 어떻게 찾나", "배터리를 어떻게 늘리나", "베어메탈 vs RTOS 언제", "가장 어려웠던 디버깅" 으로 가는 단골. 앞의 01~11편을 실전 면접 답변으로 엮는 캡스톤 — 정답 암기가 아니라 측정·트레이드오프·실무 감각을 본다.
메타 원칙 3가지(★ 모든 답변에 깔아라): ① 추측 말고 측정(증상→가설→측정→격리→수정→검증) ② 트레이드오프엔 정답이 없고 조건이 있다(마감·자원·전력·BOM·인력으로 정당화) ③ 인성은 STAR + 수치(전류·지연·리부팅 횟수를 숫자로). 함정: "재현/측정 없이 코드부터 고침"이 감점 1순위.
1. 면접 진행 방식·태도 (지식만큼 평가)
실제 질문: "모르는 질문이 나오면?" · "이 기술을 왜 선택했나?" · "왜 임베디드를 하나?"
- 모르면 접근법을 보여라(아는 척하면 꼬리질문에 붕괴). 항상 트레이드오프로 마무리·되물어라(마감·자원·전력 제약 명확화).
- 수치로 말하라: "빨라졌다"❌ → "평균 전류 12mA→0.3mA·리부팅 0건"⭕. 임베디드는 측정 문화 — 숫자가 신뢰를 만든다.
- 첫 한 수를 안다: 시나리오마다 맨 먼저 보는 레지스터/장비를 답하면 "감이 아니라 데이터로 일한다"는 인상.
2. 트러블슈팅 만능 틀 (★ 모든 장애 답변의 뼈대)
증상 → 가설 → 측정 → 격리 → 수정 → 검증 → 회귀
측정 장비 4종: 오실로스코프(전원 리플·파형)·로직 애널라이저(통신 비트·타이밍)·디버거(JTAG/SWD·fault 레지스터)·전류계(평균 전류 프로파일). → "측정 없이 추측 최적화"는 절대 금지.
첫 한 수 모음(★): 리부팅 → 리셋 소스 레지스터(RCC_CSR)·멈춤 → fault status(CFSR)·통신 깨짐 → 로직 애널라이저·전력 → 전류 프로파일.
3. 시나리오 A — "디바이스가 가끔 멈추거나 리부팅된다" (★ 최빈출)
실제 질문: "기기가 가끔 hang하거나 알 수 없이 리부팅된다. 원인을 어떻게 찾나?" · "필드에서만 죽고 책상에선 재현이 안 된다." (임베디드 시나리오 단골)
원인을 3계층으로 분류해 말하면 "체계 있다"는 인상:
- SW: 스택 오버플로 → fault 레지스터(CFSR/HFSR/MMFAR·11편) + 스택 워터마크(패턴 채워 잔량)·MPU 가드. 널/와일드 포인터 → HardFault 핸들러에 PC/LR 덤프. 데드락·우선순위 역전(05편)으로 멈춘 듯 보임도 가설.
- 전원/HW: 전압 리플·brown-out → 오실로로 레일 관찰·BOR 임계(11편). → 첫 한 수는 거의 항상 "리셋 소스 레지스터(RCC_CSR)를 읽어 어떤 리셋(WDT/BOR/핀/소프트)이었나".
- 환경/타이밍: 필드에서만 죽으면 온도·EMI·전원 품질·특정 통신 트래픽. 재현 안 되면 블랙박스 로그·리셋 카운터를 비휘발성에 기록(11편 coredump).
워치독은 치료가 아니라 안전망(★): "WDT는 멈춘 걸 살리는 복구책이지 원인 제거가 아니다. 단순 무한 kick은 버그를 숨긴다 → window watchdog·모든 핵심 태스크가 살아있을 때만 kick(태스크 체크인)으로 만든다."
꼬리질문: "HardFault 핸들러에서 뭘 덤프?" → 스택 프레임 PC·LR·xPSR + CFSR/BFAR. / "스택 오버플로를 런타임 감지?" → 워터마크·MPU 가드·링커 심볼 비교. / "WDT인지 BOR인지?" → 리셋 소스 플래그.
함정: ❌ "리부팅되면 일단 워치독부터 끈다" → 원인 못 찾고 필드 영구 hang. ❌ 추측으로 코드부터 → 리셋 소스·fault 레지스터가 먼저.
4. 시나리오 B — "전류 소모가 커서 배터리가 안 간다" (★ 단골)
실제 질문: "저전력으로 어떻게 설계하나?" · "배터리로 N년 가야 하는데 어떻게?" (저전력 시나리오)
"평균 전류를 줄이는 게임이지 순간 전류가 아니다"(핵심 문장).
- 슬립·듀티사이클이 본질: 대부분 시간을 sleep/stop/standby에 두고 인터럽트(RTC 알람·핀·통신)로만 깨운다. 딥슬립 수 µA vs 액티브 수 mA → 깨어있는 시간 비율이 수명을 지배. 평균전류 = (액티브전류×duty) + (슬립전류×(1−duty)), 수명 = 배터리 용량 / 평균전류.
- 클럭만 낮추는 건 부분해: 클럭 게이팅(안 쓰는 주변장치 클럭 끔)·DVFS는 액티브 전력만. 누설·항상 켜진 LDO/센서/풀업이 더 큰 경우 多.
- 이벤트 구동 + tickless idle: 폴링 루프 제거·RTOS면 tickless(다음 만료까지 틱 인터럽트 중단)·DMA로 CPU 안 깨우고 데이터 이동·통신은 배칭(라디오 켜는 비용이 큼).
race to sleep(★ 함정): 클럭을 낮추면 *동작 시간이 길어져 오히려 에너지↑*인 경우가 많다 → 흔히 빨리 끝내고 자라. 예: 액티브 10mA·10ms·1초마다 → 평균 ≈0.1mA + 슬립 2µA → 2000mAh면 이론상 ~2년.
꼬리질문: "평균 전류를 어떻게 측정?" → 션트+오실로·µA 단위 power analyzer(추측 말고 프로파일). / "남은 누설 주범?" → LDO quiescent·항상 켜진 센서/풀업·플래시/RAM 유지. / "tickless가 왜?" → idle 때 주기 틱 인터럽트 제거.
함정: ❌ "클럭만 낮추면 됨" → race to sleep. ❌ 측정 없이 추측 최적화 → 전류계로 어디서 새는지 먼저.
5. 시나리오 C — "통신이 간헐적으로 깨진다" (★ 단골)
실제 질문: "I2C/UART/CAN이 가끔 깨지거나 CRC 에러가 난다. 원인과 대응은?"
- 물리계층부터(로직 애널라이저·오실로): 클럭/데이터 파형·풀업·라인 캐패시턴스(I2C·06편)·보드율 오차(UART 양단 ±2% 누적)·종단저항·차동 레벨(CAN/RS-485·07편)·접지 차이.
- 프로토콜계층: 프레이밍·CRC·재시도/ACK·클럭 스트레칭(I2C)·오버런(ISR 늦어 RX 덮어씀 → DMA+링버퍼).
- 타이밍/EMI: 모터·릴레이 스위칭 시점에만 깨지면 EMI/전원 노이즈(11편) → "특정 부하 켤 때만"이 결정적 단서.
- 설계 답: 재시도+타임아웃+CRC로 간헐 오류를 견디게·영구 오류는 safe state로 폴백.
꼬리질문: "I2C가 멈췄다(SDA가 Low 고정)?" → 마스터가 클럭 9펄스 토글로 버스 복구(06편). / "UART 보드율 맞는데 가끔 깨짐?" → 양단 클럭 오차·노이즈·오버런. / "CAN 한 노드만 에러?" → error passive/bus-off(07편).
함정: ❌ 바로 파서(코드) 의심 → 간헐 오류는 물리계층·타이밍이 압도적("로직애널라이저 한 번이 코드 리뷰 100번보다 빠르다"). ❌ UART 폴링 고속 수신 → 오버런·ISR/DMA 필요.
6. 설계 트레이드오프 — 조건으로 답하라 (★ 최빈출)
실제 질문: "베어메탈 vs RTOS, RTOS를 반드시 쓸 시나리오?" · "폴링 vs 인터럽트 언제?" · "정적 vs 동적 할당?" · "실시간성을 어떻게 보장?"
| 선택 | 유리한 조건 | 비용 |
|---|---|---|
| 베어메탈 | 태스크 1~2개·자원 극소·결정성 극대 | 다중 마감 관리 어려움·확장성↓ |
| RTOS | 독립 마감 다중 태스크·우선순위 선점·유지보수성 | 메모리/컨텍스트스위치 오버헤드·복잡도·디버깅↑ |
| 폴링 | 저지연 소량 이벤트·단순·예측 쉬움 | CPU 낭비·전력↑·희소 이벤트 비효율 |
| 인터럽트 | 비동기·희소 이벤트·전력 효율(슬립) | ISR 지터·재진입·공유데이터 보호 복잡 |
핵심 멘트(★): "RTOS가 항상 좋은 게 아니다. 마감이 하나뿐이고 자원이 빠듯하면 베어메탈 슈퍼루프+인터럽트가 더 결정적이고 싸다. 독립 마감 태스크가 셋 이상 얽히면 그때 RTOS 우선순위 선점이 코드를 단순하게 한다."
- 정적 vs 동적 할당: 임베디드 기본은 정적/풀 할당(동적은 단편화·비결정 시간·OOM이 안전·실시간에 치명·10편). 꼭 필요하면 부팅 시 1회·고정 풀·실패 처리. "malloc을 런타임 핫패스에 안 쓴다"가 모범 답.
- 실시간성: 결정성 = WCET(최악 실행시간) + 우선순위 설계 + 인터럽트 지연 최소화(03편). 우선순위 역전은 상속/천장으로(05편·Mars Pathfinder). 마감 검증은 GPIO 토글을 오실로로 실측.
- ISR 설계: 짧게 — 플래그만 세우고 무거운 일은 deferred(top/bottom-half·04편)·공유 변수는
volatile+임계영역(10편 volatile≠atomic)·ISR에서 malloc·블로킹 금지.
꼬리질문: "RTOS 없이 멀티 마감?" → 협력 슈퍼루프 + 타이머 인터럽트 스케줄·상태기계. / "우선순위만 높이면?" → 역전·기아·데드락 → 상속 프로토콜. / "평균이 마감 안이면 OK?" → 실시간은 **최악(WCET)**으로 판단.
함정: ❌ "인터럽트가 항상 폴링보다 좋다" → 진입/복귀 오버헤드·지터·초고빈도는 DMA. ❌ "RTOS=실시간 보장" → RTOS는 수단·잘못 쓰면 역전·데드락. 결정성은 설계에서.
7. 페일세이프·신뢰성 (★ 무인 디바이스)
실제 질문: "무인(unattended) 디바이스가 멈추면 어떻게 복구되게 설계?" · "brown-out·전원 불안정 대비?"
다층 방어: 워치독(window·멀티태스크 체크인) → BOR(전압 미달 시 안전 리셋) → 통신/센서 실패 시 재시도+타임아웃 → 그래도 안 되면 기본 안전 상태(safe state)로 폴백(모터 정지·출력 차단). 비휘발성에 블랙박스 로그·리셋 카운터로 사후 분석. OTA는 A/B 이미지·서명·롤백으로 실패해도 벽돌 방지(09편).
꼬리질문: "OTA 중 전원 꺼지면?" → A/B 뱅크·롤백(09편). / "safe state를 코드에서?" → 디폴트를 안전하게(전원 인가 시 모터 OFF)·부팅 직후 미초기화 상태에서 출력 인가 금지.
함정: ❌ 워치독을 유일한 안전망으로 → 원인 은폐. 폴백·로깅과 함께.
8. 인성·경험 — STAR + 수치 (★ 항상 등장)
실제 질문: "가장 어려웠던(도전적) 프로젝트와 극복?" · "메모리 누수/버그를 진단·해결한 경험?" · "왜 임베디드 개발자?" · "약점은?"
STAR + 수치:
- 가장 어려운 디버깅: S "필드에서만 하루 한 번 리부팅" → T "재현·원인규명" → A "리셋 소스 레지스터에서 WDT 리셋 확인 → 스택 워터마크로 특정 통신 폭주 시 오버플로 격리 → 링버퍼+우선순위 조정" → R "리부팅 0건·3주 필드 무사고".
- 전력 최적화: "폴링 제거+딥슬립+전송 배칭으로 평균 12mA→0.3mA·배터리 6개월→2.5년."
- 왜 임베디드: HW·SW 경계에서 물리적으로 동작하는 것을 만드는 매력·제약(자원·전력) 속 최적화의 재미 — 구체 프로젝트 하나로 뒷받침.
- 약점: 솔직한 약점 + 개선 행동 + 작은 결과.
함정: ❌ 수치 없는 "열심히 했습니다" → 전류·지연·리부팅·메모리를 숫자로. ❌ "혼자 다 했다" → 협업·리뷰·소통(대기업 평가 항목) 누락. ❌ 동기를 "취업이 잘 돼서" → 제품·도메인 연결로.
흔한 오답·함정 정리
- 측정 없이 코드부터 고침 → 증상→가설→측정→격리(첫 한 수: 리셋 소스·fault 레지스터·로직애널라이저·전류계).
- 리부팅되면 워치독부터 끈다 → 원인 은폐·필드 hang. 왜 트리거됐나를 본다.
- 전류는 클럭만 낮추면 된다 → race to sleep·슬립/듀티가 본질.
- 인터럽트가 항상 폴링보다 좋다 / RTOS가 항상 낫다 → 조건(마감·자원). 초고빈도는 DMA·단일 마감은 베어메탈.
- 동적 할당이 유연하니 적극 써라 → 단편화·비결정성·OOM → 정적/풀.
- 실시간은 평균으로 판단 → **최악(WCET)**으로.
- 수치 없는 인성 답 → STAR + 측정값.
한국 임베디드 면접 단골 종합 Q&A (답변 골격)
| 질문 | 핵심 접근 |
|---|---|
| 가끔 멈춤/리부팅? | 리셋 소스 레지스터 → SW(스택/fault)·전원(BOR)·환경 3계층 |
| 워치독 왜 | 안전망(복구)·치료 아님·window·태스크 체크인 |
| 배터리 어떻게 늘려 | 평균전류·슬립/듀티·tickless·배칭·race to sleep |
| 통신 간헐 깨짐 | 로직애널라이저·물리계층·오버런 DMA·재시도/CRC |
| 베어메탈 vs RTOS | 단일 마감=베어메탈·독립 다중 마감=RTOS |
| 폴링 vs 인터럽트 | 저지연 소량=폴링·희소 이벤트=인터럽트·초고빈도=DMA |
| 정적 vs 동적 | 정적/풀(단편화·비결정성 회피) |
| 실시간 보장 | WCET·우선순위·지연·역전 상속 |
| 페일세이프 | 워치독+BOR+재시도+safe state+A/B OTA |
| 어려운 경험 | STAR·수치·측정 장비 |
| 왜 임베디드 | 제약 속 최적화·물리 동작·구체 프로젝트 |
꼬리질문 대비 (상 난이도)
- "그 디버깅에서 측정은 무슨 장비로?" → 오실로·로직애널라이저·디버거·전류계(추측 아님 증명).
- "재현 안 되는 버그?" → 블랙박스 로그·리셋 카운터·통계·조건 좁히기.
- "더 큰 규모/양산이면 뭐가 먼저 깨지나?" → 전원 무결성·EMI·타이밍 마진·필드 다양성.
- "그 선택의 단점은?" → 모든 선택엔 비용 — 단점을 먼저 인지하고 왜 감수하는지.
- "다시 한다면?" → 재현 자동화·로깅 선설계·측정 먼저.
한 줄 요약 — 임베디드 면접은 지식 + 측정·트레이드오프·실무 감각. 트러블슈팅은 증상→가설→측정→격리→수정→검증(첫 한 수: 리셋 소스 레지스터·fault·로직애널라이저·전류계). 단골 시나리오 — 멈춤/리부팅(3계층·WDT는 안전망)·전력(평균전류·슬립/듀티·race to sleep)·통신 깨짐(물리계층·로직애널라이저·DMA) — 은 앞 편의 원인·해결로 푼다. 트레이드오프는 조건으로(베어메탈 vs RTOS·폴링 vs 인터럽트·정적 vs 동적·WCET). 신뢰성은 워치독+BOR+safe state+A/B OTA. 인성은 STAR + 수치·측정 장비를 녹여 "데이터로 일하는 엔지니어"를 증명. 모르면 접근법을 보여라.
(출처 — 한국 면접 기출·교차검증 2026-06: 앞 01~11편(각 1차자료 검증) 종합 · interviews.chat — Embedded SW/Systems/C·C++ 면접 문항(RTOS vs 베어메탈·워치독·저전력·간헐 I2C·도전 프로젝트 원문)·velog @theon2 — 인성면접 예상질문·인프런 — 펌웨어 RTOS 적용 판단·elec4 — 초저전력·평균전류·배터리 수명·WCET·우선순위 역전(Mars Pathfinder) 교차검증.)