임베디드 C 코딩 표준 완벽 가이드: BARR-C vs MISRA-C vs CERT C vs Linux Kernel
Dev.Sol
임베디드 C 코딩 표준이란?
C 언어는 하드웨어 제어의 자유도가 높지만, 그만큼 위험도 크다. 컴파일러는 많은 위험한 코드를 경고 없이 통과시킨다.
// 모두 컴파일 성공하지만 런타임 문제 발생 가능
volatile uint32_t* p = (uint32_t*)0x40000000; // volatile 누락
uint32_t g_count = 0; // ISR 공유 변수인데 volatile 없음
uint8_t buf[10];
uint32_t* p2 = (uint32_t*)(buf + 1); // Unaligned access → Hard Fault
int32_t result = INT32_MAX + 1; // Signed overflow → Undefined Behavior코딩 표준은 이런 위험을 사전에 방지하는 체계적 규칙 집합이다. 특히 안전성이 중요한 시스템(자동차, 의료, 항공)에서는 필수다.
4대 표준 개요
| 표준 | 개발 조직 | 출시 연도 | 규칙 수 | 주요 목적 | 비용 |
|---|---|---|---|---|---|
| BARR-C:2018 | Barr Group | 2018 | 60개 | 실용적 임베디드 개발 | 무료 |
| MISRA-C:2012 | MISRA | 2012 | 159개 | 안전성 + 이식성 | £130 |
| CERT C | SEI CMU | 2008~ | 99+185개 | 보안 취약점 방지 | 무료 |
| Linux Kernel | Linus Torvalds | 1990s~ | - | 일관성 + 가독성 | 무료 |

1. BARR-C:2018 - 실용주의 임베디드 표준
조직 배경
Barr Group (미국 메릴랜드)은 1992년 설립된 임베디드 시스템 전문 컨설팅 회사다.
핵심 경력:
- 의료 기기: Johnson & Johnson, Medtronic (FDA 510(k) 수백 건)
- 자동차: Ford Motor, GM (AUTOSAR 개발)
- 산업 제어: Rockwell Automation, Siemens
- 항공 우주: NASA, Boeing
30년간 축적된 실전 노하우를 정리한 것이 BARR-C다.
규칙 구조
8개 카테고리, 60개 규칙:

ARM 임베디드 핵심 규칙:
- Rule 6.1: 고정 폭 정수 타입 필수 (
int32_t,uint16_t) - Rule 8.2:
volatile정확한 사용 (하드웨어 레지스터, ISR 변수) - Rule 7.1: 함수 크기 50줄 이내 (최대 100줄)
- Rule 9.1: 모든 제어문에 중괄호 필수
산업 채택 현황
의료 기기 (FDA 기준):
- Class I/II: 사실상 표준
- IEC 62304 준수 도구
- 수백 건의 510(k) 승인 프로젝트
산업 자동화:
- Rockwell Automation PLC 개발 가이드
- Siemens 산업 제어 프로젝트
- IEC 61131 (PLC 프로그래밍) 적용
2. MISRA-C:2012 - 자동차급 안전성의 글로벌 표준
조직 배경
MISRA (Motor Industry Software Reliability Association)는 1990년 영국 정부와 자동차 산업계가 공동 설립한 비영리 협회다.
설립 배경: 1980년대 후반, 자동차 전자 제어 시스템에서 소프트웨어 결함으로 인한 사고가 증가하면서, 영국 교통부 주도로 MISRA 설립.
참여 기관:
- Ford, Jaguar Land Rover, Bentley (자동차)
- HORIBA MIRA (엔지니어링)
- LDRA, Perforce (정적 분석 도구)
규칙 구조
159개 규칙, 3단계 준수 레벨:
- Mandatory (17개): 절대 위반 불가
- Required (125개): 원칙 준수, Deviation 가능
- Advisory (17개): 권장 사항
Deviation 시스템
임베디드 시스템에서 하드웨어 레지스터 접근은 포인터 캐스팅이 불가피하다. MISRA-C는 이를 위반으로 보지만, Deviation Report 작성으로 정당화 가능.
예시: Rule 11.3 위반 (정수 → 포인터 캐스팅)
// ARM 하드웨어 레지스터 접근
#define GPIO_BASE (0x40000000u)
#define GPIO ((GPIO_Type*)GPIO_BASE) // MISRA 위반Deviation Report 구조:
Rule: 11.3
Deviation: 하드웨어 레지스터 접근을 위한 포인터 캐스팅
Justification: ARM Cortex-M Reference Manual에서 주소 확인
Impact: 낮음 (컴파일 타임 고정, 런타임 변경 없음)
Alternative: 없음 (임베디드 시스템 불가피)
산업 채택 현황

