Technology & Developer 03 전세계개발자를열광시킨 Raspberry Pi 와 Java Technology 의활용 초소형컴퓨터라즈베리파이 (Raspberry Pi) 의열풍이뜨겁게불고있다. 2012 년초처음발매이후 벌써 100 만대이상이판매되었으며, 이미해외나국내의발빠른개발자들은이작은컴퓨터를 이용하여다양한창작품들을만들어내고있다. 그리고얼마전구글 (Google) 이영국의어린이 프로그래밍교육을위해라즈베리파이 15,000 대를기부했다는소식도언론에소개되고있는것을 보니, 그열풍을쉽게가늠해볼수있을것같다. 도대체신용카드한장보다조금큰크기에불과한 이작은컴퓨터가무엇이기에이렇게화제를만들어내는걸까? 본고에서는최근개발자들사이에서 화제가되고있는라즈베리파이에대하여자세히알아보고, 최신의 Java 기술을이용하여이를좀더 다양하게활용할수있는방법에대하여알아보고자한다. 저자 - 최승호컨설턴트, 한국오라클 Java Embedded GSU(seungho.choi@oracle.com) 라즈베리파이 (Raspberry Pi) 란? 라즈베리파이는영국의라즈베리파이재단이학교에서기초컴퓨터과학교육을증진시키기위해서만 든, 신용카드한장크기정도의기판으로제작된싱글보드컴퓨터이다. 기본적으로작은회로보드, ARM 기반의 CPU, 그래픽프로세서, 이더넷, 그리고몇가지핀과포트로구성된단순한형태의 PC 이지만, 데스 SDCard Slot Power General Purpose I/O < 그림 1> 라즈베리파이모델 B RCA Video HDMI Audio USB Ethernet 크탑 PC 가할수있는많은것들을라즈 베리파이에서도할수있다. 운영체제 (OS) 는일반적으로리눅스를탑재하는 경우가많지만, 오픈소스 PC 인만큼안 드로이드를탑재하여사용하기도한다. < 그림 1> 은라즈베리파이모델 B 를나타 내고있으며, 그림에서볼수있듯이화 면출력을위한 HDMI 포트를비롯하여 다양한입출력포트등이내장되어있는 것을확인할수있다. 83
84 라즈베리파이는그래픽성능이뛰어나면서도저렴한가격 ( 모델 A 의경우 25 달러, 모델 B 의경우 35 달러 ) 이라는특징을갖고있다. 세부적으로좀더자세히특징을살펴보면브로드컴의 BCM2835 단일칩시스 템을사용하며, 이칩에는 ARM1176JZF-S 700 MHz 프로세서, 비디오코어 IV GPU 와 RAM 이들어있다. 라 즈베리파이는하드디스크나솔리드스테이트드라이브를비롯한내장디스크드라이브를포함하고있 지않으며, SD 카드를운영체제를포함한데이터를담기위한외부저장장치로사용하고있다. 와이파이 와블루투스모듈이빠져있는것이아쉬운부분이지만, 별도로판매하는모듈을사용하면이러한기능들 도추가해서사용할수있다. 라즈베리파이재단은컴퓨터교육증진을위해 2 가지모델을시중에출시하 였으며, 각각 25 달러 (256MB RAM) 와 35 달러 (512MB RAM) 의저렴한가격으로책정하였다. 라즈베리파이 의자세한하드웨어스펙은아래와같다. 목표가격 US $25 US $35 SoC 브로드컴 BCM2835 (CPU, GPU, DSP, 그리고 SDR SDRAM) CPU 700 MHz ARM1176JZF-S core (ARM11 계열 ) GPU 브로드컴비디오코어 IV, OpenGL ES 2.0, 1080p30 h.264/mpeg-4 AVC 높은프로파일디코더 메모리 (SDRAM) 256MB (GPU 와같이사용 ) 512MB (GPU 와같이사용 ) USB 2.0 Ports 1 2 ( 내장 USB 허브하나제외 ) 비디오출력컴포지트 RCA (PAL & NTSC), HDMI (rev 1.3 & 1.4), 액정디스플레이를위한디스플레이시리얼인터페이스 640 350 부터 1920 1200 이상의 14 개의 HDMI 해상도와여러 PAL, NTSC 표준들 오디오출력 내장저장장치 3.5mm 잭, HDMI SD/MMC/SDIO 카드슬롯 내장네트워크 None 10/100 이더넷 (RJ45) 로우레벨주변장치 8 GPIO, UART, I²C 버스, 2 개의칩을선택할수있는 SPI, +3.3 V, +5 V, 접지 전력 500mA (2.5W) 700mA (3.5W) 전원 크기 무게 지원중인운영체제 < 표 1> 라즈베리파이의하드웨어스펙 MicroUSB 에서받는 5 볼트혹인 GPIO 헤더 85.60 53.98mm 라즈베리파이재단측에서는라즈베리파이에포팅한데비안 (Debian) 과아치 (Arch) 리눅스, QtonPi 등의 리눅스배포판을제공하고있으며, 라즈베리파이의주프로그래밍언어인스크래치 (Scratch), 파이썬에 BBC 베이직 (Basic), C, 펄 (Perl) 등을지원할수있는툴들을계획중에있다. 라즈베리파이는비상업적환경에서다양한분야에응용될수있다. 라즈베리파이를이용하여약간의프 로그래밍과정을거쳐게임을조작할수있는게임패드를만들기도하고, XBMC 를설치해미디어센터로 활용하거나, 정해진시간마다화분에물을뿌려주는간이스프링클러등을제작하기도한다. 이외에도 센서와 LCD 패널을연결하여온도 / 습도계를만들어내는등, 사용자가상상하는것그대로라즈베리파이 를이용하여손쉽게다양한형태의창작물들을만들어낼수있다. 45g Debian GNU/Linux, Fedora, Arch Linux ARM, RISC OS
< 그림 2> 라즈베리파이를활용한다양한창작물들 < 그림 2> 는라즈베리파이를이용하여만들어진다양한형태의창작물들을나타내고있으며, 그림에서볼수있듯이라즈베리파이를이용하여게임콘솔부터미니노트북, 심지어슈퍼컴퓨터에이르기까지다양한형태의결과물들이만들어지고있다. 지금이시간에도다양한형태의창작물들이만들어지고있을뿐만아니라, 여러커뮤니티들을통하여국내개발자들의활동도꽤나활발하게이루어지고있다. 그럼이제, 라즈베리파이를활용할수있도록운영체제를설치하는방법을알아보자. 라즈베리파이환경준비서두에서언급하였다시피라즈베리파이는기본적으로하드웨어만을제공하기때문에, 이를활용하기위해서는공식사이트에서제공하는운영체제를설치해주어야한다. 오픈소스 PC인만큼안드로이드 OS를비롯하여다양한오픈소스기반의운영체제를설치할수있지만, 공식사이트에서는리눅스커널기반의운영체제만을제공한다. 라즈베리파이에설치할수있는 OS는공식사이트 (http://www.raspberrypi.org/downloads) 에서확인및다운로드할수있으며이글을쓰고있는현재, 공식사이트에서는다음의네가지버전의리눅스배포판을제공한다. Raspbian wheezy Soft-float Debian wheezy Arch Linux ARM RISC OS 각각의배포판에대한자세한설명은라즈베리파이의공식사이트에서참조할수있으며, 이글에서는 Raspbian wheezy 리눅스를기준으로설명한다. Note : Raspbian wheezy 는데비안 (Debian) 리눅스를라즈베리파이에맞게최적화한버전이며, LXDE, Midori, 개발자도구및멀티미디어기능그리고예제소스코드들을포함하고있다. 85
86 < 그림 3> Raspbian "wheezy" 다운로드페이지 라즈베리파이에운영체제를설치하는방법은다음과같다. ➊ 설치하고자하는리눅스의이미지를다운로드받는다. < 그림3> ➋ 다운로드받은이미지파일을 dd(unix Tool) 나 Win32DiskImager(Windows Tool) 를이용하여 SD 카드에운영체제를설치한다. 예를들어 dd를이용한다면, 아래의명령어로 SD카드에운영체제를설치할수있다. $ddbs=1mif=[ 라즈베리파이 OS Image 의 Path] of=[sdcard의 path] ➌ 운영체제의설치가완료된 SD카드를라즈베리파이의 SD카드슬롯에넣어준후, MicroUSB 형태의전원케이블을입력한다. Note : 라즈베리파이에는별도의 On/Off 스위치가없다. ➍ 전원을입력하면, 화면에부팅과관련된메시지들이출력되며, 부팅과정이완료된후아이디 / 패스워드를물어보게된다. 이때기본값은 pi/raspberry이다. ➎ 최초부팅단계에서로그인이완료되면, 자동으로라즈베리파이의설정페이지 (rasp-config) 가실행된다.< 그림4> 설정페이지에서다음의항목을추가로설정한다. 참고로설정페이지는이후 sudo raspi-config를이용하여다시실행할수있다. < 그림 4> raspi-config 환경설정페이지 a. expand_rootfs: root 파티션을확장한다.( 실제 Resize 작업은이후의재시작단계에서수행된다.) Note : expand_rootfs는필수적으로실행해야하는작업이다. 왜냐하면, SD카드에올렸던이미지는 2기가바이트로크기가고정되어있어서, 메모리카드의용량에상관없이 2기가바이트의크기로파티션이설정되기때문이다. expand_rootfs를실행하면이후의재시작단계에서파티션의크기를최대로확장시켜준다.
b. change_timezone: Timezone을설정한다. c. memory_split : CPU와 GPU에서사용하게될메모리의양을설정한다. 3D 환경이나복잡한그래픽연산, 비디오디코딩의작업이필요할경우 GPU에 128MB를할당한다. 다음단계에서다루게될 JavaFX 애플리케이션을원활하게실행하기위해서는 128MB의메모리를할당한다. d. ssh: SSH서버의실행여부를설정한다. e. boot_behavior: X-Windows Desktop의자동실행여부를설정한다. f. Finish를선택하여라즈베리파이의설정을완료한다. ➏ 에디터를실행하여 /boot/config.txt 파일을수정한다. 예를들어라즈베리파이의콘솔이나 SSH에서 vi 에디터를사용한다면, 다음의커맨드를실행하여파일을수정할수있다. $ sudo vi /boot/config.txt a. /boot/config.txt 파일의여러항목중, 아래의항목을찾아주석 (Comment) 을제거한다. framebuffer_width=1280 framebuffer_height=720 이단계까지완료하면, 이제라즈베리파이를사용하기위한준비는끝난상태이다. 아래의커맨드를입력하여라즈베리파이를재시작하여, 변경한설정값을적용한다. $ sudo shutdown r 자바개발킷 (Java Development Kit) 설치자바 (Java) 가다른프로그래밍언어와비교하여가지는가장중요한특징중하나는자바는플랫폼에독립적인방향으로설계되었다는것이다. 자바로작성된애플리케이션은자바를지원하는모든운영체제에서별도의코드수정없이실행될수있으며, 그어떤언어로작성된프로그램보다훨씬이식성이뛰어나다는장점을가진다. 자바로작성된애플리케이션은실행할플랫폼의개수에상관없이한가지의소스코드만있으면된다. 다른프로그래밍언어의경우에는애플리케이션을각각의플랫폼에서실행하기위해서여러가지의소스코드가필요하다. 특히다양한 GUI가연관되어있는경우나다양한하드웨어스펙이존재하는임베디드시스템의경우이러한이식성은커다란강점이자장점이될수있다. 자바의중요한두번째특징은자바가객체지향적 (Object Oriented) 이라는것이다. 객체지향프로그램은이해하기쉬우며, 유지보수와확장이필요할때소모되는시간을줄여준다. 라즈베리파이재단에서배포하는리눅스운영체제에는기본적으로 Java가설치되어있지않기때문에 Java 애플리케이션을개발하기위해서는우선라즈베리파이에자바개발킷 (Java Development Kit) 을설치하여야한다. 87
88 얼마전오라클은 Java SE8 Developer Preview for ARM 버전을릴리즈하였다. Java SE8 for ARM버전은임베디드 (Embedded) 시스템에서동작하는애플리케이션을개발하기위한최적의플랫폼을제공한다. 이릴리즈는또한라즈베리파이와같이 ARM 프로세서를사용하는리눅스시스템에서동작하는 GUI 애플리케이션의개발을지원하기위한 JavaFX for Linux를포함하고있다. 또한 OpenGL 기반의그래픽가속기능을제공하기때문에복잡한 3D나 2D 그래픽을포함하는애플리케이션의제작에도적합한개발환경을제공하고있다. Note : JavaFX는자바언어를기반으로하는 RIA(Rich Internet Application) 개발툴킷으로써다양한 UI 컴포넌트들과미디어처리를지원한다. 기존의 Java Swing과비교하였을때, 보다간편한방법으로 UI를구성할수있으며, 고수준의그래픽작업을수행할수있다. Java 8에서는 JavaFX 8이자바의기본 UI로제공될예정이다. 라즈베리파이에 Java SE8 for ARM을설치하는방법은다음과같다. ➊ http://jdk8.java.net/fxarmpreview/ 에서 JDK8(with JavaFX) for ARM 버전 < 그림 5>JDK & Sample 다운로드페이지 과샘플을다운로드한다.< 그림 5> ➋ 다운로드받은 JDK 파일을아래의명령어를순서대로실행하여설치한다. $ mkdir -p /opt $sudotarzxvffx_ea_download_file_name-c/opt ➌ 설치가완료되면, 아래의명령어를실행하여다운로드받은설치파일을제거한다. $ rm fx_ea_download_file_name ➍ 정상적으로 Java가설치되었는지아래의명령어를실행하여확인한다. $ sudo /opt/jdk1.8.0/bin/java version 정상적으로설치가되었을경우아래와같은메시지가화면에출력된다. java version "1.8.0-ea" Java(TM)SERuntimeEnvironment(build1.8.0-ea-b36e) JavaHotSpot(TM)ClientVM(build25.0-b04,mixedmode)
< 그림 6> Java SE8 for ARM 에포함되어있는 JavaFX 기반의애플리케이션 자바의설치를완료하였다면, 다운로드받은샘플애플리케이션들을실행해볼수있다. < 그림6> 은 Java SE8 for ARM에포함되어있는 JavaFX 예제애플리케이션을라즈베리파이에서실행해본것이며, PC 데스크탑환경에서볼수있는결과와동일한형태의 GUI가제공되는것을확인할수있다. 예제애플리케이션은다음과같은형 식의명령어를입력하여실행할수있다. $ sudo /opt/jdk1.8.0/bin/java - cp\ /opt/jdk1.8.0/jre/lib/jfxrt.jar:javafx_sample_path/sample_name.jar\ sample_app_entry_class 예를들어, Stopwatch 애플리케이션을실행하기위해서는아래와같이명령어를입력하여실행한다. $ sudo /opt/dk1.8.0/bin/java -Djavafx.platform=eglfb -cp \ /opt/jdk1.8.0/jre/lib/jfxrt.jar:/tmp/javafxsamples/stopwatch.jar \ stopwatch.mainscreen 이뿐만아니라, 자바의가장큰특징중하나라고할수있는 WORA(Write Once, Run Anywhere : 한번개발한코드는다양한플랫폼어디서나실행할수있다 ) 의개념을바탕으로, 이미보유하고있는다양한애플리케이션및코드들을별다른포팅작업없이바로테스트해볼수있다. 예 < 그림 7> 라즈베리파이에서아파치톰캣서버구동 를들어, 아파치톰캣 (Tomcat) 이나제티 (Jetty) 와같은오픈소스기반의자바서버 소프트웨어를설치하여라즈베리파이를작은크기의애플리케이션서버 (Small Embedded Server) 로변신시키는것도가능하다.< 그림7> 89
90 < 그림 8> 라즈베리파이와자바를이용한다양한디바이스제어 또한, 라즈베리파이에 < 그림 8> 과같이다양한 USB 디바이스 (Device) 들을연결한후, 자바 API를이용하여제어하는등의실험적인시도들도개발자들사이에서꾸준히일어나고있다. 지금까지라즈베리파이와자바개발환경을구성하는방법에대하여알아보았다. 구슬이서말이라도꿰어야보배라했듯이, 이제준비된환경을이용하여애플리케이션을개발하는방법을알아보자. 자바애플리케이션개발라즈베리파이에서의 Java 애플리케이션개발과정은데스크탑환경에서의그것과완전히동일하다. 넷빈즈 (NetBeans) 를비롯하여이클립스 (Eclipse), 제이디벨로퍼 (JDeveloper), 인텔리제이 (IntelliJ) 등과같은통합개발환경 (IDE) 을이용하여애플리케이션을개발할수있다. 지금부터대표적인자바통합개발환경인넷빈즈 (NetBeans) 를이용하여자바애플리케이션을개발하는방법을설명한다. 넷빈즈는임베디드 (Embedded) 부터데스크탑 (Desktop), 그리고엔터프라이즈 (Enterprise) 애플리케이션까지자바를기반으로하는모든애플리케이션의개발에필요한과정 ( 테스트및디버깅을포함하여 ) 을하나의툴에서수행할수있는통합된개발환경을제공해준다. 넷빈즈를이용하여애플리케이션을개발 < 그림 9> 애플리케이션및프로젝트속성설정 < 그림 10> 프로젝트윈도우및코드윈도우 하는과정은대부분의경우다음의과정을따른다. 먼저새로운프로젝트를생성한다. 새로운프로젝트생성의첫번째단계는프로젝트의속성을설정하는부분으로, 개발하고자하는애플리케이션의종류 (Categories) 를먼저선택한후, 프로젝트에대한속성 (Projects) 을결정한다. 각각의종류는그에맞는프로젝트속성을포함하고있다. < 그림 9> 다음으로선택한프로젝트의종류에따라
< 그림 11>JavaFX UI 를쉽게개발할수있는 Scene Builder 적절한속성값을입력한후, 새로운프로 젝트를생성한다. 넷빈즈는사용자의입력값에기반하여새 로운프로젝트를생성하며, 이렇게생성된 프로젝트에는바로실행하여결과를확인 할수있는템플릿 (Template) 코드를포함 하고있다. 이러한코드템플릿이나자동 완성등의기능을이용하면보다쉽게애 플리케이션을개발할수있다.< 그림 10> 그리고 JavaFX 와함께제공되는씬빌더 (Scene Builder) 는애플리케이션의 UI 를시각적인환경에서개발 할수있는개발환경을제공할뿐만아니라 JavaFX 의주요기능지원및넷빈즈를비롯한기타다른자바 개발환경과쉽게상호작용할수있다. < 그림 11> 이외에도넷빈즈는자바개발환경뿐만아니라 HTML5 애플리케이션, 자바스크립트 (Javascript), 루비 (Ruby), 그루비 (Groovy), 파이썬 (Python), C/C++ 등과같은다양한언어의개발환경을지원하고있다. 넷빈즈에대한자세한내용은넷빈즈의공식사이트에서확인할수있다. 라즈베리파이, 그무한한가능성 라즈베리파이재단은지난 2012 년 12 월, 라즈베리파이용응용프로그램 ( 앱 ) 을내려받을수있는앱장터인 파이스토어 (Pi Store) 를오픈하였다. 파이스토어는컴퓨터디자인, 애플리케이션, 팁을공유하는허브역 할을한다. 이를통하여, 전세계사람들의다양한아이디어를공유할수있으며, 원한다면내가만든아이 디어를전세계사람들과공유할수있다. 이외에도라즈베리파이는좀더다양한분야에서활용할수있는무한한잠재력을지니고있으며, 이러한 가능성에대한다양한연구가방대한온라인커뮤니티등을통해서이루어지고있다. 본고를통해서라즈베 리파이에흥미를느끼기시작했다면주저하지말고지금당장라즈베리파이의매력속으로빠져들어보자. 라즈베리파이공식사이트 : http://www.raspberrypi.org 라즈베리파이리눅스다운로드사이트 : http://www.raspberrypi.org/downloads 라즈베리파이위키피디아페이지 : http://en.wikipedia.org/wiki/raspberrypi JavaSE Embedded on the Raspberry Pi : http://www.oracle.com/technetwork/articles/java/raspberrypi- 1704896.html JavaFX Overview : http://www.oracle.com/technetwork/java/javafx/overview/index.html JDK 8(with JavaFX) for ARM Early Access : http://jdk8.java.net/fxarmpreview/ JDK 8(with JavaFX) for ARM Early Access Document : http://jdk8.java.net/fxarmpreview/javafx-armdeveloper-preview.html NetBeans IDE : http://netbeans.org/downloads/ Apache Tomcat : http://tomcat.apache.org Jetty : http://jetty.codehaus.org/jetty/ Win32DiskImager 다운로드페이지 : https://launchpad.net/win32-image-writer/+download 91