한빛출판네트워크

IT/모바일

디자인 패턴을 적용한 임베디드 시스템: 당신을 임베디드 전문가로 이끌어줄 꼼꼼한 멘토링

한빛미디어

번역서

절판

디자인 패턴을 적용한 임베디드 시스템: 당신을 임베디드 전문가로 이끌어줄 꼼꼼한 멘토링
좋아요: 26
  • 저자 : 엘레시아 화이트
  • 역자 : 우정은
  • 출간일 : 2013-06-22
  • 페이지 : 376쪽
  • ISBN : 9788968480195
  • 물류코드 :2019

합계 : 23,400

  • 도대체 내가 만든 프로그램이 어떻게 동작하는 거지?


    내가 만든 프로그램이 하드웨어의 LED에 불을 켜거나 스피커로 음악이 흘러나오게 할 때 프로그래머라면 누구나 ‘어떻게 하드웨어가 동작하길래?’라는 의문을 품게 된다. 이 책은 이러한 의문에 대한 답변을 준다. 외부장치와의 입출력, 내부 메모리의 구성, 코드를 저장하거나 파워를 절약하는 방법까지 이제 하드웨어의 동작방법을 이해하고 소프트웨어를 보자.

     

    대상 독자

    • 컴퓨터 공학, 전자공학 학부생, 대학원생
    • 하드웨어 시스템 입문자
    • 임베디드 시스템을 체계적으로 다시 공부하고 싶은 개발자

     

    이 책의 내용

     

    전달하려는 정보는 기술과 밀접한 관련이 있으나 편안한 방법으로 이를 전달해서 독자들이 소설을 읽듯 볼 수 있다. 반드시 프로그래밍을 직접 하면서 내용을 익힐 필요도 없다(그러나 예제를 직접 살펴보고 권고 사항을 자신의 코드에 적용한다면 책의 내용을 좀 더 잘 이해할 수 있을 것이다).
    이 책은 자신이 원하는 부분만 참고할 수 있는 기술적 매뉴얼과는 다르다. 물론 자신이 원하는 부분만 골라 읽을 수는 있지만 그렇게 해서는 탐색격멸 기법(search-and-destroy method)으로 제공하는 수많은 정보를 얻지 못할 것이다. 따라서 순서대로 책을 읽기 바란다. 책의 내용 전체를 이해하면 마법사가 마법서를 펴듯이 구현하고자 하는 기능과 관계된 장을 펴서 명령어 테이블을 만들거나 다양한 소수점 구현을 순식간에 할 수 있다.

    • 1장 소개_ 임베디드 시스템이란 무엇인가? 기존의 소프트웨어 개발과 무엇이 다른가?
    • 2장 시스템 아키텍처 만들기_ 시스템 아키텍처(그리고 문서)를 만드는 방법을 알아본다.
    • 3장 하드웨어에 익숙해지기_ 보드를 구동하는 과정에서 하드웨어와 소프트웨어를 통합한다는 건 어려운 일이다. 어떻게 하드웨어와 소프트웨어를 부드럽게 통합할 수 있는지 살펴본다.
    • 4장 출력, 입력, 타이머_ 임베디드 시스템의 ‘Hello World’ 버전으로 LED를 깜빡이는 기능을 구현한다. LED를 깜빡이는 기능을 구현하는 것은 생각보다 복잡하다.
    • 5장 실행 흐름 관리_ 시스템 설정, 인터럽트 활용, 상태 머신 만들기 등을 설명한다.
    • 6장 주변장치와 통신하기_ 임베디드 시스템은 UART, SSP, SPI, I2C, USB 등의 다양한 시리얼 통신을 제공한다. 네트워킹, 비   트 뱅, 병렬 버스도 빼놓을 수 없다. 
    • 7장 코드 업데이트하기_ 내부 업데이터를 이용하는 방법에서 직접 업데이터를 만드는 방법에 이르기까지 프로세서에서 실행하는 코드를 교체할 때 선택할 수 있는 다양한 방법을 학습한다.
    • 8장 추가 작업_ 램, 코드 공간, 프로세서 사이클을 줄이는 방법을 살펴본다.
    • 9장 수학_ 대부분의 임베디드 시스템에서는 어떤 형태로든 분석이 필요하다. 수학 연산과 소수점 연산이 어떻게 작동하는지 이해한다면 더 빠른 시스템을 구현하는 데 도움이 될 것이다.
    • 10장 소비 전력 줄이기_ 프로세서 사이클을 줄이는 방법에서 시스템 아키텍처 제안에 이르기까지 전력 소비를 줄이는 다양한 방법을 확인한다. 10장은 배터리에서 실행되는 시스템에 유익한 내용을 제공한다. 필자는 ‘엔지니어가 이런 순서로 생각했으면’ 하는 바람으로 장의 순서를 결정했다. 아키텍처를 먼저 소개한다는 것이 이상해 보일 수 있다. 그러나 최적화 문제를 걱정하기에 앞서 어떻게 시스템에 맞도록 자신의 코드를 구현할 것인가를 생각하는 것이 더 낫다고 생각한다.

     

  • [저자] 엘레시아 화이트

    신호 처리, 하드웨어 통합, 복잡한 시스템 디자인 및 성능 최적화가 전문 분야다. 다년간 임베디드 시스템 분야에서 DNA 스캐너, 비행기와 경주용 자동차의 관성 측정 장치, 미취학 어린이용 장난감, 범죄자 추적에 사용하는 탄환 발사 위치 시스템, 다양한 의학 장비 및 소비자용 기기를 만들었다. FAA(미국 연방 항공국)와 FDA(미국 식품 의약품국)에서 제품 인증을 받아 고품질 설계와 고품질 구현 능력을 인정받았다.
    몇 년간 관리직으로도 일했지만 직접 엔지니어링을 하고, 훌륭한 제품을 만드는 즐거움을 찾아 개발자로서의 인생을 다시 걷고 있다. 이 책을 통해 리더십과 멘토링을 제공할 수 있는 기회가 줄어들지 않았음을 느낄 수 있어서 감사히 생각한다.

     

    [역자] 우정은

    인하대학교 컴퓨터공학과를 졸업하고 LG전자, 썬마이크로시스템즈, 오라클 등에서 모바일 제품 관련 개발 일을 하다가 현재는 뉴질랜드 웰링턴에 있는 Flux Federation 사에서 모바일 앱 개발자로 새로운 인생을 즐기고 있다. 2010년 아이폰의 매력에 빠져들면서 번역 및 개발을 취미로 삼게 되었다. 2010년 이후로 꾸준히 서적을 번역한다.

     

  • CHAPTER 1 소개
    __1.1 컴파일러, 언어, 객체지향 프로그래밍 
    __1.2 임베디드 시스템 개발 
    __1.3 추가 자료 

    CHAPTER 2 시스템 아키텍처 만들기
    __2.1 시스템 다이어그램 만들기 
    __2.2 다이어그램에서 아키텍처까지 
    __2.3 샌드박스 활용 
    __2.4 추가 자료 

    CHAPTER 3 하드웨어에 익숙해지기
    __3.1 하드웨어와 소프트웨어 통합 
    __3.2 데이터시트 읽기 
    __3.3 프로세서는 언어다 
    __3.4 회로도 읽기 
    __3.5 디버깅 도구상자와 소화기 갖추기 
    __3.6 하드웨어와 소프트웨어 테스팅 
    __3.7 에러 처리 
    __3.8 추가 자료 

    CHAPTER 4 출력, 입력, 타이머
    __4.1 출력 토글링 
    __4.2 하드웨어와 작동 분리하기 
    __4.3 I/O 입력 
    __4.4 순간적인 버튼 누름 
    __4.5 정해지지 않은 런타임 
    __4.6 타이머 사용 
    __4.7 펄스 너비 변조 사용 
    __4.8 제품 출하 
    __4.9 추가 자료 

    CHAPTER 5 실행 흐름 관리
    __5.1 스케줄링과 운영체제 기본 
    __5.2 상태 머신 
    __5.3 인터럽트 
    __5.4 추천하지 않는 인터럽트 사용법 
    __5.5 와치독 
    __5.6 추가 자료 

    CHAPTER 6 주변장치와 통신하기
    __6.1 광범위하게 사용되는 주변장치 
    __6.2 다양한 통신 방식 
    __6.3 주변장치의 통신 기능 
    __6.4 추가 자료 

    CHAPTER 7 코드 업데이트하기
    __7.1 온보드 부트로더 
    __7.2 자신만의 업데이터 만들기 
    __7.3 벽돌 로더 
    __7.4 보안 
    __7.5 링커 스크립트 
    __7.6 요약 

    CHAPTER 8 추가 작업
    __8.1 코드 공간 
    __8.1.1 맵 파일 읽기(파트 1) 
    __8.2 램 
    __8.3 속도 
    __8.4 요약 
    __8.5 추가 자료 

    CHAPTER 9 수학
    __9.1 빠른 작동과 느린 작동 확인 
    __9.2 기존 알고리즘 사용 
    __9.3 알고리즘 설계와 수정 
    __9.4 가짜 소수점수 
    __9.5 추가 자료 

    CHAPTER 10 소비 전력 줄이기
    __10.1 전력 소비 이해 
    __10.2 방에서 나갈 땐 등을 끄자 
    __10.3 프로세서를 슬립 상태로 
    __10.4 추가 자료

  •  

    • 임베디드 시스템 만들기



      중학교 때, 미로를 탈출하는 마이크로 마우스가 처음 등장했다. 살아 있는 쥐처럼 움직이는 마이크로 마우스에 매료되어 버렸다. 초등학교 때부터 더 빠르게 반응하는 게임을 만들고 싶어 6502 어셈블러를 공부한 나였지만, 하드웨어와 소프트웨어가 결합한 마이크로 마우스는 오르기 힘든 산이었다. 하드웨어와 그 하드웨어에 딱 맞게 제작된 소프트웨어에 대한 동경은 그 때부터 시작되었다. 소프트웨어 개발, 컨설팅, 아키텍팅을 직업으로 삼으면서 하드웨어에 대한 동경은 점차 소프트웨어 공학으로 옮겨 갔다. GoF의 디자인 패턴을 처음 읽었을 때 어찌나 놀라왔는지 몇 달 동안 놓을 수가 없었다. 살아온 과정이 하드웨어와 디자인 패턴을 결합한 이 책을 만날 수 밖에 없었던 이유였나 보다.

      이 책은 변화에 잘 대응할 수 있도록 임베디드 시스템을 설계하고 구현하는 방법을 설명한다. 보통 OO 언어로 구현하는 다양한 디자인 패턴을 임베디드 시스템의 주력 언어인 C로 구현하는 방법을 설명한다. 또, C로 OO 프로그래밍의 기본 철학인 캡슐화, 정보은폐, 위임을 어떻게 구현하는 지 설명한다. 디자인 패턴을 적용하여 임베디드 시스템의 문제들을 해결한다. 또, 데이터시트 읽기, 프로세서, 회로도 읽기, 디버깅, 테스팅을 다루어서 하드웨어에 대한 기초 설명도 빼놓지 않았다. 임베디드 시스템이 갖춰야 하는 OS 수준 작업도 I/O, Timer, IRQ, 태스크 관리, 주변장치 통신으로 나누어 잘 설명한다. 부트로더, 코드 올리기, 메모리 관리, 수치 계산, 전력 관리 같이 응용프로그램 수준 작업도 잘 설명한다.

      초보자가 읽기엔 약간 부담스러울 수 있지만 임베디드 시스템 개발 전반을 잘 다룬 책으로 추천한다.

    • 우선 하드웨어 개발 사이클을 경험하지 못했기 때문에 이 책의 내용이 낯설었다. 하지만 오라일리 책의 특징인 정말 쉽게 쓰여져 있는 내용을 통해 웹 사전을 찾아가며 학습을 할 수 있었고, 관심을 갖고 있었던 임베디드의 첫 계단을 밟을 수 있었다.



      이 책에서 얻을 수 있었던 가장 중요한 부분은 프로젝트 계획표의 상세한 내용이었다. 하드웨어팀과 어떤 계획을 통해 일을 진행하는가 그에 대한 프로젝트 계획과 함께 그 상세 내용이 내가 하드웨어 프로젝트를 이해하는데 도움을 주었다.





      임베디드 시스템의 사전적 정의를 이야기 한다면, 기계 또는 전자 장치의 두뇌 역할을 하는 마이크로 프로세서를 장착해 설계함으로써 효과적인 제어를 할 수 있도록 하는 시스템을 말한다. 이 때 소프트웨어(운영체제)를 컴퓨터처럼 디스크에서 읽어들이는 게 아니라 칩에 담아 기기에 내장시킨 형태의 장치를 말하는 것.













      임베디드 시스템에서는 설계과정에서 불필요한 자원을 최소화 하는 것에 대해 언급한다.



      그 고려해야 할 항목 5가지.



      메모리(RAM)

      코드공간(ROM, Flash)

      프로세서 사이클 (속도)

      전력 소모

      프로세서 주변장치

      p. 42



      코딩 가이드라인이 중요한 이유는 디버깅 시간을 절약하여 생산성을 높일 수 있기 때문이다.



      구글 오픈소스 프로젝트 스타일 가이드: https://code.google.com/p/google-styleguide/







      p. 55



      임베디드 시스템에서는 MVC로 가상박스나 샌드박스를 제공해서 알고리즘 개발과 검증을 가능하게 함







      그렇다면 샌드박스의 사전적 정의는 무엇인가?



      보호된 영역 내에서 프로그램을 동작시키는 것으로, 외부 요인에 의해 악영향이 미치는 것을 방지하는 보안 모델. (‘아이를 모래밭(샌드 박스)의 밖에서 놀리지 않는다’라고 하는 말이 어원). 이 모델에서는 외부로부터 받은 프로그램을 보호된 영역, 즉 ‘상자’ 안에 가두고 나서 동작.



      한 블로그의 정리한 내용을 인용하자면,











      디자인 패턴을 알기 전에 객체 지향을 알아야 한다.







      물론 현대 개발자 중에 객체 지향을 모르는 경우는 거의 없을 것입니다. 하지만 중요한 것은 디자인 패턴은 객체 지향을 기반으로 한다는 것입니다. 객체 지향에 대한 완벽한 이해가 기본이 되어야 디자인 패턴을 이해할 수 있습니다.객체 지향에 대한 개념이 불명확한 초보 개발자들 혹은 절차 지향에 익숙한 개발자가 있을 경우는 디자인 패턴은 그만큼 불확실해 질 수 있으며 오히려 더 잘못된 설계를 야기할 수 있습니다.







      개발자의 예측이 얼마나 적중할 것인가?







      디자인 패턴은 설계 단계를 강조하고 있습니다. 즉 변화 혹은 변경이 있을 것으로 예상되는 부분에 디자인 패턴을 적용해서 유용하게 대처하는 것입니다. 하지만 중요한 것은 개발자의 예측이 항상 맞는 것은 아니라는 점입니다. 예를들어 이 부분은 유연한 변경이 필요하므로 디자인 패턴을 적용하고 이 부분은 그렇지 않으니깐 적용하지 말자라고 가정하고 소프트웨어를 설계합니다. 하지만 실제로 고객은 디자인 패턴을 적용한 부분에 대해서는 변경 요청을 하지않지만 적용하지 않은 부분에 대해서는 변경 요청을 할 수 있습니다. 그리고 이러한 일이 매우 자주 발생한 다는 점에 문제가 있습니다. 실제로 개발자의 예측이 맞을 확률은 채 10%가 되지 못한다는 주장도 있습니다.







      디자인 패턴은 너무 어렵다.







      국내의 대부분의 개발자들이 디자인 패턴을 공부하면서 얘기 하는 것이 너무 어렵다는 점입니다. 그렇다면 정말 디자인 패턴이 어려운 것일까요? 사실은 그렇지가 않습니다. 근데 어렵게 느끼는 이유는 무엇일까요? 그것은 대부분의디자인 패턴 책이 미국 책을 번역한 것이며 인터넷이나 잡지에 나오는 내용들 역시 미국에서 나온 자료를 토대로 하고 있다는 것이 문제 입니다. 미국의 개발자들은 오랜 기간 동엔 객체 지향 -> UML -> 디자인 패턴으로 옮겨오는 과정에 이미 익숙해 있습니다. 즉 디자인 패턴을 설명하면서 객체 지향과 UML에 대한 설명은 전혀 하지 않고 자연스럽게 해당 용어를 사용합니다. 하지만 국내 개발자들은 이러한 체계적인 과정 혹은 기술적인 적립이 매우 짧습니다. 그러므로 객체지향과 UML 등과 같은 체계에 익숙하지 않은 상태에서 디자인 패턴을 접하게 되므로 매우 혼동스러워 하게 되는 것입니다.



      만일 디자인 패턴이 어렵다고 느낀 다면 자신이 객체 지향에 대한 이해가 부족하지 않은 지를 의심해 보고 다시 기본부터 공부 해 보는 것이 바람직 합니다.







      디자인 패턴의 남용







      어떤 분야의 엔지니어든 한번 공부한 것 혹은 터득한 것 그 중에서도 터득하는 데 아주 어려움을 겪었다면 이것을 꼭 적용하고 싶어하는 경향이 있습니다. 그리고 심지어 억지로 디자인 패턴을 적용하는 경우도 발생합니다. 비록 디자인 패턴이 고급 개발자들의 경험의 결과라고는 하지만 잘못 적용된 디자인 패턴은 오히려 소프트웨어를 어렵고 복잡하게만 합니다.







      결국 이렇게 적용된 디자인 패턴은 프로젝트에 별 도움이 되지 않으며 재사용과 융통성 역시 이루어지지 않고 그 누구도 재사용하지 않는 결과로 나타나게 됩니다. 개발자들은 그냥 ‘그래 디자인 패턴 한번 적용해 봤어’라고 스스로 위안을 하고 프로젝트를 끝내게 될 것입니다.







      결국 디자인 패턴을 성공적으로 적용하기 위해서는 디자인 패턴이 기반으로 하는 객체 지향에 대한 사고를 확실히 이해하고 있어야 하며 뿐만 아니라 디자인 패턴을 맹신해서도 안됩니다. 그러한 이유로 리팩토링과 XP와 같은 다른접근 방법에 대해서도 함께 고려를 하고 병행해서 적용해야 합니다.







      --------------------------------------------------------------------------------------------------------------------------







      IoT(Internet of Things)의 시대가 다가오고, 아두이노 & 라즈베리파이 등을 작동하고 스스로 자신의 아이디어를 실현하는 개발자들이 증가하고 있다. 이 책을 통해 하드웨어에 익숙해지고자 노력하였고, 다시 한 번 내가 배워야 할 부분이 많다는 것을 실감하게 되었다. 특히 하드웨어와 소프트웨어의 통합 (즉 하드웨어 프로젝트 계획과 그 상세내용) 내용 부분이 가장 필요했던 부분이었다.







      간단한 기기를 만들고 작동시키는 것에서 만족하지 않고, 임베디드 시스템을 통해 프로젝트를 진행하고 그를 위한 디자인 패턴에 대한 이해를 하는데 도움이 될 책이다.

    • 일반적인 PC의 시대가 저물고 스마트폰이 대중화되면서 임베디드 시스템에 대한 관심이 높아지고 있다. 하지만, 임베디드 시스템은 PC나 서버에서 구동되는 Application과 달리 Hardware와 밀접한 관계를 가지고 있고, 또한 하드웨어의 제약사항에 많은 영향을 받기 때문에 임베디드 소프트웨어 개발은 일반적인 Application보다 더욱 어렵다.



      “디자인 패턴을 적용한 임베디드 시스템”은 이런 어려운 임베디드 시스템을 처음 접하는 개발자가 임베디드 시스템의 개발의 처음 단계부터 마지막 단계까지 설명을 해주는 가이드와 같은 역할을 하는 책이다. 처음에는 임베디드 시스템에 대한 간략한 개요를 설명하고 시스템 아키텍처를 설계하는 방법을 설명한다. 그리고 난 후에 임베디드 시스템이 가지는 성격처럼 하드웨어를 다루는 방법에 대해 설명을 하고, 또한 OS에 대한 설명을 한다. 이후 임베디드 시스템 개발자가 소프트웨어를 개발하는 방법을 설명을 한다. 후반부에는 대다수의 임베디드 시스템의 목표인 소프트웨어 크기를 줄이거나 전력을 줄이는 방법을 설명하며 마무리를 하고 있다.



      이 책이 가지는 장단점은 바로 임베디드 시스템을 다룬다는 점일 것이다. 하드웨어와 관계가 많기 때문에 대부분의 임베디드 관련 서적들은 그 내용이 쉽지가 않다. (이 책도 어렵기는 하지만,) 초급 개발자의 관점에 책의 수준을 맞추어 작성을 해서 상대적으로 책의 내용을 이해하기가 쉽다. 또한 (비록 주로 C의 관점에서 코드를 다루지만,) 자바 개발자들에게 친숙한 디자인 패턴의 관점을 차용해서 각 장을 설명해서 (우리나라에 유독 많은 자바 개발자들에게) 내용 이해를 친숙하게 했다는 것도 하나의 장점이다. 반면에, 임베디드 시스템을 다루기 때문에 전자공학의 지식이 없는 사람은 책 초반부터 심한 좌절감을 느끼기가 쉽고, 또한 (다수의 임베디드 시스템들은 자체 OS를 개발해야 하기 때문에) OS에 대한 지식이 없다면 책의 내용이 무척 어렵게 느껴질 것이다.



      회사와 병행하여 야간 대학원을 다닐 때 (업무와 큰 관계가 없었지만,) 임베디드 시스템에 관심이 많아서 관련 과목을 꽤 많이 들었었다. (비록 많은 것을 얻었음에도 불구하고,) 임베디드 시스템 수업은 너무나도 어려웠었다. 그래서 한빛리더스에서 미션 도서로 이 책이 나왔을 때 한편으로는 선택을 하고 싶다는 생각이 들었지만, 한편으로는 그 고통을 겪고 싶지 않아서 다른 책을 선택할까 하는 생각이 많이 들다 결국 이 책을 선택했었다. 책을 리뷰하고 나니 대학원에서 관련 수업을 듣기 전에 이 책을 만났었다면 관련 수업에 많은 도움이 되었을텐데 하는 아쉬움이 남는다. 지금 임베디드 세계에 첫발을 내딛고 싶어하는 이가 있다면 이 책을 볼 것을 권한다.

  • 내용이 없습니다.
    • 임베디드 하드웨어 이해와 설계(개정판)

      존 캣솔리스

    • 임베디드 안드로이드 : 안드로이드 포팅, 확장, 커스터마이징하기

      카림 야크무르

    • IT EXPERT, ARM으로 배우는 임베디드 리눅스 시스템 : CPU에서 안드로이드까지 총망라! (개정판)

      안효복

    • Blog2Book, 임베디드 프로그래밍 C 코드 최적화

      김유진

닫기

해당 상품을 장바구니에 담았습니다.
장바구니로 이동하시겠습니까?