-
-
자바로 시작하는 라즈베리 파이 - BlueJ로 손쉬운 프로그래밍
에사키 노리히데 외 지음, 주한길 옮김 / 영진.com(영진닷컴) / 2019년 4월
평점 :
무어의 법칙은 대충 얼버무려 말해 컴퓨터의 성능이 2년마다 두 배로 증가한다는 법칙이다. 두 배로 증가한다는 말은 기하급수적 증가를 말한다. 2010년 이후 이 기하급수적 증가가 자원의 한계로 어느 선에서 끝나버리는, 생태계 생명들과 같은 끝을 맞게 될 것인가가 주요 관심사가 되어오고 있다. 반도체의 집적 기술의 한계는 자원의 부족이 아니라 크기의 물리적 한계일 것이다. 전공자에게 물어보니 S전자에서도 나름 이렇게 저렇게 배열 방법을 바꾸는 등 여러가지 기술 연구로 한계를 뚫는 연구를 하고 있고, 인텔도 5nm 공정 CPU 같은 것들을 만들기 위해 전력을 다하고 있는 듯 보이지만, 집적도 대비 경제성 등에서 2010년 이전에 보였던 찬란한 두배수 기술 증가 현상은 이미 막을 내리고 있는 듯하다. 새 출시 휴대폰의 성능도 몇년 전에 비해 그닥 피부로 와닿지 않는 듯하고, 3년만에 갈아치우던 컴퓨터는 5년을 써도 멀쩡하고 인터넷만 하는 집 컴은 10년까지도 갈 기세다.
이런 나른한 기술 정체기에서 발견한 라즈베리 파이는 신세계다. 스마트폰이 보편화되기 시작하면서, 이렇게 작고 납작한 것으로 할 수 있는 것들을 왜 저토록 크고 무거운 데스크탑 컴퓨터로 해야 하지? 라는 생각을 가끔 하곤 했는데, 사실 스마트폰 기술로 보자면 이미 오래전에 스마트폰 크기의 본체가 나왔어야 했건만 이제야 라고 생각했지만, 알고 보니 라즈베리 파이는 2012년에 출시되어 급속도로 세계적으로 퍼져나갔으니 내가 늦게 알게 된 것 뿐이다. 라즈베리 파이는 5만원 대의 저렴한 가격과 완전 개방된 규격 및 공개 소프트웨어 등으로 인해 이미 수많은 매니아들의 장난감이 되고 있었던 것이다.
라즈베리 파이는 영국에서 교육용으로 개발한 초소형 컴퓨터다. 컴퓨터라고 하면 입출력장치를 모두 어우르는 말이니, 마이크로 컨트롤러 보드 쯤으로 생각하면 된다. 즉 책상 밑이나 위에 큼직하고 커다랗고 못생긴 네모난 상자 안에 여러 선들이 엉켜 들어 있는 복잡한 보드인데, 그걸 아주아주 작게 만들었다. CPU와 통신 기기, 센서와 입출력 장치들을 연결하는 연결부위들을 제공하는 보드를 아주 초소형으로 만들어 제공한다. 매력적인 건 단지 초소형이라는 크기에만 있지 않다. 라즈베리파이의 매력은 바로 초소형이라는 특징 뿐만 아니라 바로 이 확장 커넥터를 이용한 전자 회로 제어에 있다. 기존의 커다란 데스크탑 컴퓨터가 아는 사람에겐 누가 망가졌다고 하면 가서 고쳐줘야 하는 따분한 하드웨어이고 모르는 사람에겐 세상과 연결시켜주는 덩치 큰 블랙박스여서 그저 소프트웨어, 즉 뭐든 모니터 화면으로만 조작할 수 있는 것들만 제작하고 소비했다면, 이 손바닥만한 작은 보드로는 움직이는 것, 만져지는 것, 기능하는 하드웨어들을 연결시키켜 조작할 수 있는 것이다. 확인하고 싶다면 유튜브에서는 라즈베리 파이로 만든 각종 장난감 혹은 사물인터넷, 인공지능 미러, 레트로 게임기기, 원격 CCTV 모니터, 터치스크린과 연결시켜 만든 조잡하지만 직접 만든 노트북 혹은 패드형 컴퓨터들을 볼 수 있다. 충분한 재료와 지식과 내공이 있다면 로봇도 만들 수 있겠다.
그런데 약 5만원선의 최신의 플래그쉽모델 쯤 되는 3세대 라즈베리파이 3B만 달랑 가지고는 아무것도 할 수가 없다. 하드 대신 마이크로 SD 카드가 필요하고 모니터 스크린, 키보드 등은 있는 것을 쓴다고 하더라도, HDMI 케이블이나 블루투스 장비 등 사소한 것들에서부터 쿨러니 케이스니 하는 것들로 점점 더 많은 걸 구입하게 된다. 아주 단순한 케이블만 있으면 스크린과 마우스 모니터 등 기본적인 것들을 연결해 일반 PC처럼 사용할 수도 있다. 물론 10만원이 넘어가는 마이크로소프트 윈도우가 5만원짜리 보드에 들어있을리는 없다. 윈도우10 지원은 된다고 하나 여기에 최적화되었을 것 같지도 않고, 하드웨어를 직접 조작할 수 있는 공개된 기술이 널려있는 라즈비안에 굳이 윈도우를 설치할 이유는 없을 듯하다. 대신 라즈비안이라는 리눅스 OS를 제공하는데, 오피스 류나 인터넷 등의 기본적인 앱은 라즈비안에 포함되어 있으므로 실제 컴퓨터로 사용도 가능하고, 간단하게 USB와 커넥터 몇 개만 가지면 들고 다니다가, 필요한 곳에 가서 모니터와 키보드마우스만 연결하면 된다. 홀린 듯이 라즈베리 파이에 관련된 유튜브 채널들을 넷플릭스 삼아 밤낮으로 시청하던 때가 있었을 만큼 흥미로운 장치지만, 막상 구입해서 이것 저것 장만하며 땜질하고 할 엄두는 못내고, 신기술이 변화시키는 변두리 모습을 구경하는 입장이었다.
대개 라즈베리파이는 파이썬으로 대통합을 한 듯한데, 기본 언어로 파이썬이 장착되어 애초 라즈베리파이의 탄생 목적인 학습 타겟이 바로 파이썬 언어를 통한 학습이기도 하다. 그러나 라즈비안에는 인터넷 환경의 객체 지향 프로그램인 자바 기반의 개발환경이 BlueJ도 설치되어 있다. 이 말은 라즈베리파이에서 자바 프로그램을 짤 때 GPIO 커넥터를 이용한 전자회로의 제어나 인터페이스를 이용하는 본격적 프로그램이 가능하다는 소리다. 즉 라즈베리파이로 사물인터넷을 조작할 수 있다는 소리다. 전자공학에 대해서는 1도 모르지만, 간단한 회로도가 그것을 제어하는 소프트웨어 코드와 함께 인터넷에 널려있으니 맘만 먹으면 재미난 장난감이 될 수도 있다.
이 책의 특징은 라즈비안의 구조와 소개에서부터 처음 사용하는 사용자에게 필요한 주변 기기들, 소프트웨어 설치 방법 등 처음 시작하는 사람을 위한 상세한 설명에서부터 자바와 전자회로 공작에 이르는 세부적이고 전문적인 방법까지 넓은 커버리지를 갖는다. 사실 뭐든 취미로 시작하려는 사람들에게는 개념적 설명과 단단한 지식으로 무장한 입문 방법보다는 빠르게 뭐든 손으로 척 하고 만들어낼 수 있는 숏컷이 필요하다. 여기가 어딘지 지금 뭘 하는 건지는 잘 몰라도 가장 핵심적인 부분만을 징검다리 삼아 건너가는 빠른 길 말이다. 때문에 라즈베리파이를 장난감 삼아 산 사람들이 이미 파악하고 경험했을 라즈베안의 설치와 설정 등의 단계만 지나면 바로 BlueJ와 자바 사용법으로 들어가는데 자바 언어의 문법과 API, 기본 튜토리얼만도 거의 100페이지에 할애하기 때문에 C 같은 타언어를 사용하고 있는 사람들은 물론 초보자들까지 이해할 수 있는 수준부터 소개된다. 이후 하드웨어 파트로 넘어가 전자회로 파트에서 간단한 회로도 기호와 같은 전자 공학의 기초 사항을 소개하고, 라즈베리파이의 확장 커넥터의 각 핀번호의 기능과 명칭 등의 신세계가 열린다. 납땜 작업에 필요한 공구며 점프선의 종류 LED 스위치 연결법 등으로 이어진다.
이런 간단한 건 유튜브 동영상으로도 봤지만 실제 코딩하는 부분이 코딩이라기 보다는 복사해서 붙여놓기 수준이어서 그토록 간단해 보이는 LED 제어라고 하더라도 뭘하는 건지 제대로 이해하기 어려웠는데,책에서는 LED의 입출력 특성과 작동 원리 그리고 주의사항 등을 초보자가 대략 이해가능한 선에서 설명하고 있어 실제로 작동 원리를 이해하면서 제어 프로그램을 짜고 하드웨어를 컴퓨터에 연결할 수 있을 것 같다. 점멸 프로그램 역시 GPIO 제어 API를 임포트 해서 인스턴트 생성하고 출력 레벨을 제어하는 것등을 각 코드를 한줄 한줄 상세하게 설명한다. 결국 우리가 컴퓨터 창으로 마우스를 살살 움직여 LED의 밝기를 조절할 수 있는 경험을 하는 게 첫번째 프로젝트이다. 간단한 프로그램이지만 사실 많은 곳에 응용이 가능할 것 같다. 타이머를 써서 특정 시간에 빛을 쪼이게 한다던지 뭐 기타 등등.
두번째 프로젝트는 기본적 입력 부품은 On/Off 스위치 제어다. 회로와 배선도에 따라 납땜을 하고, 제시된 대로 프로그램을 하면 우선 전압에 따라 화면에 Low / High를 표시하는 간단한 프로그램으로 시작해, 일정 시간마다 스위치 상태를 조사하여 스위치가 눌려있으면 빨간색 원을, 눌려있지 않으면 파란색 원을 출력하는 프로그램으로 이어진다. 즉 스위치 입력 신호의 변화를 이벤트로 처리하는 방법과 스위치 입력에 변화가 있을 때 즉시 핀의 출력을 변경하는 방법 등을 소개한다.
이 다음 프로젝트들은 실제적인 기기 제어를 가능하게 하는 시리얼 인터페이스(SPI, I2C)를 사용하여 IC를 제어한다. SPI와 I2C는 오래전부터 최신까지 가장 많은 IC에 탑재되어 있기에 많은 기기들을 제어하는데 응용할 수 있다. 예를 들자면 PWM 출력 드라이버 IC 모듈을 라즈베리 파이에 연결하면 서보모터를 제어할 수 있는데, 자바 프로그램으로 서보모터의 제어가 가능하다. 책에는 이 모듈을 라즈베리파이의 확장 커넥터와 전지에 연결하는 회로도와 접속도, 제어 패키지 입포트 방법,, 서보모터를 회전시키는 코드 조각 등으로 튜토리얼을 보여주고, 모니터 스크린 상의 슬라이더로 미세하게 각도 값을 조정해서 해당 값의 각도로 회전하도록 하는 프로그램을 보여준다. 같은 방식으로 모터 드라이버 모듈(DRV8830) 연결 및 제어 방법을 보여준 후 3축 가속도 센서 모듈을 사용하여 구술굴리기 게임기를 제작한다. 이 센서가 부착된 회로의 기울기나 움직임을 감지할 수 있는데, 여기서는 X,Y,Z 세 축의 가속도를 읽어서 게임에 이용함으로써 현실세계에서 가속센서가 달린 장치를 조작함으로써 화면상에서 게임하는 효과를 낸다. 조이스틱이나 마우스 등이 아닌 전혀 새로운 장비로 게임을 할 수 있는 이러한 새로운 아이디어가 놀랍다.
최종적으로는 온도센서에서 수집한 온도 데이터를 웹상에서 조작하는 프로젝트를 보여주는데, 라즈베리파이를 웹서버로 설정하여 다른 컴퓨터에서 http로 연결하고, 서블릿 컨테이너인 Tomcat을 사용하는 등 온갖 기술을 집대성하여 사물인터넷의 원형을 프로그램할 수 있게 된다. 이쪽에서 사용하는 기술은 서블릿, JSP, Tomcat, MySQL 등 매우 많고 복잡하지만, 이렇가 하나의 챕터로 그 복잡한 기술을 모두 빠짐없이 담았다는 사실이 중요한듯하다. 부록으로는 간단하지만, 여러가지 유틸리티 소개와 추가 기능 등이 있다. 라즈베리파이로 뭔가를 연결하고 제어하고 싶지만, 아무런 전자공학적 지식이 없는 사용자, 자바 언어등을 모르는 사용자들에게 유용한 책이다.
* 3일전(2019년 6월 25일) 라즈베리파이4가 나왔다. 듀얼모니터(4K 아웃풋)와 램이 4G까지 지원되고,
기가이더넷 포트, 2개의 USB2 포트 2개의 USB3 포트 지원, USB-C 타입의 파워 커넥터 등이 특이 사항.
가격이 1G램은 35불 4G램 버전이 55불이다. 넷플릭스 전용 머신으로도 손색이 없을 듯