[Clean Architecture] 29장. 클린 임베디드 아키텍처
|Introduction
소프트웨어는 닳지 않지만, 펌웨어나 하드웨어는 낡아 가므로 결국 소프트웨어도 수정해야 한다.
- 더그 슈미트
- 소프트웨어
- 긴 시간 유용하게 쓸 수 있음
- 펌웨어
- 하드웨어가 발전할수록 낡아갈 것
- 더그의 주장에 아래와 같이 덧붙일 것
소프트웨어는 닳지 않지만, 펌웨어나 하드웨어에 대한 의존성을 관리하지 않으면 안으로부터 파괴될 수 있다.
- 더그가 내린 펌웨어 정의가 마음에 들지만, 또 다른 정의도 찾아보았다.
- 펌웨어는 ROM, EPROM 혹은 플래시 메모리 같은 비휘발성 메모리에 유지된다.
- 펌웨어는 하드웨어 장치에 프로그래밍된 소프트웨어 프로그램 혹은 명령어 집합이다.
- 펌웨어는 개발 하드웨어에 내장되는 소프트웨어다.
- 펌웨어는 읽기 전용 메모리 ROM 에 쓰여진 소프트웨어 (프로그램이거나 데이터) 다.
- 필자는 펌웨어는 더 적게 만들고, 소프트웨어를 많이 만드는 것을 바라지만, 펌웨어 엔지니어들이 펌웨어를 너무 많이 양산해내는 상황을 실망스러워 한다.
- 필자는 오래전부터 소프트웨어를 하드웨어로부터 분리할 필요성을 느끼고 또 이해하고 있었지만, 더그의 말을 듣고 나서야 소프트웨어와 펌웨어라는 용어의 상호 관계가 명확해졌고, 이에 기초해 두 용어를 어떻게 사용해야 할 지 명쾌하게 됨
- 엔지니어와 프로그래머에게 전하는 메시지는 분명함
- 펌웨어를 수없이 양산하는 일을 멈추고, 코드에게 유효 수명을 길게 늘릴 수 있는 기회를 주어라
앱-티튜드 테스트
- 켄트 백은 소프트웨어를 구축하는 세 가지 활동을 다음과 같이 기술함
- 먼저 동작하게 만들어라
- 그리고 올바르게 만들어라
- 그리고 빠르게 만들어라
- 앱이 동작하도록 만드는 것을 필자는 개발자용 앱-티튜드 테스트라고 부름
- 프로그래머가 오직 앱이 동작하도록 만드는 일만 신경 쓴다면 자신의 제품과 고용주에게 몹쓸 짓을 하는 것
- 프로그래밍에는 단순히 앱이 동작하도록 만드는 것보다 중요한 것이 훨씬 많음
타깃-하드웨어 병목현상
- 임베디드가 지닌 특수한 문제 중 하나는 타킷-하드웨어 병목현상
- 임베디드 코드가 클린 아키텍처 원칙과 실천법을 따르지 않고 작성된다면,
- 대개의 경우 코드를 테스트할 수 있는 환경이 해당 특정 타킷으로 국한될 것
- 그리고 그 타킷이 테스트가 가능한 유일한 장소라면 타킷-하드웨어 병목현상이 발생하여 진척이 느려질 것
클린 임베디드 아키텍처는 테스트하기 쉬운 임베디드 아키텍처다
HAL 사용자에게 하드웨어 세부사항을 드러내지 말라
인터페이스를 통하고 대체 가능성을 높이는 방향으로 프로그래밍하라
DRY 원칙: 조건부 컴파일 지시자를 반복하지 말라
결론
- 임베디드 소프트웨어를 개발하는 사람들은 임베디드 소프트웨어 바깥의 경험에서 많은 것을 배울 수 있음
- 클린 임베디드 아키텍처는 제품이 장시간 생명력을 유지하는 데 도움을 줌