자동차: 전 세계 제조사 80% 이상
- AUTOSAR 필수 요구 사항
- ISO 26262 (기능 안전) ASIL B/C/D
- Tesla, Toyota, BMW, Mercedes-Benz
항공 우주:
- DO-178C 권장 표준
- NASA, ESA 프로젝트
- 보잉 787, 에어버스 A350
의료 기기:
- FDA Class III 필수
- IEC 62304 권장
- 심장 박동기, 인슐린 펌프
3. CERT C - 사이버 보안 시대의 필수 표준
조직 배경
SEI (Software Engineering Institute)는 1984년 미국 국방부가 카네기멜론 대학교에 설립한 연구소다.
CERT (Computer Emergency Response Team)는 1988년 Morris 웜 사건 이후 설립되었다. 최초의 인터넷 웜이 수천 대 컴퓨터를 마비시키면서 사이버 보안 대응 조직 필요성 대두.
규칙 구조
99개 Rules + 185개 Recommendations
주요 카테고리:
- INT (Integers) - 정수 오버플로/언더플로
- ARR (Arrays) - 배열 범위
- STR (Strings) - 문자열 버퍼 오버플로
- MEM (Memory) - 메모리 관리
- CON (Concurrency) - 동시성
IoT 보안 사례
2016년 Mirai 봇넷:
- IoT 카메라/DVR 수십만 대 해킹 → DDoS 공격
- 원인: 하드코딩된 기본 암호, 버퍼 오버플로
- CERT C 규칙으로 방지:
- STR31-C: 버퍼 크기 검증
- MSC18-C: 하드코딩 금지
2017년 WannaCry 랜섬웨어:
- SMB 프로토콜 버퍼 오버플로 (MS17-010)
- ARR30-C: 배열 범위 검사로 방지 가능
4. Linux Kernel Coding Style - 가독성의 철학
배경
Linus Torvalds는 1991년 리눅스 커널 시작. 전 세계 수천 명이 협업하면서 일관된 코드 스타일 필요성 대두.
철학: "코드는 작성 시간보다 읽는 시간이 10배 길다. 가독성 최우선."
핵심 규칙
1. 탭 = 8칸 (타협 불가)
이유: 들여쓰기 깊어지면 "함수 너무 복잡" 신호 → 분리하라.
2. 함수 크기: 1-2 화면 (24-48줄)
3. goto 허용 (오류 처리)
int init(void)
{
if (step1() < 0)
goto err1;
if (step2() < 0)
goto err2;
return 0;
err2:
cleanup1();
err1:
return -1;
}임베디드 적합도
매우 낮음. 스타일 가이드일 뿐, 안전성 규칙(volatile, ISR, 하드웨어 레지스터) 전혀 없음.
4대 표준 상세 비교
1. 규칙 범위 및 강도

2. 비용 구조 (5명 팀, 1년 기준)

| 표준 | 문서 | 도구 | 교육 | 컨설팅 | 총 비용 |
|---|---|---|---|---|---|
| BARR-C | $0 | $0-500 | $0-10K | 선택 | $0-15K |
| MISRA-C | $170 | $5K-20K | $6K-15K | $10K+ | $21K-50K |
| CERT C | $0 | $0 | $0-5K | 선택 | $0-5K |
| Linux | $0 | $0 | $0 | $0 | $0 |
3. ARM 임베디드 특화

범례: ✓ 강함 | ○ 보통 | △ 약함 | ✗ 없음
4. 정적 분석 도구 지원

5. 학습 곡선

프로젝트별 선택 가이드
의료 기기 (FDA 기준)
| FDA Class | 위험도 | 예시 | 추천 표준 |
|---|---|---|---|
| Class I | 낮음 | 체온계, 청진기 | BARR-C |
| Class II | 중간 | 혈압계, 혈당계 | BARR-C + CERT C |
| Class III | 높음 | 심장 박동기, 인슐린 펌프 | MISRA-C |
자동차 전장 (ISO 26262 ASIL)
| ASIL | 위험도 | 시스템 | 추천 표준 |
|---|---|---|---|
| QM | 없음 | 라디오, 내비게이션 | BARR-C |
| A | 낮음 | 후방 카메라 | BARR-C |
| B | 중간 | ADAS, 차선 유지 | MISRA-C (Required) |
| C | 높음 | ESC, ABS | MISRA-C (Mandatory+Required) |
| D | 최고 | 조향, 제동 | MISRA-C (100%) |
IoT 디바이스 (보안 위협 기준)
| 네트워크 | 보안 위협 | 예시 | 추천 표준 |
|---|---|---|---|
| 로컬만 | 낮음 | 스마트 전구, 온도계 | BARR-C |
| Wi-Fi | 중간 | 스마트 스피커, 카메라 | BARR-C + CERT C |
| 인터넷 공개 | 높음 | 결제 단말기, 도어락 | CERT C + MISRA-C |
산업 자동화 (IEC 61508 SIL)
| SIL | 위험도 | 시스템 | 추천 표준 |
|---|---|---|---|
| 1 | 낮음 | 일반 PLC | BARR-C |
| 2 | 중간 | Safety PLC | MISRA-C (Required) |
| 3 | 높음 | 긴급 정지 | MISRA-C (Mandatory+Required) |
| 4 | 최고 | 원자력, 철도 | MISRA-C (100%) |
핵심 요약
표준별 한 줄 요약
| 표준 | 요약 |
|---|---|
| BARR-C | 실용적 임베디드 개발, ARM 최적화, 무료 |
| MISRA-C | 자동차/항공/의료 필수, 가장 엄격, 유료 |
| CERT C | 보안 중심, IoT 적합, 무료 |
| Linux Kernel | 가독성 중심, 스타일만, 임베디드 부적합 |
선택 기준 우선순위
1순위: 규제 요구 사항 (자동차 → MISRA-C 필수)
2순위: 보안 위협도 (IoT 공개 → CERT C)
3순위: 예산 (제한적 → BARR-C)
4순위: 팀 규모 (10명+ → MISRA-C)
참고 자료
공식 문서
- BARR-C:2018 PDF - 무료
- MISRA C:2012 - £130
- CERT C Wiki - 무료
- Linux Kernel Style - 무료
정적 분석 도구
- clang-tidy - 무료
- PC-lint Plus - $995
- Helix QAC - $5,000+
산업 표준
- ISO 26262 (자동차 기능 안전)
- IEC 62304 (의료 소프트웨어)
- IEC 61508 (기능 안전 기본)
- DO-178C (항공 소프트웨어)
시리즈 예고:
- 2편: BARR-C:2018 완전 분석 - 60개 규칙 상세
- 3편: MISRA-C:2012 심화 - Deviation 작성법
- 4편: 정적 분석 도구 실전 가이드