2강: 구조와 주요 개념 이해하기
“이 규칙들은 다 어디서 온 거야?”라는 질문에 속 시원히 답해드립니다!
이 많은 규칙들… 대체 뭐부터 봐야 하죠?
📦 MISRA-C는 그냥 "규칙 모음집"이 아니다?
많은 분들이 MISRA-C를 처음 접하면 이렇게 생각합니다.
“C 언어 금지 리스트 아닌가요?”
“포인터 쓰지 말라던데요?”
“그냥 정적 분석에 잡히면 고치면 되죠 뭐~”
🤚 잠깐!
MISRA-C:2012는 단순한 금지 목록이 아니라, 구조화된 규칙 체계를 가진 '코딩 안전 프레임워크'입니다.
오늘은 이 복잡해 보이는 문서를 한 방에 꿰뚫는 비법을 알려드릴게요!
📚 MISRA-C 문서는 어떻게 구성되어 있나요?
MISRA-C:2012는 크게 다음 세 가지 문서로 구성됩니다:
- Guidelines for the use of the C language in critical systems
- MISRA Compliance:2020
- Amendment 1, Amendment 2 (보안 및 최신 C 표준 대응)
가장 핵심은 규칙 집합입니다. 여기에는 다음이 포함됩니다:
- Rules (규칙): 명확하게 판단 가능, 정적 분석 도구로 검사 가능
- Directives (지침): 개발 의도나 설계 맥락 해석이 필요한 지침
🧩 Rule vs. Directive — 둘이 뭐가 다른가요?
| 유형 | 의미 |
|---|---|
| Rule | 정적 분석으로 판별 가능한 규칙 – 도구로 자동 검사 가능 |
| Directive | 개발자의 의도 해석이 필요한 지침 – 설계 이해, 수동 리뷰 필요 |
✅ 요약:
- Rule = 도구로 판단 가능한 규칙
- Directive = 문맥 이해가 필요한 지침
⚖️ Required vs. Advisory vs. Mandatory?
각 규칙은 적용의 강제 수준에 따라 아래 세 등급으로 나뉩니다:
| 등급 | 의미 | 적용 우선순위 |
|---|---|---|
| Mandatory | 반드시 지켜야 하며, Deviation도 허용되지 않음 | 최상 |
| Required | 기본적으로 반드시 지켜야 하며, 예외 시 Deviation 필요 | 높음 |
| Advisory | 권장 사항으로, 사유가 있으면 미적용 가능 | 보통 |
💡 실무에서는 Mandatory + Required는 기본 준수,
Advisory는 프로젝트/조직 상황에 따라 선택 적용하는 것이 일반적입니다.
🧠 판정 가능성 (Decidability) 도 무엇인가요?
MISRA-C에서는 규칙을 다음처럼 분류합니다:
| 분류 | 의미 |
|---|---|
| Decidable | 정적 분석 도구로 자동 판별 가능 |
| Undecidable | 사람의 판단, 코드 문맥 이해가 필요한 규칙 |
예를 들어,
- “모든 변수는 선언 전에 초기화돼야 한다” → Decidable ✅
- “함수 호출이 예상 외의 부작용을 발생시키면 안 된다” → Undecidable ❌
Undecidable 규칙은 개발자 리뷰와 설계 명세서가 중요한 역할을 하죠.
즉, 도구 + 사람의 협업이 필수입니다.
🔍 정적 분석 도구는 많은 규칙을 커버하지만,
MISRA-C 준수를 100% 자동화할 수는 없습니다!
🧠 어떻게 기억하면 좋을까?
“Rule은 코드 규칙, Directive는 설계 지침
Required는 기본 필수, Advisory는 좋은 권장
Decidable은 도구로 판단 가능, Undecidable은 사람이 판단!”
이렇게 정리해두면 실무에서 어떤 규칙이 어떻게 적용되고,
어디까지 정적 분석 도구가 커버해주고,
우리가 어디서 수동 리뷰를 해야 하는지 감이 잡힙니다.
📌 구조 이해 요약 정리!
| 항목 | 분류 | 의미 |
|---|---|---|
| 규칙 타입 | Rule | 도구로 판정 가능 |
| 지침 타입 | Directive | 문맥 해석 필요 |
| 적용 수준 | Mandatory | Deviation 불가 |
| 적용 수준 | Required | Deviation 필요 |
| 적용 수준 | Advisory | 사유 시 미적용 가능 |
| 판정 가능성 | Decidable | 자동 판별 가능 |
| 판정 가능성 | Undecidable | 수동 리뷰 필요 |
💼 실무에선 이렇게 활용합니다!
- 정적 분석 도구 설정 시 Rule/Directive를 구분하여 적용
- Deviation 문서화 시 Required/Advisory 기준에 따라 판단
- 코드 리뷰 체크리스트에 Undecidable 항목 반영
- ISO 26262 감사 대응 시 규칙별 중요도 기반 문서화
🎯 핵심은 모든 규칙을 무조건 외우는 게 아니라, 어떤 규칙을 왜 적용해야 하는지를 이해하는 것입니다.
📢 다음 회차 예고!
3강 MISRA-C Rule Categories: 기본 문법 및 타입 안전성 규칙
‘정수 승격? 포인터 캐스팅? 그게 뭐 어쨌다고요?’
당신이 모르고 지나쳤던 C 언어의 위험한 기본기들,
실전 예시로 파헤쳐 봅니다!
규칙을 알면, 오류를 예방할 수 있다! 🧠💡
'SW Dev. > MISRA-C' 카테고리의 다른 글
| (MISRA-C 6강) 전처리기 사용 규칙과 코드 가독성 확보 (0) | 2025.09.07 |
|---|---|
| (MISRA-C 5강) 포인터 사용 제한과 안전한 메모리 접근 (1) | 2025.08.21 |
| (MISRA-C 4강) 제어 흐름과 조건문 규칙 (4) | 2025.08.16 |
| (MISRA-C 3강) Rule Categories: 기본 문법 & 타입 안전성 규칙 (5) | 2025.08.12 |
| (MISRA-C 1강) 탄생 배경과 적용 목적 (5) | 2025.08.05 |
