[IOT-003][입문] 조건을 비교해 C·C++·MicroPython 고르기
페이지 정보

본문
[이번 수업]
임베디드·IoT 프로젝트에서 C, C++, MicroPython 중 무엇을 쓸지 조건으로 판단합니다. 언어의 우열을 정하는 대신 대상 보드 지원, 메모리, 시간 제약, 기존 라이브러리, 팀의 개발 속도를 표로 비교합니다. Python으로 간단한 선택 규칙도 실행합니다.
[선수지식]
IOT-001의 임베디드·IoT·엣지 개념과 IOT-002의 MCU·SoC·보드 구성을 알면 좋습니다. Python 딕셔너리와 조건문만 사용합니다.
[학습목표]
1. 세 언어의 대표 장점과 제약을 설명합니다.
2. 제품 조건을 결정표로 바꿉니다.
3. 후보 선택 뒤 보드에서 측정해야 할 항목을 정합니다.
[핵심개념]
C는 보드 제조사 SDK와 저수준 드라이버에서 널리 사용되고 실행 환경을 작게 구성하기 좋습니다. 메모리와 하드웨어 접근을 직접 다루는 만큼 배열 범위, 포인터 수명, 정수 크기를 세심하게 관리해야 합니다.
C++는 클래스, 템플릿, RAII처럼 자원 수명을 구조화하는 기능을 제공하며 기존 C++ 라이브러리나 복잡한 상태를 모델링할 때 유용합니다. 단, 보드 툴체인이 지원하는 표준 버전과 표준 라이브러리 범위, 예외·RTTI 사용 정책을 확인해야 합니다.
MicroPython은 마이크로컨트롤러에서 실행하도록 설계된 Python 구현입니다. REPL로 빠르게 실험하고 코드를 읽기 쉽게 만들 수 있지만 포트마다 지원 보드·모듈이 다르고 인터프리터와 힙에 RAM·플래시가 필요합니다. CPython과 완전히 같다고 가정하지 말고 고정한 릴리스와 보드 문서를 확인합니다.
선택 순서는 보드와 공식 SDK 지원, 필수 드라이버·라이브러리, RAM·플래시, 시간·전력 제약, 팀 역량과 유지보수, 업데이트 방식입니다.
[따라하기]
아래 내용을 `choose_language.py`로 저장하세요. 이 규칙은 후보를 좁히는 학습용 결정표이며 실제 벤치마크를 대신하지 않습니다.
```python
profiles = [
{"name": "소형 센서", "micropython": False, "strict_time": True,
"cpp_library": False, "prototype": False},
{"name": "기존 그래픽 장치", "micropython": False, "strict_time": False,
"cpp_library": True, "prototype": False},
{"name": "학습용 보드", "micropython": True, "strict_time": False,
"cpp_library": False, "prototype": True},
]
def choose(profile):
if profile["micropython"] and profile["prototype"] and not profile["strict_time"]:
return "MicroPython"
if profile["cpp_library"]:
return "C++"
return "C"
for profile in profiles:
print(profile["name"], "->", choose(profile))
```
macOS/Linux는 `python3 choose_language.py`, Windows PowerShell은 `python choose_language.py`로 실행합니다. 예상 결과는 소형 센서→C, 기존 그래픽 장치→C++, 학습용 보드→MicroPython입니다. 이 결과 뒤에는 각 보드로 같은 핵심 작업을 구현해 펌웨어 크기 최대 RAM, 응답 시간, 전력과 빌드 재현성을 비교해야 합니다.
[흔한 실수]
익숙한 언어 하나로 모든 보드를 결정하지 마세요. 평균 실행 시간만 보고 최악 시간을 놓치거나 개발 PC에서만 측정하면 실제 장치 조건을 반영하지 못합니다. MicroPython이라는 이름만 보고 모든 Python 패키지가 된다고 가정하지 마세요. 반대로 C++ 추상화가 항상 느리다고 단정하지 말고 컴파일 옵션과 생성 결과를 측정합니다.
[보안 주의]
실습은 로컬 결정표만 실행하며 장치에 코드를 쓰지 않습니다. 펌웨어 실험은 본인 소유의 개발 보드와 격리 네트워크에서 하세요. C/C++는 경계 검사, 컴파일러 경고, 정적 분석과 호스트용 검사 도구를 활용하고 외부 입력 길이·범위를 검증합니다. 언어와 무관하게 기본 비밀번호를 피하고, 비밀값을 소스에 넣지 않으며, 서명된 업데이트·권한 제한·안전한 초기화·보안 로그를 제품 요구사항에 포함합니다.
[직접 해볼 과제]
새 프로필 하나를 추가하고 보드 지원, 시간 제약, 라이브러리, 프로토타입 조건을 정하세요. 선택 결과와 함께 실제 장치에서 측정할 지표 다섯 개를 적고, 조건 하나를 바꿨을 때 결과가 타당한지 설명합니다.
[확인문제]
1. MicroPython 후보를 고르기 전에 보드에서 확인할 것은 무엇인가요?
2. C++를 선택했을 때 툴체인에서 확인할 항목은 무엇인가요?
3. 언어 선택 뒤 실제 장비 측정이 필요한 이유는 무엇인가요?
[다음 학습]
001~003 입문 순환을 마쳤습니다. 다음 수업은 CORE-004 ‘문자·이미지·소리가 데이터가 되는 방법’이며, IOT 트랙에서는 IOT-004 ‘GPIO·센서·액추에이터’로 이어집니다.
[공식 참고 자료]
ISO C 표준: https://www.iso.org/standard/82075.html
Standard C++ Foundation 표준 안내: https://isocpp.org/std/the-standard
MicroPython 제약 장치 안내: https://docs.micropython.org/en/latest/reference/constrained.html
MicroPython machine 모듈: https://docs.micropython.org/en/latest/library/machine.html
NIST IoT 보안 기준 IR 8259A: https://csrc.nist.gov/pubs/ir/8259/a/final
임베디드·IoT 프로젝트에서 C, C++, MicroPython 중 무엇을 쓸지 조건으로 판단합니다. 언어의 우열을 정하는 대신 대상 보드 지원, 메모리, 시간 제약, 기존 라이브러리, 팀의 개발 속도를 표로 비교합니다. Python으로 간단한 선택 규칙도 실행합니다.
[선수지식]
IOT-001의 임베디드·IoT·엣지 개념과 IOT-002의 MCU·SoC·보드 구성을 알면 좋습니다. Python 딕셔너리와 조건문만 사용합니다.
[학습목표]
1. 세 언어의 대표 장점과 제약을 설명합니다.
2. 제품 조건을 결정표로 바꿉니다.
3. 후보 선택 뒤 보드에서 측정해야 할 항목을 정합니다.
[핵심개념]
C는 보드 제조사 SDK와 저수준 드라이버에서 널리 사용되고 실행 환경을 작게 구성하기 좋습니다. 메모리와 하드웨어 접근을 직접 다루는 만큼 배열 범위, 포인터 수명, 정수 크기를 세심하게 관리해야 합니다.
C++는 클래스, 템플릿, RAII처럼 자원 수명을 구조화하는 기능을 제공하며 기존 C++ 라이브러리나 복잡한 상태를 모델링할 때 유용합니다. 단, 보드 툴체인이 지원하는 표준 버전과 표준 라이브러리 범위, 예외·RTTI 사용 정책을 확인해야 합니다.
MicroPython은 마이크로컨트롤러에서 실행하도록 설계된 Python 구현입니다. REPL로 빠르게 실험하고 코드를 읽기 쉽게 만들 수 있지만 포트마다 지원 보드·모듈이 다르고 인터프리터와 힙에 RAM·플래시가 필요합니다. CPython과 완전히 같다고 가정하지 말고 고정한 릴리스와 보드 문서를 확인합니다.
선택 순서는 보드와 공식 SDK 지원, 필수 드라이버·라이브러리, RAM·플래시, 시간·전력 제약, 팀 역량과 유지보수, 업데이트 방식입니다.
[따라하기]
아래 내용을 `choose_language.py`로 저장하세요. 이 규칙은 후보를 좁히는 학습용 결정표이며 실제 벤치마크를 대신하지 않습니다.
```python
profiles = [
{"name": "소형 센서", "micropython": False, "strict_time": True,
"cpp_library": False, "prototype": False},
{"name": "기존 그래픽 장치", "micropython": False, "strict_time": False,
"cpp_library": True, "prototype": False},
{"name": "학습용 보드", "micropython": True, "strict_time": False,
"cpp_library": False, "prototype": True},
]
def choose(profile):
if profile["micropython"] and profile["prototype"] and not profile["strict_time"]:
return "MicroPython"
if profile["cpp_library"]:
return "C++"
return "C"
for profile in profiles:
print(profile["name"], "->", choose(profile))
```
macOS/Linux는 `python3 choose_language.py`, Windows PowerShell은 `python choose_language.py`로 실행합니다. 예상 결과는 소형 센서→C, 기존 그래픽 장치→C++, 학습용 보드→MicroPython입니다. 이 결과 뒤에는 각 보드로 같은 핵심 작업을 구현해 펌웨어 크기 최대 RAM, 응답 시간, 전력과 빌드 재현성을 비교해야 합니다.
[흔한 실수]
익숙한 언어 하나로 모든 보드를 결정하지 마세요. 평균 실행 시간만 보고 최악 시간을 놓치거나 개발 PC에서만 측정하면 실제 장치 조건을 반영하지 못합니다. MicroPython이라는 이름만 보고 모든 Python 패키지가 된다고 가정하지 마세요. 반대로 C++ 추상화가 항상 느리다고 단정하지 말고 컴파일 옵션과 생성 결과를 측정합니다.
[보안 주의]
실습은 로컬 결정표만 실행하며 장치에 코드를 쓰지 않습니다. 펌웨어 실험은 본인 소유의 개발 보드와 격리 네트워크에서 하세요. C/C++는 경계 검사, 컴파일러 경고, 정적 분석과 호스트용 검사 도구를 활용하고 외부 입력 길이·범위를 검증합니다. 언어와 무관하게 기본 비밀번호를 피하고, 비밀값을 소스에 넣지 않으며, 서명된 업데이트·권한 제한·안전한 초기화·보안 로그를 제품 요구사항에 포함합니다.
[직접 해볼 과제]
새 프로필 하나를 추가하고 보드 지원, 시간 제약, 라이브러리, 프로토타입 조건을 정하세요. 선택 결과와 함께 실제 장치에서 측정할 지표 다섯 개를 적고, 조건 하나를 바꿨을 때 결과가 타당한지 설명합니다.
[확인문제]
1. MicroPython 후보를 고르기 전에 보드에서 확인할 것은 무엇인가요?
2. C++를 선택했을 때 툴체인에서 확인할 항목은 무엇인가요?
3. 언어 선택 뒤 실제 장비 측정이 필요한 이유는 무엇인가요?
[다음 학습]
001~003 입문 순환을 마쳤습니다. 다음 수업은 CORE-004 ‘문자·이미지·소리가 데이터가 되는 방법’이며, IOT 트랙에서는 IOT-004 ‘GPIO·센서·액추에이터’로 이어집니다.
[공식 참고 자료]
ISO C 표준: https://www.iso.org/standard/82075.html
Standard C++ Foundation 표준 안내: https://isocpp.org/std/the-standard
MicroPython 제약 장치 안내: https://docs.micropython.org/en/latest/reference/constrained.html
MicroPython machine 모듈: https://docs.micropython.org/en/latest/library/machine.html
NIST IoT 보안 기준 IR 8259A: https://csrc.nist.gov/pubs/ir/8259/a/final
- 이전글[CORE-004][기초] 문자·이미지·소리를 숫자와 바이트로 보기 26.08.31
- 다음글[MOBILE-003][입문] 화면과 컴포넌트 연결해 이동 만들기 26.08.30
댓글목록
등록된 댓글이 없습니다.
