SlideShare uma empresa Scribd logo
1 de 257
Baixar para ler offline
____________________________________________________
라즈베리파이와 자바스크립트로 시작하는 IoT
원격 제어 LED 부터 소셜 오디오까지
__________________________________________________________
발간사
「라즈베리파이와 자바스크립트로 만드는 IoT」
한국과학창의재단 이사장님 발간사
2016 년은 그 어느 해보다 미래 사회의 변화를 체감하게 된 해로 기록될 것 같다. 1 월에 다보스포럼
주제는 ‘4 차 산업혁명의 이해’로, 정보통신기술 융합을 통해 모든 것이 연결되고 보다 지능화된
사회로의 변화가 눈앞에 와 있음을 강조했다. 그리고 3 월에는 우리 국민들에게 충격을 안겨 준
이세돌 9 단과 구글의 인공지능 ‘알파고’의 바둑 대국이 있었다. 바둑의 신이라 불리우는 이세돌
9 단이 컴퓨터에게 1:4 로 패배하는 장면을 전 세계가 목도했고, 이는 사회적으로 큰 반향을 불러
일으켰다.
다보스발 ‘제 4 차 산업혁명’과 서울발 ‘알파고 쇼크’로 시작된 우리 사회의 변화가 주는 의미는
무엇일까? 1940 년대 첫 다용도 디지털 컴퓨터 개발, 1970 년 초 개인용 컴퓨터 개발과 함께
컴퓨터는 우리 생활에서 없어서는 안 되는 필수품으로 자리 잡게 되었고, 산업분야는 2 차
산업혁명(대량생산)에서 컴퓨터를 통한 자동화인 3 차 산업혁명으로 발전하게 되었다. 3 차
산업혁명까지 우리가 알고 있던 컴퓨터는 인간의 지시에 의해 기능을 수행하는 편리한 도구였다면
4 차 산업혁명을 맞이하는 시점에서 알파고는 이러한 기존의 가치관을 완전히 파괴했다. 알파고는
이길 가능성이 있는 전략 여러 개를 컴퓨터가 스스로 분석해 성공 전략을 알아내는
기계학습방식이라는 참신하고 도전적인 접근방식을 선택한 개발자들에 의해 큰 성공을 거두었다.
이렇듯 4 차 산업혁명의 특징은 제품과 제조과정, 시스템의 지능화를 통해 기업이 고객의 특성에
맞는 맞춤형 제품을 제공하는 것이다.
그러나 우리가 주목해야할 사실은 4 차 산업혁명과 알파고도 결국 하사비스 박사와 같은 우수한
개발자에 의해 이루어졌다는 것이다. 이러한 맥락에서 프로그래밍, 디지털 사물과 밀접하게 대화하는
언어의 중요성은 그 어떠한 때보다 중요하다고 할 수 있다. 중세 시대 라틴어로 쓰인 성서를 읽을 줄
알았던 성직자가 그 시대를 이끌어 나갔듯이, 프로그래밍 언어로 자신의 아이디어를 현실로
만들어내는 프로그래머들이 제 4 차 산업혁명을 리드해 나가고 있다고 해도 과언이 아니다. 미국이나
영국 등에서는 프로그래밍을 영어, 중국어에 이어 제 3 의 언어로 생각하여, 이미 코딩 관련
소프트웨어 수업 등을 정규 과목으로 편성했다. 프로그래밍 언어를 습득하여 활용해 내는 것이 미래
인재로서의 핵심역량인 세상이 다가오고 있는 것이다.
디지털 환경을 태어나면서부터 생활처럼 사용하는 세대가 늘어나고 있는 만큼, 디지털 네이티브들의
프로그래밍 능력은 기존의 자작 문화, 즉 DIY(Do It Yourself)와 결합되어 메이커 운동(Maker
Movement)라는 새로운 시대적 흐름을 만들어 내고 있다. 대규모 기업이나 공장 생산라인의 도움
없이도 자신이 생각하는 아이디어를 시제품으로 생산해내는 사람들이 생겨나고 있는 것이다. 이러한
메이커들이 탄생하게 된 계기에는 오픈소스 하드웨어와 소프트웨어의 공이 크다. 기존에는 관련
전공자들만 활용 가능했던 정보들이 공유되고 확산되면서 비전공자들도 시제품 제작에 쉽게
접근하여 자신의 아이디어를 물리적으로 구현해 내는 시대가 된 것이다.
모든 산업의 한계 생산 비용이 제로 수준으로 떨어지는 한계비용 제로 사회의 도래와
크라우드펀딩법 통과로 인해 국내에서도 메이커들이 자신이 만든 아이디어 시제품을 판매하고
사업화 할 수 있는 환경이 조성되고 있다. 과거에는 천편일률적인 제품만을 생산하고 사용했다면,
이제는 다품종 소량생산 체제로 더 넓은 시장을 충족하는 다양한 제품과 서비스를 만들어 낼 뿐
아니라 전 세계의 사용자로부터 평가 받고, 투자 받는 것이 가능해졌다. 페블이라는 스마트 워치
회사가 킥스타터에서 200 억 넘는 모금을 유치하여 사업화에 성공한 것이 그 대표적인 사례라고 할
수 있다.
이러한 시대적 흐름에 맞추어 한국과학창의재단은 아이디어와 상상력을 현실화하는 메이커 문화
확산에 힘쓰며 누구나 자신만의 창의적인 아이디어를 구현 할 수 있도록 다양한 사업을 통해 메이커
활동을 지원하고 있다. 실제로 이 책의 저자가 소속되어 있는 Circulus 팀은 재단이 추진한 ‘2015
우수메이커 활동 지원 사업’을 통해 개인용 지능형 로봇을 만들어 내었고, ‘2015 창조경제박람회’와
함께 개최된 ‘메이커 페스티벌’을 통해 그 성과를 세상에 알렸다. 또한 2015 대한민국과학창작대전을
통해 Circulus 팀은 소셜 오디오를 제작하였으며, 실제 이 제품은 크라우드펀딩을 통해 제품화
되었다. 메이커 학습 및 제작이 가능한 플랫폼(Circulus)을 구축하여 교육활동도 펼치고 있는 저자가
소셜 오디오의 성공 사례를 기반으로, 누구나 메이커가 될 수 있도록 그 제작과정을 오픈소스로
공유하여 책으로 접할 수 있도록 했다니 기쁜 일이다.
미국에서는 인구의 57%인 1 억 3500 만명이 스스로 메이커라고 생각한다는 조사 결과가 있다.
페블의 대표인 에릭 미기코브스키 뿐 아니라 애플의 스티브잡스와 워즈니악 또한 차고지에서 만들고
싶은 것을 만들던 메이커였다. 우리나라에서도 잠재력을 가진 개개인들이 다양한 아이디어를
시제품으로 구현해 내고 사업화 할 수 있는 환경이 더욱더 활성화되길 바라며, 이 책이 많은
사람들이 메이커 활동에 관심을 갖고 참여하는데 길잡이 역할이 되길 바란다.
목차
0. 시작하기 앞서 4p
1. 파이를 동작시켜 보자 - 초기설정 17p
2. 파이의 운영체제 - Linux 속성실습 33p
3. JavaScript 로 하드웨어 제어를 - Node.JS 57p
4. 거리 측정하고 정보 표시 하기 - GPIO 81p
5. 스마트폰으로 리모콘을 - jQueryMobile 119p
6. 인터넷으로 음악과 날씨를 - OpenAPI & RSS 137p
7. 오디오 소프트웨어 개발하기 153p
8. 외관을 생각대로 만들기 189p
9. 언제 어디서나 동작하는 IoT- Circulus 192p
10. 마무리 256p
0/시작하기 앞서
이 책의 집필 목적
생각만 있는 Thinker 에서 세상에 의미 있는 변화를 이끌고 직접 행동하는 Maker 가 되고자
하는 여러분들을 환영한다.
지금까지 우리는 전자 제품을 만든다고 하면, 구하기 힘든 장비, 비싼 가격, 납땜과 복잡한
프로그래밍 등 전문가만 할 수 있다는 인식을 가지고 있다. 한번 실수하면 큰 돈이 날라 가니
매우 조심스럽게 사용해야 했었다. 하지만 지금 이 순간 이런 비싼 장비들은 더 강력하면서
저렴한 가격으로 부품들을 구입할 수 있다. 더 쉽게 조립하고 손쉬운 프로그래밍으로 우리가
만들고자 하는 것을 마법처럼 눈앞에 보여 지도록 할 수 있는 시대를 살고 있다.
우리가 하고자 하는 것은 생각만 하는 것이 아닌 실제로 만들어 보는 것이며, 나 혼자만의
즐거움이 아닌 타인과 함께 공유하고 나눌 수 있는 멋진 제품이다. 더 이상 공장에서
붕어빵처럼 찍어 내고, 내가 원하는 기능이 없거나 필요 없는 기능에 불평하지 않아도 된다.
원하지 않는 디자인에 컬러의 제품을 돈을 주고 구입하는 시대는 끝났다. 직접 여러분의 손으로
직접 여러분이 실생활에 사용할 수 있는 제품을 만들 수 있도록 하고자 한다.
여자 친구를 위한 IoT 장비
처음 IoT 오디오를 만들게 된 계기는 필자의 경험을 통해서 나오게 된 것이다. 필자가 IT 업을
시작하고 나서 5 년간 지방과 해외 프로젝트로 떠돌았었다. 이 시기에는 불안정한 생활을
하다보니 여자친구를 만나도 떠도는 생활로 인하여 헤어지게 되는 경우가 많았는데, 지방이나
해외에 있어도 여자친구 곁에 있는 것 처럼 할 수 있는 방법은 없을까? 하여 처음 제작을
시도하게 되었다. 여자친구 곁에 IoT 오디오를 두어, 지방이나 해외에 있어도 음악 선물이나
음성 메시지, 알람 서비스를 보낼 수 있는 장치를 기획하였다.
삼성 그룹 해커톤에서 만든 초기 IoT 오디오, Flying Music
2014 년 삼성 그룹의 해커톤에 나가서 실제로 이 오디오를 만들어 냈다. 비슷한 경험을 가진
사람이 많아 좋은 호응을 얻을 수 있었다. 실제 효과도 있었다. 캐롤 송이 나오는 크리스마스
트리를 만들어 선물하여 사귀게 된 여자 친구. 거리가 떨어져 있어서, 실제로 오디오를 만들어
여자 친구 집에 두어서 활용하고 있다. 당신도 직접 만들어서 당신의 친구들과 가족들에게
선물해 볼 수 있다!
세상에 단 하나의 내가 만드는 오디오
[ 레이저 커터로 만든 초기 제작 모델 ]
지금까지 우리가 알고 있는 오디오는 기본적으로 사용자가 지정해 주는 파일이나 CD 등을
재생하는 장치였다. 우리는 기존의 오디오에서 할 수 없었던 사람과 사람을 이어 주는 감성적인
IoT 오디오를 만들어 볼 것이다. 물론 돈을 투자해서 파는 제품을 사면 어때 라는 생각을 할
수도 있다. 하지만 그 어떠한 제품에서도 제공해 줄 수 없는, 붕어빵 같은 전자 제품이나 기계가
아닌 세상에 단 하나의 오디오가 탄생할 것이다.
바쁜 당신을 기다리는 여자 친구를 감동 시킬 수 있는 IoT 오디오. 우리는 이 오디오에 다양한
하드웨어 및 소프트웨어 기술을 이용하여 우리가 지금까지 알고 있는 단순히 음악이 재생되는
장치에서 한 단계 수준을 끌어올리고자 한다.
기본 모델
- 탁상 시계 기능
- 스마트 폰 제어
- 음악 검색 / 다운로드 및 재생
- 시간 알람 기능
- 최신 가요 목록 확인 및 검색
우리가 하고자 하는 기본 모델만 있더라도 당신이 어디에 있던지 당신의 스마트 폰으로 여자
친구 집에 있는 오디오의 선곡을 통해, 음악을 선물할 수도 있다. 게다가 손 편지 대신에 당신의
마음이 담긴 메시지를 보내고 재생시킬 수 있다.
확장 모델
- 실 외에서의 원격 제어
- 헤드라인 뉴스 읽어 주기
- 오늘의 날씨 읽어 주기
- 메세지 전달 / 읽어 주기
- 현재 방안의 온 습도 알려주기
기본적인 기능을 만드는데 성공하였다면, 이 오디오에 좀더 재미난 기능들을 추가하고자 한다.
일단 인기가요 TOP10 을 곧바로 재생할 수 있는 기능을 제공한다. 알람 기능을 설정하여
설정한 음악을 재생할 수 있고, 오늘의 날씨, 주요 뉴스도 오디오로 제공받을 수 있도록 한다.
즉 아침 일어나는 시간에 알람과 동시에 오늘의 주요 정보를 들으면서 일어날 수 있는 것이다.
모바일 음성 인식을 통한 명령도 지원하여 편의성을 돕도록 한다.
이 책의 대상 독자
무언가 직접 만들어 보고, 만든 것이 나와 타인에게 도움을 주고자 하는 그 누구도 환영한다.
어떤 일이든 가장 중요한 것은 어떤 일이든 하고자 하는 의지와 뜻이라는 걸 우리는 잘 알고
있다. 우리는 이 책의 구성을 부품을 사고, 단계 별로 따라서 조립하고 화면에 코드를 입력하는
것으로 완성할 수 있도록 책을 구성하였다. 하지만, 여기서 하고자 하는 내용에 대해 기본
지식을 가지고 있다면 좀더 이해하면서 학습하는데 도움이 될 것이다. 다시 한번 말하지만,
당신의 의지가 있다면 아래 사항을 모른다고 해도 만들 수 있다!
바쁜 시간에 쫓기는 직장인
바쁜 시간에 쫓겨, 잦은 출장으로 여자 친구를 볼 수 없는 직장인 분들, 어린 시절을 떠올리며
무언가 만들어 보고 싶었지만 어디부터 시작해야 할지 모르는 분들이다. Making 에 대한 기초
지식을 빠르게 학습하고, 직접 오디오를 만들어 볼 수 있다. 무엇보다 이 오디오를 여자
친구에게 만들어 주어 바쁜 시간 속에서도 IoT 오디오를 통해 당신과 이어 주는 역할을 할
것이다.
Making 에 관심 있는 대학생
Arduino 의 대중화에 따른 오픈 소스 하드웨어에 대한 인식의 확산으로 당신의 주변에는 이미
이러한 것들로 이것저것 만들어 보는 친구들이 많을 것이다. 당신이 대학생이라면, 직접
하드웨어 기반 Making 을 해 봄으로서, 소프트웨어와 하드웨어 그리고 서비스가 접목되는
방식을 이해하고 스타트 업이나 다양한 공모전에 당신만의 서비스와 아이디어를 이용하여
도전해 볼 수 있을 것이다.
컴퓨터 언어의 시대에 아이를 위한 학부모
2 년전 까지만 하더라도 프로그래밍 교육을 누구나 배우게 될 것이다 라고 하면 말도 안 되는
소리로 취급 받았으나, 이제는 누구나 배우는 시대가 되었다. 이러한 시대를 살아가는 아이들을
위해 본인이 직접 배우고 만듦으로써, 만든 제품을 아이와 함께 활용하고, 구성 원리를 알려
주고 더 나아가서는 아이와 함께 만들어 보는 과정 속에 컴퓨터의 원리를 파악 할 수 있도록
한다.
책에서 다룰 내용
라즈베리파이
오픈소스 하드웨어 하면 아두이노를 흔히 떠오르게 된다. 또한 우리가 선택할 수 있는 오픈소스
하드웨어가 다양하게 있다. 하지만 우리는 라즈베리파이를 이용하여 프로젝트를 진행하고자
한다. 라즈베리파이는 하드웨어를 제어할 수 있는 초 소형/초 저가의 컴퓨터이다. 우리는 이
먹음직스러운 파이로 실 생활에 도움이 되는 것을 만들어 볼 것이다.
Linux
여러분이 사용하는 컴퓨터가 윈도우로 돌아가듯이, 라즈베리파이 또한 이러한 운영체제로
동작이 되며, 가장 많이 활용되는 것은 ‘라즈비안’ 이라고 불리우는 라즈베리파이를 위한
리눅스이다. 리눅스에 대해 A to Z 까지 다루는 것은 이 책의 범주를 벗어나는 것으로, 우리는
IoT 오디오 제작에 필요한 주요 리눅스 명령어와 관리 방법에 대해 다
JavaScript
우리는 이 오디오 프로젝트를 위하여 JavaScript 라는 언어를 사용할 것이다. 프로그래밍을
접해 본 경험이 있다면, 웹 페이지에서 Alert 창 띄우는 용도로나 쓰는 게 아닐까 하는 생각을
할 수 있다. 놀라지 마시라, 우리는 이 Web 을 위해 태어난 JavaScript 를 이용하여 모바일 웹은
물론 라즈베리파이를 우리 마음대로 요리할 수 있도록 도와 줄 것이다, 당신이 이 언어를
모른다고 해도, 핀란드어를 따라 친다는 심정으로 하면 마법처럼 화면에 보이고 당신이 조립한
장치가 동작이 될 것이다! 하지만 어느 정도 알고 있다면 더 큰 도움이 된다.
NodeJS
라즈베리파이 오디오를 동작시키는 리모콘을 위해서도 JavaScript 를 이용하지만,
라즈베리파이에 탑재되는 하드웨어 제어 및 서버를 위해서도 JavaScript 가 활용된다. 이를
서버에서 가능케 하는 것이 NodeJS 이고, 이것에 대해서 간단하게 다루어 본다. 우리는 NodeJS
를 활용하여 라즈베리파이에 웹 서버를 구축하고, 연결되는 센서와 하드웨어를 제어해 볼
것이다.
jQueryMobile
모바일 컨트롤러를 적은 노력으로 멋지게 만들 수 있는 jQueryMobile 프레임워크를 이용할
것이다. JavaScript 에서 가장 인기 있는 jQuery 기반의 모바일 프레임 워크로, 라즈베리파이와
유기적으로 연결된 모바일 웹을 만들게 될 것이다.
Hardware Control
라즈베리파이에 LCD 를 연결하여 문자를 출력하고, 온습도 센서를 이용하여 현재 실내의
온습도 상황을 점검해 볼 것이며, 초음파 센서로 거리를 측정해 본다.
OpenAPI
오디오 기능을 위해 음악 클라우드 서비스인 SoundCloud 의 개발자용 Open API 를 활용하여
원하는 음악을 검색하고, 검색 결과로부터 음원 다운로드를 하는 것을 실습해 볼 것이다.
SoundCloud 가입 및 서비스 등록, JavaScript 용 API 활용까지 살펴 봄으로서, 사용자가 타
OpenAPI 연동 시에도 용이하게 할 수 있도록 한다.
부록 : 3D Printing
보기 좋은 음식이 맛이 있어 보이는 것과 같이, 우리가 만드는 하드웨어 역시 그러하다. 3D
모델링이라는 분야가 전문 분야 였지만, 쉽게 3D 모델링을 할 수 있는 프로그램인 123D
Design 을 활용하여 간단하게 모델링을 배우고, 프린팅 하는 법을 알아볼 것이다.
메이커 세계로의 입문
이 책을 통해 여러분은 메이커의 세계로 입문할 수 있을 것이다. 메이커란 운동화 메이커의
메이커가 아닌, 자신의 생각을 직접 만들어 내는 사람들을 의미한다. 흔히 이전의 DIY(Do It
Yourself) 에 IT 기술적인 부분이 결합된 것을 메이커라 이야기 하는 경우가 많다.
오바마 대통령이 백악관에서 메이커 행사를 열 만큼, 앞으로의 4 차 산업 혁명 시대에 중요한
역할을 담당하고 있는 문화가 메이커 문화이다. 여러분들도 이 책으로 말미 암아 여러분 만의
메이커 작품으로 , 메이커 페어에서 만나 보길 희망한다.
준비 물품
우리가 만들고자 하는 오디오를 위해 사용되는 재료들은 다음과 같다. 제작을 위한 필수 재료와
옵션이 존재하는데, 모니터 케이블이나 USB 키보드의 경우 이미, 그러한 장치가 있다면
구입하지 않아도 된다.
필수 구입 물품
라즈베리파이
라즈베리파이 오디오를 만들기 위한 핵심 Single Board 컴퓨터. 만일 당신이 자금의 여유가
있다면, 성능이 우월한 라즈베리파이 3 를 구입해도 된다. 하지만, 3 의 경우 전기소모가 많아
일반 2A 출력의 USB 어댑터로 제대로 동작할 수 없으므로, 좀더 저렴하면서도 쿼드코어로
충분한 성능을 제공하는 라즈베리파이 2 를 구입하는 것도 방법이다.
무선랜
유선 연결로만 라즈베리파이를 사용한다면, 필요하지 않지만, 어디에서나 사용할 수 있는
오디오를 위해서는 반드시 필요하다. 현재 가장 많이 사용되는 것은 N 스펙이다. 하지만 보다
빠르고 안정적인 속도를 위하여 N+ 스펙의 무선랜을 구입할 수도 있다. 만일, 라즈베리파이 3
를 보유하고 있다면, 이미 내장되어 있으므로 별도로 구매할 필요는 없다.
16GB MicroSD 카드
라즈베리파이의 저장장치로써 Linux 운영체제를 탑재하고, 각종 추가 Software 를 설치하기
위해서는 최소 8GB 이상의 용량을 추천한다.
MicroSD 카드는 다양한 스펙이 존재하는데, Class 간에 가격의 차이가 크지 않다. 컴퓨터를
쾌적하게 쓰기 위해 하드디스크 대신 SSD 를 쓰듯이, 이왕 MicroSD 카드를 구입할 때 Class 10
이나 UHS-I 스펙을 사길 권장 한다.
종류 최소 속도 용도
Class 2 2 MB/s SD 영상 기록
Class 4 4 MB/s HD 영상 기록
Class 6 6 MB/s Full HD (1920x1080) 영상 기록
Class 10 10 MB/s 연속적인 HD 이미지 기록
UHS I 10 MB/s 실시간 방송
UHS III 30 MB/s Ultra HD 영상 기록
USB 스피커
실질적으로 음악소리를 듣기 위해서 필요한 장치이다. 일반 PC 용 스피커를 사용하면
무방하다. 물론 자체 전원을 사용하는 스피커를 이용할 수 있지만, USB 스피커를 이용하면,
라즈베리파이의 4 개의 USB 포트 중 하나를 전원 공급 용도로 활용하여 꽂아야 할 플러그를
줄여 구성을 간소화 할 수 있다.
DHT11 (온습도 센서)
온습도 상황을 모니터링할 수 있는 쉽게 구할 수 있는 센서이다. 이 센서는 DHT11 과 DHT22
가 존재하는데, DHT22 센서가 값은 비싸지만 좀더 정밀한 온도와 습도 결과값을 보여준다.
실외나 정밀한 측정이 필요한 경우가 아니라면 DHT11 센서로도 충분한 측정 범위 값을 제공해
준다.
모델명 용도 온도 측정 범위 습도 측정 범위
DHT-11 실내용 0 ~ 50 도 20 ~ 80 %
DHT-22 실외용 -40 ~ 80 도 0 ~ 100 %
SR-04 (초음파 센서)
초음파가 발생되고 반사되는 시간을 계산하여 물체와 떨어져 있는 거리를 측정하는데
사용하는 센서이다.
7 Segment 4 Digit LCD
4 개의 숫자를 표시해 줄 수 있는 LCD 이다. 한 숫자를 7 개의 막대로 표현하여 7 Segment
라고 불리운다. 원칙적으로는 각각의 막대를 제어해야 하므로 많은 선이 필요로 하나, SPI
인터페이스를 위해 MAX7219 칩셋이 장착된 제품의 경우 5 개의 선으로 제어할 수 있다. 필히
SPI 인터페이스를 지원하는 제품을 구매하도록 하자.
점퍼 케이블 (Male-Male, Female-Male)
라즈베리파이와 브레드 보드, 센서와 부속을 연결할 때 사용되는 케이블이다. 브레드 보드에
꽂을 수 있도록 핀이 나온 것을 수컷(Male) 단자라고 하고, 핀이 있는 것을 연결할 수 있는 점퍼
케이블은 암컷(Female) 단자라고 한다. 라즈베리파이와 보드 연결, 부속 연결을 위해서는 암컷-
수컷(Female-Male) 단자와 수컷-수컷 (Male-Male) 단자가 필요하다.
선택 사항
DVI-to-HDMI 혹은 HDMI-to-HDMI (Option)
여러분의 라즈베리파이에 직접 모니터를 연결하여 사용하고자 할 때 필요한 케이블이다
라즈베리파이의 영상 출력단자는 기본적으로 HDMI 만 제공한다. 따라서 여러분이 가지고 있는
모니터의 단자가 DVI 를 지원하는지, HDMI 를 지원하는지에 따라서 필요한 케이블을 준비한다
마우스/키보드 세트(Option)
이 역시 라즈베리파이에 직접 연결하여 사용하고자 할 때 준비가 되어 있어야 한다. 윈도우와
같은 GUI 환경을 이용한다면 마우스가 필수적이지만, 일반 텍스트 Console 환경을 이용한다면,
키보드만으로도 충분하다. 우리가 실제 개발할 오디오는 원격으로 접속하여 사용하므로, 꼭
필요하지는 않다
구입처
IoT 오디오 프로젝트를 진행하기 위한 부품을 구입할 수 있는 방법은 다양하다. 사후 지원을
고려하고, 빠른 배송을 통해서 즉시 만들어서 사용을 해 보고자 한다면, 국내 판매 사로부터
구입할 수 있다. 하지만 배송 지연에 대해 느긋하고 사후 지원을 크게 고려하고 있지 않는
상황이라면 해외 직접 구매를 통하여 구입비를 대폭 낮출 수 있다. (다만 해외 배송은 경우에
따라서 1 달 넘게 소요될 수도 있다)
구입할 물품의 명을 정확하게 안다면, 국내는 네이버 쇼핑(http://shopping.naver.com), 해외는
알리 익스프레스(http://www.aliexpress.com)를 통해 검색해 보자. 일반 온라인 판매처 보다 더
저렴하게 구입할 수 있을 것이다. 정확한 명칭을 모른다면 전문 몰 사이트에 접속하여 다양한
부품들을 확인해 본 후 최저가를 산정하여 구입할 수 있다.
국내 온라인 구입처
디바이스 마트
http://www.devicemart.co.kr/
IC 뱅크
http://www.icbanq.com
엘레파츠
http://eleparts.co.kr/
해외 온라인 구입처
엘레먼츠 14
http://www.element14.com
RS 컴포넌트
http://www.rs-components.com
알리 익스프레스
http://www.aliexpress.com
연락 및 추가 정보 얻기
Making 및 프로그래밍 전파를 목적으로 Circulus 라는 팀을 결성하여 활동하고 있다. 이 책에서
나오는 내용에 대한 의문 점과 기타 Making 활동에 대한 문의 사항이 있다면, 다음의 페이스
북 그룹에 글을 남겨 주면 신속하게 답변을 줄 수 있도록 하겠다. 또한 Making 이나
프로그래밍과 관련된 기사들을 Facebook 페이지를 통해 공유하고 있다. 함께 관련 내용에 대해
의견을 나누고 토론할 수 있다.
Circulus 그룹
http://group.circul.us
Circulus 페이지
http://page.circul.us
이 책에서는 IoT 오디오를 만들기 위한 필수적인 내용을 위주로 다루고 있다. 충분하게 다루지
못한 내용들은 공유 슬라이드를 통해 다루고 있다. 책과 함께로 추가적으로 관련 자료를
학습하고 싶다면, 다음 내용을 참고할 수 있다.
Lesson 1 - Introduction : IoT 개요, Opensource H/W, 라즈베리파이 기초
http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-1st
Lesson 2 - Linux : Raspberry Pi 에서 리눅스 활용하기
http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-2nd
Lesson 3 - Node.JS : Raspberry Pi 에서 Node.JS 로 프로그래밍 하기
http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-3rd
Lesson 4 - Sensor : GPIO 를 Node.JS 로 동작시켜 센서 제어하기
http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-4th
Lesson 5 - Project : Raspberry Pi 로 스마트폰 + 무선 IoT 오디오 제작
http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-5th
또한, 여기서 다루는 프로그래밍 및 간단한 실습을 무료 Cloud Platform 인 Circulus 를 통하여
진행해 볼 수 있다. 실습한 코드 유실 위험이 없으며, 나의 작업 내용을 친구에게 공유하거나
타인의 코드를 복사하여 참고할 수 있다. 별첨에서 보다 상세하게 사용 방법에 대해 다루도록
하겠다.
Circulus
http://www.circul.us
1. 파이를 동작시켜 보자 – 초기 설정
라즈베리파이 운영체제 설치하기
라즈베리파이에서 선택할 수 있는 운영체제는 대양하다. 우리가 친숙한 윈도우 10 부터, 우분투
리눅스까지 10 여가지의 다양한 운영체제를 지원한다. (일부는 이러한 운영체제로 PC 대체로
사용하려고 하는 분이 있는데, 결코 PC 와 같은 환경을 기대해서는 안된다. 라즈베리파이가
강력하지만 100 만원짜리 PC 성능을 기대해서는 안된다.) 우리가 파이오를 만들기 위해 사용할
운영체제는 데비안 리눅스 기반으로 라즈베리파이에 최적화된 운영체제인 라즈비안(Raspbian)
을 선택할 것이다.
라즈비안 OS 는 라즈베리파이 초창기부터 현재까지 가장 많이 활용되고 있다, 이는 문제가
생겼을 때 남이 이미 겪었을 확률이 높아 해댕 정보를 검색하여 해결하기 용이하다는 것을
의미한다.
라즈비안은 라즈베리파이 공식 홈페이지에서 손쉽게 다운로드 받을 수 있다. 다음의 경로에
접속하여 라즈비안을 다운로드 받도록 한다.
https://downloads.raspberrypi.org/raspbian_latest
[그림] 컴퓨터로 쓸때는 일반 배포판, 메이커 키트로 이용할 때는 Lite 배포판을 이용하자
info) 현재 라즈비안은 구 버전(wheezy) 와 신 버전(Jessie) 으로 제공이 되고, 신 버전도 일반
버전과 라이트 버전으로 제공되고 있다. 메이커를 위해서는 신 버전 라이트를 이용하면
불필요한 공간 낭비 없이 작업용으로 활용할 수 있다. 만일 윈도우와 같은 GUI 환경이
필요하다면, 일반 버전을 사용하도록 한다.
라즈베리파이 OS 의 이미지 파일을 다운로드 받은 이후, 라즈베리파이에서 사용하기 위해서는
이른바 "굽기"가 필요하다. 윈도우의 경우 Win32Diskimager 라는 프로그램을 이용하여 손쉽게
운영체제 이미지를 마이크로 SD 카드에 담을 수 있으나, 맥 OS 나 리눅스의 경우 터미널
환경에서 직접 명령어를 입력하여 이미지를 담아내야 한다. 다음과 같은 절차로 운영체제
이미지를 복사하자!
One more thing - 라즈베리파이를 게임기로 만들기
라즈베리파이를 교육 혹은 IoT 제작 실습용으로 많이 사용하나, 미디어 플레이어 혹은
게임기로 만들어 사용하는 경우도 많다. 만일 게임기로 만들어 사용하고자 한다만,
에뮬레이터 게임에 최적화된 Recalbox 를 사용하는 것이 좋다. 게임에 맞게 최적화 되고,
조이스틱 연결을 지원할 뿐만 아니라, 닌텐도, 플레이스테이션, 네오지오 등 현존하는 다양한
에뮬레이터 게임을 지원한다. 자세한 내용은 www.recalbox.com 을 참고하도록 한다.
1.SD 카드 어댑터에 MicroSD 카드를 삽입한 후 맥의 카드리더에 삽입하자.
Window
윈도우 에서는 간단하게 Win32Imager 를 이용할 수 있다. 다음의 주소에서 다운로드 받아서
설치하도록 한다.
http://sourceforge.net/projects/win32diskimager/files/latest/download
다운로드 받은 최신의 라즈비안을 선택한 후 Write 버튼을 누르면, 마이크로 SD 카드에 기록이
된다. 완료 후에 라즈베리파이에 삽입하여 부팅이 정상적으로 이루어지는지 확인해 보자.
Mac
2. Finder 에서 인식된 SD 카드 드라이브에서 마우스 우측으로 클릭하면 diskn 으로 (예시
disk4) 설정이 된걸 알수 있다. 이 정보를 기록해 두자.
3.터미널을 열어 다음 명령어를 입력하자
sudo dd bs=1m if=path_of_your_image.img of=/dev/rdiskn
명령어 실행에 실패한다면 rdisk 대신 disk 를 입력하도록 한다.
sudo dd bs=1m if=path_of_your_image.img of=/dev/diskn
Linux
- 마이크로 SD 카드 삽입 후 다음 명령을 실해앟여 인식된 마이크로 SD 카드를 확인한다.
$ df -h
- 명령어 리스트 상에 인식된 내역을 확인한다 보통 ./devmmcblk0p1 이나 /dev/sdd1 의
형태로 인식된 것을 알수 있다. 인식된 sd 카드의 기록을 위해 mount 를 해제하는 다음
명령어를 실행한다.
$ umount /dev/sdd1
- 기록을 수행하기 위하여 다음 명령어를 실행해 준다.
$ dd bs=4M if=~/2012-12-16-...img of=/dev/sdd
첫 라즈베리파이 사용을 위한 기본 조립
운영체제를 준비했으니, 이제 라즈베리파이를 구동할 기본 준비가 되었다. 하지만
라즈베리파이 단독으로는 초기에 아무것도 할수가 없다. 마이크로 SD 카드를 라즈베리파이
후면 슬롯에 딸깍 소리가 나도록 삽입하고, 무선 USB 랜을 라즈베리파이의 USB 랜 포트에
설치하도록 한다.
[그림] 구형 라즈베리파이 B (좌측하단) 는 SD 카드 형식으로, 라즈베리파이 B+ 이나 2B(좌측
상단) 은 Micro SD 형식으로 딸깍 소리가 날때가지 눌러 장착을 하나, 3B (우측)은 끝 부분까지
Micro SD 카드를 밀어 넣으면 된다.
라즈베리파이을 통해 개발하는 방법은 크게 2 가지로, 직접 라즈베리파이에 모니터, 키보드,
마우스를 직접 연결하여 개발하는 방법과 원격 구성으로 접속하여 개발하는 방법이 있다.
필자는 연결을 최소화 한 후자의 방법을 주로 선택하지만, 부팅시에 문제가 발생하거나 원격
연결이 어려운 경우, 그리고 GUI 환경으로 라즈베리파이를 활용하고자 할때는 직접 연결하여
사용해야 한다. 처음 라즈베리파이를 접하는 경우 GUI 를 통해 무선 설정을 하는 것이
용이하므로, 여기서는 초보자와 고급사용자를 위한 두가지 방법 모두를 다룰 것이다.
GUI 를 통한 원격 연결 설정
처음 라즈베리파이를 사용하는 사용자를 위해 권장하는 방법으로, 마치 노트북 컴퓨터나
스마트 폰을 인터넷 연결하는 것과 유사한 방법이다. 라즈비안 일반 버전으로 이미지를 만들어
라즈베리파이를 부팅하면 다음과 같이 부팅된 화면을 발견할 수 있다.
[그림] 라즈베리파이 부팅후 화면, 상단 우측 무선인터넷 항목을 클릭하면, 접속가능한 AP
목록을 발견할 수 있다.
부팅한 화면 우측 상단을 보면, 안테나 모양으로 PC 운영체제나 스마트 폰에서 보는
무선인터넷 연결 아이콘을 발견할 수 있는데, 해당 아이콘을 클릭하면 접속가능한 무선 AP
목록을 확인할 수 있다. 접속할 수 있는 무선 AP 를 선택한 후, 필요하다면 비밀번호를 입력하여
인터넷 연결을 수행하자. 연결이 완료되면 터미널 창을 열어, ifconfig 명령으로 무선인터넷에
연결된 IP 정보를 확인한다. 다음과 같이 정상적으로 IP 목록이 표시된다면, 앞으로는
원격접속을 통해 라즈베리파이를 제어하고 개발할 수 있다.
[그림] 접속하고자 하는 AP 를 선택한 후, 필요하다면 비밀번호를 입력하자.
콘솔을 통한 원격 연결 설정
보다 어려운 접근 방법이지만, 라즈비안 Lite 버전을 설치한 경우 다음과 같은 방법으로 인터넷
연결 설정을 진행할 수 있다. 무선 인터넷 공유기와 라즈베리파이의 유선 랜을 서로 연결해
주도록 한다. 이는 PC 에서 원격으로 접속하여 개발할 때 사용하기 위함이다. 원격으로
접속하기 위해서는 라즈베리파이의 IP 를 확인해야 하는데, 접속된 공유기를 통해서 IP 를
알아낼 수 있다. 현재 내가 접속한 컴퓨터의 IP 를 알아내기 위해 ip 를 확인해 보자
윈도우 - ipconfig
리눅스 - ifconfig
맥 OS - ifconfig
내 IP 가 192.168.1.140 으로 되어있다면, 공유기의 IP 는 192.168.1.1. 이 된다. 차후 공유기
설정을 위하여 해당 IP 를 기록해 둔다.
[그림] 라즈베리파이에 키보드와 모니터를 연결하여 부팅하자.
라즈베리파이에 키보드와 모니터를 연결하고, 운영체제를 설치한 MicroSD 카드가
장착되었는지 확인한 후, Micro USB 를 통해 전원을 공급해 보자. 라즈베리파이가 부팅되는
것을 확인할 수 있다. 부팅이 완료된 후, 로그인 ID 는 pi, 비밀번호는 raspberry 를 입력하여
로그인을 수행한다. 이제 IP 를 알아내서 무선환경에서 라즈베리파이를 작업할 수 있도록
수정해 볼 것이다. 콘솔창에 다음과 같은 명령을 입력하여 라즈베리파이의 IP 를 확인해 본다
$ ifconfig
[그림] Eth0 에 나오는 inet addr 이 라즈베리파이의 유선 IP 주소이다.
Ifconfig 명령 실행후 eth0 의 inet addr 값이 유선랜 IP 이다. 라즈베리파이에서 직접 작업해도
되지만, IP 를 알아냈으니 원격으로 설정 작업을 수행해 보자. 원격접속을 위해서는 터미널
프로그램이 필요하다. 리눅스나 맥 OS 의 경우 기본적으로 터미널 명령이 지원되나, 윈도우 XP
이후에 나온 버전 부터는 터미널이 지원되지 않아서, 터미널을 사용할 수 있도록 도와주는
프로그램을 별도로 설치해야 한다. 윈도우에서 많이 활용되는 무료 터미널 프로그램인 putty 를
이용하여 접속해 보도록 한다.
putty 다운로드 - http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
[그림] 라즈베리파이의 IP 를 입력한 후 Open 을 클릭하여 라즈베리파이의 터미널에 접속한다.
다운로드 받은 putty 를 실행하면 다음과 같은 입력창을 확인할 수 있다. 확인했던 IP 를
입력하고, Open 을 클릭하여 원격으로 라즈베리파이에 접속해 본다. 기본 사용자 계정은 pi,
비밀번호는 raspberry 를 입력하면 다음과 같은 로그인 성공 메세지를 확인할 수 있다.
라즈베리파이 부팅 성공을 축하한다. 이제 본격적으로 설정 및 개발을 진행해 보자.
[그림] 부팅 후 원격 접속시 로그인 ID 는 pi, 비밀번호는 raspberry 를 입력해 주면 로그인 된다.
One More Thing – 복잡한 OS 설정을 한번에 CirculOS
라즈베리파이를 무선으로 동작시키고 실제 개발을 하기 위해서는 앞으로도 다양한 설정을
해야 한다. 이러한 설정이 복잡하게 느껴진다면, 필자가 활동하는 커뮤니티인 Circulus 에서
제공하는 CirculOS 배포판을 이용하면, 복잡한 설정 필요 없이 곧바로 사용할 수 있도록
도와준다. CirculOS 를 사용하는 방법은 10 장에서 자세히 다룬다.
라즈베리파이 기본 설정하기
라즈베리파이에 운영체제를 설치한 후 그대로 사용하면 몇 가지 문제가 발생한다. 우선 SD
카드 전체 용량을 활용하지 못하며,, 우리가 만들 오디오 시간이 영국 기준 시간이 아닌
우리나라 시간에 맞추어 동작하게 된다. 몇 가지 기본 설정을 변경해 주어야 한다.
$ sudo raspi-config
첫 번째 해야 할 일은 SD 카드 전체를 사용할 수 있게 해 주는 일이다. 1. Expand Filesystem 을
선택한 후 Enter 를 누르면, Root partition has been resized 라는 문구를 볼 수 있다. 재 부팅
후 정장적으로 반영되지만 몇 가지 작업을 위하여 다음 설정 화면으로 넘어가도록 한다.
두 번째 할 일은 기본 국가인 영국에서 한국으로 바꾸고, Timezone 을 서울로 바꾸는 일이다.
5. Internationalization Options 을 선택한 후 Enter 를 누른다. I1. Change Locale 에서 ko-
Kr.UTF-8 로 한국 위치로 설정한다. 설정이 완료되면, I2. Change Timezone 에서 시간 대역을
Seoul 로 변경 하도록 한다.
마지막으로 할 일은 LCD 통신을 위한 SPI 를 Enable 로 설정한다. 9. Advanced Option 을
선택한 후, A6. SPI 항목을 선택한다. SPI 를 설정하겠냐는 응답에 Yes 를 선택한 후 Enter 를
누른다. 그러면, Would you like SPI kernel module to be loaded by default? 라는 메시지가
뜨게 되는데, Yes 를 선택한 후 Enter 를 누른다. 모든 설정을 마친 후, Finish 를 선택하고 Enter
를 누르면 Would you like to reboot now? 라는 메시지가 출력되는데, Yes 를 선택하여 재
부팅 함으로서, 설정한 작업이 반영되게 된다.
네트워크 설정하기
IoT 환경의 라즈베리파이를 사용하기 위하여 네트워크 설정이 필요하다. 기본적으로는 유선,
무선 모두 DHCP 연결을 통한 접속을 설정하여, 이후 별다른 설정 없이 인터넷 환경이 가능하게
할수 있다. 하지만, 우리가 현재 개발하고 있는 상황에서는 DHCP 를 이용하면 IP 가 수시로
바뀌어 원격접속시에 매번 IP 를 확인해야 하는 불편함이 있다. 개발 완료 이후에는 DHCP 를
이용할 수 있지만, 개발 시점에는 고정 IP 를 사용하도록 한다.
WIFI 설정
라즈베리파이에서 어떤 WIFI 를 사용할 수 있는지 스캐닝 하기 위해 다음 명령어를 사용하자
$ sudo iwlist wlan0 scan
iwlist 명령으로 접속가능 한 무선랜 목록을 확인할 수 있다.
명령어를 입력하면, 접속할 수 있는 AP 목록이 보여지게 된다. AP 명은 ESSID 인데, 전파
강도가 강한 순서대로 목록이 제공된다. 접속할 목록을 확인한 후 설정을 진행하도록 한다.
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
One more thing – Nano 에디터를 이용한 설정 편집
Nano 에디터는 리눅스에서 간단히 파일을 편집하는데 유용하다. 수정 후 CTRL-X 를
입력하고 Y 와 Enter 키를 누르면 저장이 완료된다. 보다 자세한 내용은 2 장에서 다룬다.
파일의 하단에 다음과 같이 입력하자
network = {
ssid = "접속할 ESSID 명"
psk="WIFI 패스워드"
}
CTRL+X 를 입력한 후 Y 입력하고 Enter 를 누르면 저장이 된다. 라즈베리파이를 재 부팅하면
자동으로 적용되지만, 재부팅 필요없이 연결을 확인하기 위해 다음 명령을 입력하자
$ sudo ifdown wlan0
$ sudo ifup wlan0
재 구동후 무선랜이 제대로 동작하는지 다음 명령어를 이용하여 확인한다. 아래 화면과 같이
IP 가 제대로 잡혀서 나온다면 정상적으로 동작하는 것이다.
$ ifconfig wlan0
wlan0 항목에 ip address 가 제대로 할당되어 있다면 정상적으로 접속된 것이다.
무선 인터넷 끊기지 않게 설정하기
라즈베리파이를 유선으로 연결하여 사용해도 되지만, IoT 컨셉의 제품이나 이동성이 좋은
시스템을 개발하기 위해 WiFi 를 이용하는것이 바람직 하다. 라즈베리파이 3 를 구매하였다면,
WIFI 가 내장되어 있으므로 그대로 사용하면 된다. 단 기본 설정으로 절전 모드가 활성화 되어,
실제 사용시 원격 접속이 잘 안되거나 인터넷 연결이 수시로 비활성화와 활성화가 반복되어
개발시에 문제가 발생할 수 있다. 우선 iwconfig 로 절전 모드 상태를 확인하도록 한다.
$ iwconfig
[그림] Power Management 가 on 으로 되어있으면, 절전모드가 활성화 되어 있는 것이다.
Power Management 가 on 으로 보여진다면, 절전 모드가 설정 된 것이다. 이를 비활성화 하기
위해서는 다음의 명령을 사용하도록 한다.
$ iwconfig wlan0 power off
[그림] power off 옵션을 사용하면, Power Management 설정이 off 가 된 것을 확인할 수 있다.
다시한번 iwconfig 로 확인해 보면, 절전 모드가 off 로 된 것을 확인할 수 있다. 이제는 원격
접속이나 인터넷 활용 서비스를 개발할 때에 안정적인 무선 인터넷 환경을 사용할 수 있게
되었다. 그러나 라즈베리파이를 재 부팅하면 다시 원래대로 되 돌아 가게 된다. 이를 방지하기
위해서는 상시적으로 무선 인터넷 설정에서 절전 모드를 해제해야 할 필요가 있다. 부팅 시에
구동 되는 무선 인터넷 관련 파일을 수정하여, 별도의 절전 모드 해제 명령 없이 자동으로 절전
모드를 해제할 수 있다.
$ iw dev wlan0 set power_save off
만일 라즈베리파이 2B 이하의 WiFi 가 기본으로 장착되지 않은 기종을 구매하였다면, 추천되는
무선 USB 어댑터는 Realtek 사의 8188cu 를 이용한 무선 랜 카드이다. 시중에서 8188cu
기반으로 만들어진 구매할 수 있는 랜 카드는 다음과 같다. (제조사 사정에 따라 칩셋이
변동되는 사례가 있었다. 구매전에 다시한번 확인하길 바란다)
EFM 네트웍스 – ipTIME M100mini
Netis – Netis WF2120
유니콘정보시스템 – 유니콘 BW-150MINI
One More Thing – 무선랜 카드를 8188cu 칩셋이 장착된 랜카드를 구입해야 하는 이유
아무 무선랜을 선택하면 안 되는 이유는 8188eu 의 경우 wheezy 버전의 라즈비안에서
문제가 발생하는 경우가 많았고,새 배포판인 jessie 에서는 드라이버 지원이 추가 되었다고
하지만, 필자가 직접 8188eu 기반의 무선랜을 사용했을 때 인터넷이 제대로 되지 않는
문제가 발견되었다. 따라서, 가급적이면 8188cu 기반의 무선 랜 카드를 구매할 것을
권장한다. 정상 적으로 무선랜 카드를 사용한다고 하더라도, WiFi 를 이용하여
라즈베리파이를 이용하다 보면, 인터넷 문제와 무관하게 종종 끊기는 현상이 발생한다.
대부분의 라즈베리파이 관련 책들은 연결하는 방법만 다루지 실제 이런 문제를 다루고 있지
않은데, 이러한 문제로 구현 및 구동에 있어서 큰 어려움을 겪게 되는 경우가 많다. 이는
라즈베리파이의 WiFi 드라이버에서 절전 모드 및 대기 모드로 동작되기 떄문에 발생하는
문제로, 이 기능을 disable 하여 WiFi 로 인하여 발생하는 문제를 최소화 할 수 있다.
8188cu 의 경우 상위 칩셋인 8192cu 와 호환이 되어 부팅시 8192cu 로 잡히게 된다. 절전
설정값이 어떻게 되어있는지 확인해 보는 명령어는 다음과 같다.
$ cat /sys/module/8192cu/parameters/rtw_power_mgnt
$ cat /sys/module/8188eu/parameters/rtw_power_mgnt
1 로 값이 설정되어 있다면, 절전 모드가 활성화 되어 있는 것이다. 이를 비활성화 하기
위해서는 다음의 설정 파일을 수정하도록 한다.
$ sudo nano /etc/modprobe.d/8192cu.conf
One More Thing – 8188 이 아닌 8192 라는 이름으로 설정 파일을 만드는 이유
랜카드 사용시 8188cu 계열의 랜카드를 사용하더라도 8192cu.conf 파일을 만들어야 한다.
8188cu 칩셋과 8192cu 호환이 되어, 라즈비안 상에서 8188cu 랜 카드의 경우도 8192cu 로
인식하기 때문이다. 8188eu 의 경우 인식은 되지만 정상적으로 동작이 안 되는 경우가
발생한다. 따라서 구입시 가급적 8188cu 칩셋이 탑재된 무선 랜 카드를 구입하도록 한다.
다음의 줄을 추가하고, CTRL+X 와 Y 를 누른후 Enter 를 누르면 저장이 된다.
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0
다음의 세부 설정 옵션은 다음과 같다.
rtw_power_mgnt
0 - 절전 모드를 비 활성화
1 - 최소로 절전 기능을 수행함
2 - 최대로 절전 기능을 수행함
rtw_enusbss
0 - 대기 모드를 비 활성화
1 - 대기 모드를 활성화 함
Rtw_ips_mode
0 – 낮은 전원
1 – 높은 전원
무선 연결 설정이 완료되었다면, iwconfig 명령으로 정상적으로 무선랜이 활성화 되었는지
확인해 볼 수 있다. 절전 설정을 off 하지 않으면, 인터넷 연결이 수시로 끊길 수 있어 IoT
제품으로 만든 경우 정상적으로 동작하기 어려우며, 개발 시에 putty 를 통한 원격접속도
수시로 끊어지는 문제가 발생한다. 이제 유선으로 연결한 인터넷 선을 뽑고, 무선 환경으로
다시금 putty 로 접속하여 문제가 없는지 확인해 보자. 정상적으로 접속이 된다면, 이제
유선으로 연결할 필요 없이 개발을 진행하면 된다.
라즈베리파이와 파일 주고 받기 - FTP 설정하기
라즈베리파이를 사용할 때 내 컴퓨터에 있는 소스 코드나 파일들을 보내고 싶을 때도 있고
반대로 파일들을 받고자 할 때가 있을 것이다. 파일 공유를 가능하게 해 주는 삼바 서버를
라즈베리파이에 구축할 수 있으나, 우리는 가장 간단한 방법을 활용할 것이다. 별도의 설치
필요 없이 바로 활용 가능한 FTP(File Transfer Protocol) 을 활용하는 것이다.
파일 전송에 사용되는 FTP 프로그램 중 가장 인기 있는 프로그램은 FileZilla 이다. 한국어도
지원하므로, 설치 시에 한국어를 선택할 수 있다. 다음의 경로에서 다운로드 받아 설치하도록
한다.
다운로드 > https://filezilla-project.org/download.php?type=client
FTP 접속을 할 때 호스트(Host) 에 라즈베리파이의 IP 주소를 입력하고, 사용자 명(U) 에 pi 를,
비밀번호(W) 는 raspberry (변경하였다면, 변경한 비밀번호를 입력해야 한다) 를 입력한다.
일반적인 FTP 접속에 사용되는 포트(P) 는 21 이나, 라즈베리파이와 사용되는 방식은
SFTP(Secure FTP)로 22 번 포트를 사용한다. 포트(P)에 22 를 입력하고 빠른 연결 버튼을
누르면, 정상적으로 FTP 연결이 성공한 것을 볼 수 있다. 왼쪽은 사용자가 사용하는 컴퓨터의
디렉토리 구조이고 오른쪽이 라즈베리파이의 디렉토리 구조이다. 복사 하거나 받고자 하는
파일을 드래그 앤 드랍으로 편리하게 파일을 주고받을 수 있다.
[그림] FileZilla 를 활용하면, 파일을 드래드 앤 드랍으로 주고 받을 수 있다.
One More Thing – 파일 복사 경로
라즈베리파이에 파일을 복사할 때 /home/pi 디렉토리나 해당 디렉토리의 하위 디렉토리를
생성하여 파일을 전송하도록 한다. 타 디렉토리에는 보안상의 이유로 파일을 전송할 수가
없다. 파일 전송을 시도하고자 하면 permission denied 라는 메시지와 함께 전송이 실패하는
것을 알 수 있다.
이번 장을 정리하며
첫 장에서 우리는 라즈베리파이를 사용할 수 있도록 OS 를 설치하고, 기본 환경 설정을 마무리
하였다. 무선 개발 및 IoT 서비스를 위해 무선 랜 환경을 구축하고 원격 접속 및 데이터를 주고
받을 수 있는 구성을 구축하였다. 라즈베리파이의 장점은 아두이노와 달리 리눅스 OS 가
탑재되어, 리눅스 생태계의 다양한 오픈소스를 그대로 활용하고 다양한 서비스를 구축할 수
있다는 점이다. 다음장에서는 라즈베리파이를 보다 깊이 있게 사용할 수 있도록
라즈베리파이의 리눅스에 대해 살펴보도록 하겠다.
2. 파이의 운영체제 - LINUX 속성 실습
리눅스란 무엇인가?
Linux 는 일종의 운영체제 이다. 우리가 사용하는 컴퓨터나 스마트폰을 자유자재로 원활하게
사용할 수 있는 것은 우리와 컴퓨터 사이에 Window, Android, iOS 같은 운영체제가 있기
때문이다. 이러한 OS 덕분에 다양한 어플리케이션을 설치하여 다양한 용도로 활용할 수 있다.
리눅스는 핀란드 헬싱키대학의 대학원 생인 리누스 토발스가 취미 삼아 개발하였다. 개발하게
된 유래를 알게되면 재미난 점을 발견할 수 있다. 토발스는 원래 교육용 유닉스인 미닉스를
이용하고 있었는데, 미닉스를 함부로 개조하지 못하게 제한을 두자, 미닉스의 기능에 만족하지
못한 토발스는 직접 운영체제를 만든 것이다. 역사를 보면 무언가 비싸거나 어려운 것이
존재하면, 그 까짓거 내가 만든다는 생각의 위인들이 나타나 저렴한 가격에 쉽게 접할 수
있도록 나오는 현상을 많이 발견하게 된다. 오픈소스나 오픈소스 하드웨어가 그러하듯이
리눅스 역시도 그러한 제약을 벗어나고자 태어나게 된 것이다.
[그림] 리눅스의 로고가 펭귄이 된 까닭은 원 저자가 오스트레일리아를 여행중 펭귄에 물린적이
있다고 한다. 펭귄에 물리면 펭귄 중독에 걸려 펭귄을 사랑한다는 속설이 있다.
왜 리눅스 인가?
아두이노와 달리 라즈베리파이는 운영체제가 지원된다. 이를 통해 모터가 돌아가고 LED 가
반짝하는 기능 뿐만 아니라 대화를 나누고, 뉴스와 날씨를 구독 받는등의 다양한 아이디어를
실제로 구현할 수 있는 것이다. 이러한 기능을 위해 사용하는 것이 바로 라즈베리파이에
올라가는 Linux 이다. 이미 Linux 생태계에서는 하드웨어 제어를 위한 오픈소스 부터 데이터
처리 및 분석에 대한 방대한 오픈 소스를 제공하고 있다. 일반 PC 에서 사용되는 Linux 가
그대로 라즈베리파이에 이식되어 있기 때문에, 라즈베리파이를 위해 특정 업체에 종속된
프로그래밍 언어나 개발 방식을 사용하지 않고, 기존 PC 환경에서 사용했던 내용들을 그대로
이용할 수 있는 장점이 있다. 다양한 리눅스가 존재하지만 우리는 Debian 계열의 라즈비안
리눅스를 사용하므로, Debian 배포판의 리눅스 사용법을 살펴보도록 할 것이다.
[그림] 가장 많이 사랑받는 3 대 리눅스. Ubuntu 역시 debian 계열이다. 라즈리안 역시 debian
계열의 리눅스로 명령어가 가장 많이 사용되는 Ubuntu 리눅스와 유사하다.
Linux 를 사용하기 위한 명령어
리눅스를 사용하는 방법은 크게 2 가지가 있다. 우리가 윈도우를 활용하는 것과 같은 그래픽
유저 인터페이스(GUI)를 이용하는 방법과, 영화에서 보아 왔던 명령어를 입력하는 방식이다.
윈도우 환경을 이용하는 것은 일반적인 PC 사용 환경을 다루는 것이므로 이 책에서 다루고자
하는 범위를 벗어난다. 여기에서는 라즈베리파이를 위해 오디오를 만들기 위하여 필요한
명령어들을 다루고자 한다. 리눅스의 양대 배포판인 데비안(Debian) 과 페도라(Fedora) 에 따라
일부 명령어가 약간은 차이가 발생하는데, 가장 인기 있는 리눅스 배포판인 우분투(Ubuntu)
리눅스와 마찬가지로, 라즈비안(Raspbian) 역시 데비안 기반으로 하고 있다. 우리는 데비안
리눅스의 기본 사용법에 대해 다룰 것이다.
명령어 구조
라즈베리파이를 콘솔로 부팅하면 프롬프트(prompt) 가 나타난다. 프롬프트는 사용자의 명령
입력을 기다리는 표시로서, pi 는 사용자 계정의 이름을 말하는 것이고, circulus 는 호스트
이름을 이야기 하는 것이다.
[그림] 라즈비안에 처음 접속한 모습
명령 [옵션] [인자 값...]
명령
리눅스를 사용하기 위해 사용자가 입력하는 명령어 이다.
옵션
명령의 세부 기능을 선택할 수 있다. 옵션은 - 기호로 시작하며 영문 소문자나 대문자로
구성되어 있다. 명령에 따라 어떤 옵션이 있고 그 기능이 무엇인지는 해당 명령어에 따라
차이가 있다 (명령에 따라 옵션이 있을 수도 있고 없을 수 있다)
인자
인자는 명령으로 전달되는 값이며, 주로 파일명이나 디렉터리 명이 사용된다. 각 명령어에 따라
필요한 인자가 다르다 (명령에 따라 인자가 필요할 수도 있고 없을 수 있다)
기본 명령어
clear – 화면 지움
현재의 화면이 깨끗하게 지워지고 커서가 화면 왼쪽 상단에 위치한다
$ clear
date - 현재 날짜와 시간을 출력
현재 시스템의 날짜와 시간을 출력하는 명령어 이다.
$ date
[그림] Locale 설정한 지역에 맞추어 시간이 표시된다.
man - 명령어 사용법 안내
리눅스가 제공하는 각종 명령의 사용법을 보여준다. 명령의 옵션이나 인자값을 확인하고자
할때 유용하다.
$ man clear
sudo - 슈퍼 사용자 권한
일반적으로 사용자에게 생성된 기본 폴더 이외의 공간에서 명령을 수행하는 경우 관리자
권한이 필요하다.(이후 실제로 라즈베리파이에서 실습할 때 sudo 가 명령어 앞에서 쓰는
경우를 많이 발견하게 될 것이다) 관리자 권한으로 실행하기 위해 사용하고자 하는 명령어
앞에 sudo 를 입력 후 명령을 수행할 수 있다.
$ sudo mkdir test
파일 디렉토리 명령
리눅스는 기본적으로 유닉스 계열의 운영체제 이므로 유닉스와 유사한 부분이 많다. 유닉스와
마찬가지로 리눅스도 시스템과 관련된 정보와 하드웨어의 장치를 모두 파일로 관리한다.
파일을 효과적으로 관리하기 위해 디렉터리, 윈도우에서는 폴더와 같은 구조가 사용되는데,
파일들을 용도에 따라서 계층적으로 관리한다.
디렉토리 용도
dev 장치 파일이 담긴 디렉터리
home 사용자 홈 디렉터리가 생성되는 디렉터리. 라즈베리파이 처음 부팅 시, 이
디렉터리의 pi 디렉터리가 기본 디렉터리가 된다.
media CD-ROM 이나 USB 같으 외부 장치를 연결(마운트 라고 표현)하는 디렉터리
opt 추가 패키지가 설치되는 디렉터리
root root 계정의 홈 디렉터리이다. 루트(/) 디렉터리와 다른 것이므로 혼동하지
않도록 한다.
sys 리눅스 커널과 관련된 파일이 있는 디렉터리 이다.
usr 기본 실행 파일과 라이브러리 파일, 헤더 파일등 많은 파일이 있음.
bin 실행파일(명령)을 가지고 있음
boot 부팅에 필요한 커널 파일을 가지고 있음
etc 리눅스 설정을 위한 각종 파일을 가지고 있음
lost+found 파일 시스템에 문제가 발생하여 복구할 경우 문제가 되는 파일이 저장되는
디렉토리. 보통은 비어 있음.
mnt 파일 시스템을 임시로 마운트 하는 디렉터리 임
proc 프로세스 정보 등 커널 관련 정보가 저장되는 디렉터리 임
run 실행중인 서비스와 관련된 파일이 저장 됨
srv FTP 나 Web 등 시스템에서 제공되는 서비스의 데이터가 저장됨
tmp 시스템 사용 중에 발생하는 임시 데이터가 저장됨. 이 디렉토리의 파일은
시스템 재 시작시 모두 삭제 됨
var 시스템 운영중에 발생하는 데이터나 로그가 저장되는 디렉터리
pwd - 현재 위치를 확인
Print Working Directory 의 약자로서, 현재 디렉터리를 확인하는 명령이다
$ pwd
cd - 디렉토리 변경
Change Directory 의 약자로서, 현재 디렉터리에서 다른 디렉터리로 이동할 때 사용하는
명령어 이다.
$ cd [디렉토리 명]
실행 예
ROOT 디렉토리로 이동한다.
$ cd /
HOME 디렉토리로 이동한다.
$ cd ~
HOME/PI 디렉토리로 이동한다.
$ cd /home/pi
[그림] cd 명령을 이용하여 디렉토리를 이동하고, pwd 명령으로 이동 위치를 확인할 수 있다.
ls - 디렉토리 내부 확인
list 의 약자로서, 디렉토리 내부의 파일이나 하위 디렉토리 같은 정보를 보여주는 명령어 이다.
$ ls [옵션]... [파일]...
옵션명 설명
-a 숨김 파일을 포함하여 모든 파일 목록을 표시함
-d 지정된 디렉터리 자체의 정보를 출력함
-F 파일 유형을 나타내는 기호를 파일명 끝에 표시 (디렉토리는 /,
실행파일은 *, 링크는 @가 나타남)
-l 파일에 대한 상세 정보를 표시해 줌
-t 파일이 생성된 시간별로 표시
-C 한줄에 여러개의 정보를 함께 표시(기본설정)
-R 하위 디렉토리 내용까지 표시
실행 예
현재 디렉토리의 정보를 확인한다.
$ ls
파일에 대한 상세 목록을 확인한다.
$ ls -l
숨김 파일을 포함하여 상세 목록을 확인한다.
$ ls -al
[그림] –C 옵션은 기본 적용된다. –l 옵션을 사용하면 보다 자세한 정보를 함께 확인할 수 있다.
find - 파일 찾기
find 명령은 리눅스의 디렉터리 구조에서 특정 파일이 어디에 위치하고 있는지 찾아 주는
명령어 이다.
$ find [경로] [검색 조건]
옵션명 설명
-name [파일이름] 파일 이름으로 검색함
실행 예
interfaces 라는 이름의 파일을 전체 검색한다.
$ cd /
$ sudo find –name interfaces
[그림] Root (/) 디렉토리에서 검색을 하면, 모든 디렉토리를 전체 검색한다.
cp/mv - 파일 복사 및 이동
Copy, Move 의 약자로서 특정 파일들을 이동시키거나 복사할 때 사용하는 명령어이다.
$ mv [원본 파일 경로][대상 파일 경로]
$ cp [원본 파일 경로][대상 파일 경로]
실행 예
/etc/network 디렉토리에 있는 interfaces 파일을 interfaces_bak 파일로 복사한다.
$ sudo cp /etc/network/interfaces /etc/network/interfaces_bak
/etc/network 디렉토리에 있는 interfaces_bak 파일을 interfaces 파일로 이동한다.
$ sudo cp /etc/network/interfaces_bak /etc/network/interfaces
[그림] cp 명령의 경우, 파일을 복사하지만, mv 를 사용하면 기존 파일이 사라진다.
mkdir - 디렉토리 만들기
make directory 의 약자로써 새로운 디렉토리를 생성할때 사용 한다.
$ mkdir [생성할 폴더명 또는 경로]
실행 예
현재 디렉토리에 test 라는 폴더를 생성한다.
$ sudo mkdir test
rm - 파일/디렉토리 삭제하기
remove 의 약자로써 기본 명령은 파일을 삭제할때 사용하지만 -r 옵션을 붙여 파일이 있는
디엑토리를 지울때도 사용할 수 있다.
$ rm [옵션] [삭제할 경로]
옵션명 설명
-r 디렉터리를 삭제한다
-i Interactive 의 약자로, 삭제할 때 매번 삭제 여부를 사용자에게
묻는다.
-f Force 의 약자로, 어떠한 확인 메시지도 묻지 않고 삭제를 수행한다.
-v Verbose 의 약자로, 삭제하는 동안 정보를 상세하게 보여준다.
실행 예
현재 디렉토리에 있는 test.txt 파일을 삭제한다.
$ sudo rm test.txt
현재 디렉토리에 test 라는 폴더를 삭제한다.
$ sudo rm –r test
현재 디렉토리에 test 라는 폴더와 폴더내 파일도 함께 삭제한다.
$ sudo rm –rf test
이정도 알면 리눅스 관리 어렵지 않아요!
시스템에 설치되어 있는 디스크와 메모리의 사용량을 확인할 필요가 있다. 우리가 최종적으로
만드는 라즈베리파이 오디오는 음악파일을 다운로드 받아서 재생하게 되는 구조이다.
라즈베리파이의 저장소 용량이 한정적이기 때문에 언제 꽉 차서 음악파일의 저장이 안될지
모르는 일이다. 또한 전원 방전이나 플러그를 뽑는 등 전원의 불안정, 소프트웨어 오류,
하드웨어 오동작 등으로 손상될 수 있다. 이렇게 손상된 파일 시스템 또한 점검하고 복구해야
할 필요가 있다. 여기서는 다양한 관리 명령을 살펴보도록 한다.
df - 파일 시스템 별 사용량 확인
df 는 Disk Free 의 약자로, 현재 시스템에서 사용중인 파일시스템의 사용량에 대한 정보를
출력하는 명령어 이다. 부가적으로 전체 용량, 사용 가능한 용령 마운트 정보등도 함께
출력된다
$ df [옵션] [파일 시스템]
옵션명 설명
-a 모든 파일 시스템을 대상으로 디스크 사용량을 확인
-k 디스크 사용량을 KB 단위로 출력함
-m 디스크 사용량을 MB 단위로 출력함
-h Human 의 약자로, 디스크 사용량을 알기 쉬운 단위(GB, MB,KB
등)으로 출력함
-T 파일 시스템의 류도 출력함
실행 예
메가바이트(mb) 단위로 사용량을 확인한다.
$ df -m
사람이 보기 좋은 단위로 사용량을 표시한다.
$ df -h
[그림] 디스크의 남은 공간을 확인할 때 df 명령에 –m (MB 단위) 을 지정하면 확인하기
수월하다.
du - 디렉토리의 디스크 사용령 확인하기
du 는 Disk Usage 의 약자로, 파일 시스템별로 디스크 사용량을 알려주는 df 명령과는 달리
특정 디렉터리 별로 디스크의 사용량을 알려준다.
$ du [옵션] [디렉토리]
옵션명 설명
-s 특정 디렉터리의 전체 사용량을 출력한다
-h 디스크의 사용량을 알기 쉬운 단위(GB,MB,KB 등으로 출력한다)
실행 예
메가바이트(mb) 단위로 사용량을 확인한다.
$ du -s
사람이 보기 좋은 단위로 사용량을 표시한다.
$ df -h
fsck – 디스크 상태 검사 및 복구
fsck 는 File System Check 의 약자로, 디렉터리, 파일 링크등을 검사하고 필요시 복구 작업도
수행하는 명령어 이다.
$ fsck [옵션] [장치명]
옵션명 설명
-f 강제로 점검한다.
-y 모든 질문에 yes 로 대답하게 한다
-a 파일 시스템 검사에서 문제가 발생했을 때 자동으로 복구한다
실행 예
사용자에게 묻지 않고 자동으로 검색을 수행한다.
$ sudo fsck - y
검사 중 문제 발견 시 자동으로 복구한다.
$ sudo fsck -a
Free – 사용가능 메모리 확인
Free 명령은 메모리 사용량을 확인하는 명령어이다. 정보를 보면 버퍼와 캐시가 있는데, 버퍼는
응용 프로그램별로 존재하는 임시 데이터 저장공간으로 이 데이터는 다른 응용 프로그램이
사용하지 않는다. 반면 캐시는 빠른 접근을 위해 자주 사용하는 데이터를 저장하는 메모리
공간이다. 캐시는 여러 번 사용될 수 있지만 버퍼는 한번만 사용한다.
$ free [옵션]
옵션명 설명
-s 특정 디렉터리의 전체 사용량을 출력한다
-h 디스크의 사용량을 알기 쉬운 단위(GB,MB,KB 등으로 출력한다)
실행 예
메가바이트(mb) 단위로 사용량을 확인한다.
$ du -s
사람이 보기 좋은 단위로 사용량을 표시한다.
$ df –h
lsusb
List USB 의 약자로써, 연결된 USB 의 자세한 정보를 제공하는 명렁어 이다. 라즈베리파이에
다양한 USB 장치들을 연결하여 활용할 수 있는데, 해당 장치가 라즈베리파이에서 제대로
인식되는지 확인하는데 사용할 수 있다.
$ lsusb
[그림] lsusb 를 사용하면, USB 에 연결된 장치를 확인할 수 있다. 내부적으로는 1 개의 USB
포트를 허브로 5 개로 나누어 쓰고, 그 중 하나는 유선 이더넷에 포함되어 있다.
리눅스 시스템 종료
리눅스를 종료하는 방법을 살펴보자 윈도우를 사용하면 가끔 PC 가 동작을 멈추어서 전원을
껐다 켜는 상황이 발생한다. 이러한 경우 문제가 생겨 윈도우를 재 설치해야 하는 경우가
발생할 수 있고, 중요한 파일이 사라지기도 한다. 리눅스가 탑재된 라즈베리파이도 마찬가지로
시스템을 종료할때 정상 절차를 거치는 것이 매우 중요하다. 전원을 켜는 방법인 USB 전원
선을 연결하는 것처럼 종료하는 것을 선으로 뽑을 수 있으나, 잘못하면 여러분의 소중한
데이터가 날라가 버리게 된다. 여기서는 리눅스를 안전하게 종료하는 방법을 살펴보자
shutdown - 시스템 종료
리눅스 시스템을 정상적으로 종료하는 방법은 shutdown 명령을 사용하는것이다. shutdown
명령은 다른 시스템 종료 명령과는 달리 다양한 종료 방법과 옵션을 제공한다.
$ shutdown [옵션] [시간] [메시지]
옵션명 설명
-h 시스템을 종료한다.
-k 실제로 시스템을 종료하는 것이 아니라, 사용자들에게 메세지만
전달한다.
-r 종료후 재 시작한다
-c 이전에 했던 shutdown 명령을 취소한다
실행 예
즉시 리눅스를 종료한다.
$ sudo shutdown -h now
”System is going down” 이라는 메시지를 출력하고, 3 분뒤 종료한다.
$ shutdown -r +3 "System is going down"
reboot - 시스템 재 시작, halt/poweroff – 시스템 종료
shutdown 명령 외에 시스템을 재 시작하거나 종료하는 명령으로는 reboot 와 halt,poweroff 가
있다.halt 와 poweroff 명령도 내부적으로는 reboot 를 심볼릭 링크를 활용하여 이용한다. 이
명령들은 /var/log/wtmp 파일에 시스템 종료 기록을 남기고 시스템을 종료하거나 재 시작한다.
사용할 수 있는 옵션은 다음과 같다.
옵션명 설명
-w 실제로 재 시작하거나 종료하지 않지만 wtmp 파일에 기록을 남긴다.
-f 강제로 명령을실행하며 shutdown 을 호출하지 않는다.
-p 시스템의 전원을 끈다.
-c 이전에 했던 shutdown 명령을 취소한다
실행 예
즉시 리눅스를 종료한다.
$ sudo halt
즉시 리눅스를 재 부팅한다.
$ sudo reboot
리눅스 프로세스 관리하기
라즈베리파이에서 리눅스를 실행하며 다량한 명령어를 배워보았다. 사용자가 실행한 명령은
프로세스가 되어 실행된다. 프로세스는 현재 실행 중인 프로그램을 의미하는 것으로,
시스템에는 사용자가 실행한 프로세스 외에도 사용자 관리, 메모리 관리, 네트워크 접속 관리등
다양한 기능을 실행하는 수많은 프로세스가 실행되고 있다. 일반적으로 사용하는 명령은
실행시간이 짧아 실행 후 바로 종료되기 때문에 짧은 시간 동안만 프로세스 상태를 유지하고
있다.
ps 프로세스 목록 보기
Process 의 약자로서, 현재 실행중인 프로세스의 목록을 확인할 수 있다.
$ ps [옵션]
옵션명 설명
-e 시스템에서 실행중인 모든 프로세스 정보를 출력
-f 프로세스의 자세한 정보를 출력
-u 특정 사용자에 대한 모든 프로세스 정보를 출력
-p PID(Process ID)로 지정된 특정 프로세스 정보를 출력
실행 예
실행중인 프로세스 정보를 상세하게 출력한다.
$ ps -f
시스템에서 실행중인 모든 프로세스 정보를 보여준다.
$ ps -ef
[그림] 프로세스의 상태를 자세히 확인하기 위해서는 –f 옵션을 함께 사용한다.
실행중인 프로세스의 목록을 자세히 확인하기 위해서는 –f 옵션을 함께 사용해야 한다. –f
옵션을 사용하였을 때 세부적으로 나오는 정보는 다음과 같다.
항목 설명
UID 프로세스를 실행한 사용자 ID
PID 프로세스 번호
PPID 부모 프로세스 번호
C CPU 사용량 (%값)
STIME 프로세스의 시작 날짜와 시간
TTY 프로세스가 실행된 터미널의 종류와 번호
TIME 프로세스의 실행 시간
CMD 실행되고 있는 프로그램의 이름
grep - 특정 프로세스 정보 검색하기
ps 명령만 사용하면, 모든 프로세스 목록이 모두 보이기 때문에, 특정 프로세스의 상태를
확인하기 어렵다. 라즈베리파이에서 본인이 실행시킨 특정 프로세스를 확인해 보고자 할 때가
있다. 이러한 경우는 ps 와 grep 명령어를 조합하여 사용할 수 있다.
$ ps -ef | grep [명령]
실행 예
node 라는 이름을 가지고 있는 프로세스를 상세하게 확인한다.
$ ps –ef | grep node
[그림] grep 으로 현재 동작되는 프로세스 중 특정 프로세스를 찾는 방법이다. 여기서 마지막
줄은 grep 자기 자신이 나오는 것이므로, 현 화면에서 실제로 node 라는 이름으로 동작되는
것은 2 개의 프로세스 이다.
특정 프로세스 정보 검색하기 pgrep
pgrep 은 ps 와 grep 을 하나로 통합하여 만든 명령어 이다. ps 와 달리 지정한 패턴과
일치하는 프로세스의 정보를 간략하게 출력한다.
$ pgrep [옵션] [패턴]
옵션 설명
-x 패턴과 정확히 일치하는 프로세스의 정보를 출력 함
-n 패턴을 포함하고 있는 가장 최근의 프로세스 정보를 출력한다
-u 사용자 이름 : 특정 사용자에 대한 모든 프로세스를 출력한다
-l PID 와 프로세스의 이름을 출력한다
-t [TERM] 특정 단말기와 관련된 프로세스의 정보를 출력한다
kill,pkill - 프로세스 종료하기
응답이 없거나 불필요한 프로세스를 종료하려면 해당 프로세스의 PID 를 알아야 한다. 앞에서
배운 ps 나 pgrep 명령으로 정보를 확인한 후 kill 이나 pkill 명령을 이용하여 프로세스를
종료한다.
kill
인자로 지정한 프로세스에 시그널을 전달한다.
$ kill [시그널] pid
시그널 설명
-2 인터럽트 시그널을 보낸다 (CTRL+C 와 같은 효과)
-9 프로세스를 강제로 종료한다
-15 프로세스가 관련된 파일을 정리하고 프로세스를 종료한다.
프로세스가 종료되지 않을 수도 있다.
실행 예
프로세스 ID 가 2419 인 프로세스를 강제로 종료한다.
$ sudo kill -9 2419
[그림] kill 명령으로 2419 프로세스를 종료한 후 다시 ps 명령으로 확인하면, 프로세스가
종료되었음을 확인할 수 있다.
pkill
Process Kill 의 약자로, kill 명령과 같이 시그널을 보내는데, pid 가 아니라 프로세스의 명령
이름(CMD)로 프로세스를 찾아 종료한다. kill 명령어와의 차이점은, 명령이름으로 찾아
종료하므로 여러개가 한번에 종료될 수 있다는 점이다.
$ pkill [옵션][패턴]
옵션 설명
-2 지정한 패턴을 명령어 뿐만 아니라 경로명, 옵션, 인자값도 비교
-9 패턴과 일치하는 프로세스의 가장 최근에 실행된 프로세스 하나만
종료
-15 패턴과 정확하게 일치되는 프로세스만 출력
실행 예
node 라는 이름을 가지는 프로세스를 강제로 종료한다.
$ sudo pkill node
[그림] pkill 을 이용해 이름으로 프로세스를 종료하면, 여러 프로세스를 한번에 종료하는데
유용하다.
top 프로세스 관리도구
ps 명령으로는 현재 프로세스 목록을 확인할 수 있다. top 명령은 현재 실행중인 프로세스
정보를 주기적으로 출력하는데, 프로세스의 요약 정보를 상단에 출력하고 각 프로세스의
정보를 하단에 출력한다.
$ top
항목 설명
PID 프로세스 id
USER 사용자 계정
PR 우선순위
NI NICE 값
VIRT 프로세스가 사용하는 가상 메모리 크기
RES 프로세스가 사용하는 메모리 크기
SHR 프로세스가 사용하는 공유 메모리 크기
%CPU CPU 사용량
%MEM 메모리 사용량
TIME+ CPU 누적 이용시간
COMMAND 명령 이름
동시에 여러가지 작업을 수행해 보자
백그라운드 작업
사용자가 터미널에서 보통 작업을 할때 한번에 하나만 실행이 가능하다. 이는 새로운 명령을
실행하기 위해서는 이전에 실행했던 명령이 끝날때까지 기다렸다가 사용해야 함을 의미한다.
하지만 상황에 따라 여러가지 명령을 한번에 실행해야 하는 경우가 있다. 이럴때 작업을
제어하는 명령을 사용하면 유용하다.
포그라운드 작업
일반적으로 명령어를 입력하면 컴퓨터는 사용자가 입력한 명령을 해석하고 실행하여 그
결과를 출력한다. 사용자는 화면에 출력된 결과를 보고 다시 명령을 입력하는 컴퓨터와
대화하는 방식으로 작업을 수행한다. 이러한 방식을 Forground Process 라고 한다.
$ sleep 100
->sleep 명령이 끝날때까지 기다려야 한다
백그라운드 작업 &
포그라운드 작업은 명령을 한번에 하나씩 실행하므로 동시에 여러개를 실행할 수 없는 문제가
있다. 이럴때 이전과 같이 포그라운드 작업을 진행하게 되면 다른 작업을 실행할 수 없다. 이럴
때 백그라운드로 실행하면 포그라운드에서는 다른 작업을 수행할 수 있다. 백그라운드 작업은
명령의 실행시간이 많이 걸리는 작업을 수행하거나 다른 명령을 동시에 실행하고 자 할때
사용한다. 명령을 수행하기 위해서는 마지막에 & 기호를 붙이면 된다.
$ sleep 100 &
작업목록 보기 jobs
현재 실행중인 백그라운드 작업을 볼수 있는 명령어로 모든 백그라운드 작업을 보여준다. 특정
번호를 지정하면 해당 작업의 정보만 보여준다.
$ jobs [옵션]
옵션 설명
-l 프로세스 번호를 추가하여 보여준다.
작업 전환하기
포그라운드로 동작중인 서비스를 제어할 수 있다.
옵션 설명
CTRL+Z 또는
stop [%작업번호]
포그라운드로 작업을 잠시 중지한다.
bg [%작업번호] 작업번호가 지시하는 작업을 백그라운드로 작업을 전환한다
fg [%작업 번호] 작업번호가 지시하는 작업을 포그라운드 작업으로 전환한다.
작업 종료하기 CTRL + C
포그라운드 작업을 종료할때 CTRL + C 를 이용하면 종료가 된다. 백그라운드 작업은 kill
명령으로 강제 종료해야 한다. kill 명령의 인자로 %작업 번호를 지정하면종료 된다.
$ sleep 100 &
$ kill %1
로그 아웃 후에도 백그라운드 작업 계속하기 nohup
백그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던
백그라운드 작업도 종료된다. 하지만 터미널이 종료되도 작업이 완료될때까지 종료되지 말아야
하는 상황이 있는데, 이때 nohup 명령을 사용한다
$ nohup [명령] &
패키지 관리하기
드디어 운영체제가 탑재된 라즈베리파이를 강력하게 사용할 수 있는 패키지 관리 기능이다.
아두이노와 달리 라즈베리파이는 리눅스 기반이기 떄문에 수 많은 소프트웨어를 손쉽게
설치하여 사용할 수 있다. 직접 프로그래밍하지 않더라도 이를 통해 이미 만들어진 다양한
소프트웨어로 다양한 기능을 발휘하도록 할 수 있다. 이러한 소프트웨어는 소스코드 자체로
제공되어서 수동으로 컴파일하여 설치하는 방식이 있고, 바이너리 패키지로 배포되어 설치하여
사용할 수 있는 형태가 있다. 여기에서는 패키지로 관리되는 다양한 소프트웨어를 손쉽게
설치하는 방법을 다룰 것이다.
패키지의 특징
- 바이너리 파일로 되어 컴파일을 할 필요가 없다.
- 패키지의 파일들이 관련 디렉터리로 바로 설치된다.
- 패키지를 삭제할 때 관련된 파일을 일괄적으로 삭제할 수 있다.
- 기존에 설치한 패키지를 삭제하지 않고 바로 업그레이드 할 수 있다.
- 패키지의 설치 상태를 검증할 수 있다.
- 패키지에 대한 정보를 제공한다.
- 해당 패키지와 의존성을 가지고 있는 패키지가 무엇인지 알려준다. 따라서 의존성이 있는
패키지를 미리 설치할 수 있고, apt-get 명령을 사용하면 의존성이 있는 패키지가 자동으로
설치된다
패키지의 이름구성
파일명_버전-리버전_아키텍쳐.deb
항목 설명
파일명 패키지의 성격을 나타내는 파일명이다.
패키지 버전 두 번째 항목은 패키지의 버전을 의미한다.
패키지 리비전 리비전은 원래 소스의 버전이 업그레이드 되지는 않았지만 패키지의
보안.
아키텍쳐 사용하는 시스템 아키텍쳐로 i386 은 인텔을, all 은 시스템과
상관없는 문서나 스크립트 등을 의미함. 라즈베리파이는 ARM CPU
이므로 arm 으로 시작하는 명칭이 붙는다.
확장자 우분투 패키지의 확장자는 .deb 를 사용한다.
apt-get
소프트웨어 패키지들이 저장된 저장소를 업데이트하고 패키지를 설치하거나 제거하는데
사용하는 명령이다.
$ agt-get [옵션] [서브 명령]
옵션 설명
-d 패키지를 내려받기만 한다.
-f 의존성이 깨진 패키지를 수정하려고 시도한다.
-h 간단한 도움말을 출력한다.
서브명령 설명
update 패키지 저장소에서 새로운 패키지 정보를 가져온다.
upgrade 현재 설치되어 있는 패키지를 업그레이드 한다.
install [패키지] 패키지를 설치한다.
remove [패키지] 패키지를 삭제한다.
download [패키지] 패키지를 현재 디렉토리에 내려 받는다.
autoclean 불완전하게 내려 받았거나 오래된 패키지를 삭제한다.
clean 캐시되어 있는 모든 패키지를 삭제하여 디스크 공간을 확보한다.
check 의존성이 깨진 패키지를 삭제한다.
사용 예
Linux 패키지 정보를 갱신하여, 설치된 모든 패키지를 업데이트 한다.
$ sudo apt-get update
$sudo apt-get upgrade
MP3 재생 패키지인 mpg321 을 자동으로 설치한다.
$ sudo agt-get install mpg321 –y
MP3 재생 패키지인 mpg321 을 삭제한다. 상황에 따라 사용자 확인을 받는다.
$ sudo apt-get remove mpg321
[그림] 패키지 설치/삭제시 자동 진행을 위해서 –y 옵션을 사용할 수 있다.
패키지 수동 관리하기 - dpkg
apt-get 도 내부적으로는 dpkg 를 사용한다. 시스템의 특정 파일이 어느 패키지에 속한
것인지를 확인 하는 기능 등 보다 세부적인 기능을 제공한다. Deb 확장자로 시작하는 패키지를
직접 받은 경우 이를 설치하고 제거하는데 사용할 수 있다.
$ dpkg [옵션] [파일명 또는 패키지 명]
서브명령 설명
-l 설치된 패키지의 목록을 출력한다.
-l [패키지] 패키지의 설치 상태를 출력한다.
-I [DEB 파일] 해당 파일을 설치한다 (sudo)
-r [패키지] 해당 패키지를 삭제한다 (sudo)
-P [패키지] 해당 패키지와 설정 정보를 모두 삭제한다 (sudo)
사용 예
NODEJS 를 다운로드 받은 후 설치한다.
$ sudo wget http://node-arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg –I node_latest_armhf.deb
NODEJS 를 설치 정보와 함께 삭제한다.
$ sudo dpkg –r -P node_latest_armhf.deb
심플하고 쉬운 텍스트 에디터 - Nano
리눅스 상에서 문서 편집을 위해 흔히 많이 이용되는 것은 VI 편집기이다. GUI 환경이라면,
GEDIT 를 이용할 수 있지만, Linux 는 콘솔이나 터미널 환경에서 많이 이용하기 때문에 대안을
찾아야 한다. vi 의 경우 UNIX 시절부터 이어 내려오는 편집기로 강력한 기느와 다양한 명령을
제공하지만, 처음 접하는 사람들에게는 어렵다. 터미널 환경에서 GEdit 처럼 간단하게 활용할
수 있는 것은 nano 이다.
Nano 의 특징
사용하기 쉽다는 점이다. VI 는 키보드 방향으로 커서를 이동할 수 없지만 나노는 커서를
이동할 수 있고, VI 가 편ㅈㅂ과 입력 모드가 나뉘어 있지만 나노는 GUI 환경과 윳하게 사용할
수 있도록 되어 있다. 또한 아래 부분에는 단축키도 표시해 주므로 손쉽게 사용할 수 있다.
전문적인 사용에는 VI 가 탁월하지만 대부분의 일들이 간단한 경우가 많기 때문에 나노로
충분히 처리할 수 있다.
가장 기본적으로 사용하는 방법은, 방향키를 이용하여, 수정이 필요한 위치로 이동하여, 원하는
내용으로 입력한 후 CTRL + X 를 누르고, 저장하겠냐는 질문에 Y 를 입력한 후 Enter 를
클릭하여 저장하고 종료하는 방식이다. 보다 다양한 기능이 필요한 경우 다음 하단의 단축키를
활용하도록 하자.
$ sudo nano /etc/rc.local
l
단축키 기능
CTRL+G / F1 나노 에디터 사용법(도움말)을 확인할 수 있음
CTRL+X / F2 나노 에디터 종료. 저장하지 않았을 경우 저장할지 여부를 물음
CTRL+O / F3 현재 작성중인 파일 저장
CTRL+W / F6 현재 문서에서 검색. 검색중 정규식 검색모드로 전환하려면 ALT+R 을
누르면 됨
CTRL + ^ ALT+R 문자열을 검색하여 내용을바꿈
ALT+W 이전에 검색했던 검색 결과를 반복
CTRL+R / F4 파일 불러오기. 현재 편집중인 문서에 다른 문서의 내용을 삽입 하는
동작. 불러온 파일의 내용을 변경할수 없음. 나노에서 편 집 중 다른
파일을 불러오려면 나노를 종료하고 명령을 다시 실행해야 함
CTRL+Y / F7 이전 페이지로 이동하는기능, 키보드의 Page Up 키로도 사용 가능
CTRL+V / F8 다음 페이지로 이동하는 기능, 키보드의 Page Down 키로 사용 가능
ALT+ M 문서의 맨 처음으로 이동 함
ALT + M? 문서의 맨 끝으로 이동함
CTRL+SHIFT+^
혹은 ALT+G
특정 행을 입력하여 특정 행으로 이동할 수 있음
ALT+SHIFT+M /
ALT+SHIFT +M ?
현재 행을 들여쓰거나 내어 씀
CTRL + J 한 줄이 현재 터미널의 폭을 벗어날 정도로 긴 행을 폭에 맞추어 정렬
함
이번 장을 정리하며
이번 장에서는 라즈베리파이의 리눅스를 다루는 법을 다루었다. 기본적인 명령어를 다루고,
시스템을 간단하게 모니터링 하는 법을 배웠으며, 리눅스 생태계의 다양한 패키지들을
설치하는 방법을 실습해 보았다. 여기서 배운 텍스트 에디트는 앞으로 설정 편집이나 간단한
프로그래밍에서 유용하게 사용되니, 잘 기억해두도록 한다. 다음 장에서는 본격적으로
자바스크립트를 이용한 NodeJS 프로그래밍에 대해 다룬다. 운영체제가 올라간 라즈베리파이에
직접 웹 어플리케이션 서버를 자바스크립트로 작성하여 활용해 볼 것이다.
3. JavaScript 로 하드웨어 제어를 - NodeJS
세상에서 가장 인기 있는 언어 - Javascript
아직도 자바스크립트가 웹에서 간단히 입력 값을 검사하는 프로그래밍 언으로 생각하는가?
생각을 바꾸어야 할 것이다. 자바스크립트는 이제 세상에서 가장 인기 있는 프로그래밍 언어가
되었다. Github 의 프로젝트 중에 자바스크립트로 구현된 프로젝트가 가장 많고, 해커톤에서
사용되는 가장 인기 있는 프로그래밍 언어가 자바스크립트 이다. 천덕꾸러기 신세였던
자바스크립트는 2005 년 구글로 부터 시작된 Ajax 혁명으로 인하여 보다 중요한 프로그램을
작성하기 위한 언어로 부각되기 시작했다. HTML5 의 부각과 다양해 지는 단말, 다양한
자바스크립트 프레임워크등으로 자바스크립트의 인기는 더욱 높아질 전망이다.
[그림] GITHUB 에서 가장 인기 있는 언어는 단연 JavaScript 이다
JavaScript 로 서버와 라즈베리파이 제어를! - NodeJS?
NodeJS 는 오픈소스로 공개된 Chrome 브라우저의 자바스크립트 실행 엔진(V8 이라
불리운다)을 기반으로 제작되었다. 확장성 있고 빠르게 어플리케이션을 개발할 수 있도록
도와주는 플랫폼이다. 즉, NodeJS 로 인하여 자바스크립트로 웹 페이지 개발 뿐만 아니라
서버나 하드웨어 제어 용도로도 사용할 수 있다는 의미이다. 이벤트 처리 기반과 Non-Blocking
IO 를 이용하여 분산된 Device 상에서 실시간 데이터 통신을 하는 어플리케이션에 최적화되어
있고 경량의 효율적인 프레임 워크이다.
비동기식 이벤트 처리기반 프레임워크로, 확장가능한 네트워크 어플리케이션 개발에 맞추어
디자인 되어 있다.
쓰레드 기반의 네트워킹은 사용하기 어렵고, 데드락 현상으로 시스템 성능이 저하된다는
단점이 있는 반면, NodeJS 는 이벤트 기반으로 block 이 될 일이 없어, 비 전문가도 확장
가능한 시스템을 개발하는데 용이하다는 장점이 있다.
[그림] NodeJS 도 결국 JavaScript 로 되어 있다. JavaScript 만 알면, 모바일 어플리케이션부터
서버, 데이터 분석, 하드웨어 제어 그 모든 것이 가능한 현 시대에 가장 활용성 높은 프로그래밍
언어이다.
왜 Javascipt 기반으로 하는가 - NodeJS 의 이점
NodeJS 가 만능은 아니고, 상황에 따라 더 좋은 성능을 보여 주는 언어도 많다. 상당수의
라즈베리파이 관련 예제와 책자들이 파이썬(Python) 으로 구현되어 있는데, 유일하게 이
책에서 JavaScript 로 모든 프로그램을 구성한 것이 의아해 할 것이다. 구현하고자 하는
아이디어가 있을 때 이를 단 한가지 언어로만 만든다고 하면 현재 선택할 수 있는 최선의
언어이다. 필자 역시 전자공학을 전공하고, 회사 일로 C 나 Java 와 같은 언어를 주로
사용하였지만, 메이크 활동을 위해서는 자바스크립트 만을 사용한다. 왜 자바스크립트, NodeJS
를 사용하는지에 대한 이유는 다음과 같다.
- 개발자는 하나의 언어로 웹 어플리케이션 부터 IoT 하드웨어까지 개발할 수 있기 때문에
서버와 클라이언트, 모바일 부터 하드웨어 제어까지 넘나드는 비용을 획기적으로 줄일 수
있다. 또한 한 곳에서 제작된 코드는 다양한 플랫폼을 넘나들며 그대로 이용될 수 있어
유지 보수를 매우 간단하게 해준다. 심지어 간단한 데이터 분석 또한 NodeJS 에서 처리할
수 있다.
- JSON (JavaScript Object Notation)은 XML 을 넘어서 현재 가장 보편적인 데이터 교환
포맷인데, Javascript 기반을 두고 있어 손쉬운 데이터 처리가 가능하다.
- Javascript 는 CouchDB, MongoDB 와 같은 NoSQL 데이터베이스에서 사용되는 언어로
상호작용하기에 아주 적합하다. 몽고디비의 쉘과 질의언어가 자바스크립트이며, Client,
Server, DB 까지 동일한 JSON 형식으로 데이터를 사용하기 때문에 데이터 처리가 매우
용이하다. 또한 데이터 분석 및 처리용도로 사용되는 엘리스틱 서치 (Elasticsearch) 또한
JSON 형태로 데이터를 활용할 수 있어 매우 편리하다.
- Node 가 사용되는 v8 가상 머신은 ECMAScript 표준을 준수하여, Javascript 의 모든 새로운
기능을 즉시 확인해 볼 수 있다.
Hello Pi! – NodeJS 설치하기
라즈베리파이에서 NodeJS 를 설치하는 기본적인 방법은 직접 소스코드를 컴파일해서
사용하는 것이다. 하지만, 더 간단한 방법으로 이미 배포판으로 만들어진 설치파일을 받아서
바로 설치하는 것이다. 우리는 배포 판을 받고, 2 장 리눅스 시간에서 다룬 dpkg 명령을
이용하여 NodeJS 를 설치해 보고, Hello Pi 를 작성하여 확인해 보도록 한다.
우선 배포 파일을 wget 명령으로 다운로드 받고, dpkg 명령으로 설치하도록 한다.
$ sudo wget http://node-arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg –I node_latest_armhf.deb
NodeJS 가 정상적으로 설치되었는지 확인하기 위해서 설치된 NodeJS 버전을 확인해 본다.
$ node –v
버전이 제대로 확인이 된다면 node 를 입력하여 실행한다. Python 과 유사하게 작성한 코드를
실행할 수도 인터프리터 모드에서 하나씩 입력해서 동작을 확인해 볼 수도 있다. 다음과 같은
코드를 입력하여 Hello Pi 가 정상적으로 출력되는지 확인한다.
정상적으로 화면에 출력된다면, 간단한 연산을 수행하여 우리의 프로그램이 정상적으로
동작하는지 확인해 본다. 2 개의 메모리 공간에 숫자를 넣고 이를 더한 결과 값을 제대로 보여
주는 지 확인하는 예제이다. (원래 컴퓨터가 전자계산기에서 출발했다는 것을 생각하자)
[그림] NodeJS 버전 확인 및 NodeJS 인터프리터 모드에서 코드를 작성하여 실행하는 예시
console.log('Hello Pi!');
var a = 10;
var b = 5;
console.log(a + b);
프로그래밍 방식 선택하기 – Nano vs Sublime Text
우리는 라즈베리파이를 메이커 보드로 사용하기 위하여 별도의 GUI 구성을 하지 않고
텍스트들만이 난무하는 콘솔 환경에서 사용하고 있다. 첫 Hello Pi 예제와 같이 인터프리터
모드에서 하나씩 입력해 가면서 실행할 수도 있겠지만, 코드의 길이가 길어지면, 이렇게 하나씩
입력하는 방식으로는 프로그램 수정이나 공유가 어려울 있다. 따라서, 코드를 별도로 작성한 후
그 코드를 실행하는 방식을 대부분 사용한다. 이 라즈베리파이에서 NodeJS 코드를 작성하기
위해서는 Nano 를 이용하여 직접 작성하거나, 당신이 사용하고 있는 컴퓨터에서 작성한 다음,
파일을 FTP 로 전송하여 실행하는 방법이 있을 것이다. (Circulus 를 사용하면 이런 복잡한
문제가 해결되는데, 부록에서 다루도록 하겠다)
우선 첫 번째 실행한 예제를 Nano 로 작성한 후 실행해 보도록 한다. 작성이 완료되면 CTRL+X
를 누르면, 저장하겠냐고 묻는데, Y 를 누르고 엔터를 두번 눌러 주면 저장이 완료된다.
$ sudo nano sample1.js
저장된 sample1.js 를 실행해 볼 차례이다. NODE 명령어 뒤에 간단히 파일명만 입력하는
것으로 실행이 되고, 결과가 화면에 보여지게 된다.
$ node sample1.js
[그림] 실행 결과가 인터프리터에 직접 입력한 것 과 동일하게 정상적으로 출력되는 것을
확인할 수 있다.
아무래도, 윈도우나 스마트 폰을 사용하던 환경에서 마우스 없이 직접 입력해서 프로그래밍
하는 것은 쉽지 않은 일이다. 좀더 편리하게 컴퓨터에서 자바스크립트 코드를 작성하는 경우,
사랑 받는 프로그램 중 하나가 Sublime Text 이다. 무료 버전을 사용하면 저장 시에 가끔씩
구매해 달라는 팝업이 뜨는 것 이외에 기능 제약이 없는 프로그램이다. Sublime Text 를
사용하고자 하면 다음의 주소에서 다운로드 받도록 한다.
다운로드 주소 > http://www.sublimetext.com/3
[그림] Sublime Text 3 는 강력하며 빠르고, 게다가 무료이다.
Sublime Text 에서 저장된 코드를 FTP 로 라즈베리파이에 옮긴 후, 실행하게 되면 동일한
결과를 확인할 수 있다.
자바스크립트로 프로그래밍 시작하기
자바스크립트는 타 프로그래밍 언어에 비해 자유도가 높은 언어로 알려져 있다. 사용하기 쉬워
하는 프로그래머와 어려워 하는 프로그래머로 나뉜다. 여기서는 모바일과 하드웨어 제작을
위해, 기본적인 자바스크립트 사용법을 다룬다.
기본 연산자
자바스크립트를 이용하여 연산 할 때 사용하는 문법으로, 숫자 형인지 문자형인지에 따라
결과값이 달라진다. 증가연산자의 위치에 따라서 실행 전과 후의 결과 값이 달라지는 것을
확인하자.
[ js1.js ]
// 숫자를 더한 값을 출력한다.
console.log(100 + 1);
// 문자와 숫자를 더한 값을 출력한다.
console.log('100' + 1);
var a = 10;
// a 에 저장된 숫자값을 연산하여 출력한다.
console.log(a + 1);
console.log(a);
console.log(a++);
console.log(a);
console.log(++a);
console.log(a);
증가연산자가 뒤에 있는 경우 (a++) 곧바로 출력시 값이 변경되지 않지만, 그 이후에 값을
출력시에 1 이 증가됨을 알수 있다. 반대로 앞에 있는 경우(++a), 이미 1 이 증가된 상태로 값이
출력됨을 알수 있다.
[그림] 숫자와 문자의 덧셈 연산의 결과가 다르다.
비교 연산자
비교 연산자는 좌변과 우변의 값을 비교하여 그 결과를 반환하는 문법이다. 이항 비교연산자인
==, != 은 값만을 비교하나, 삼항 비교연산자인 ===, !== 은 데이터 형태도 비교하므로,
예기치 못한 동작을 방지하기 위해서 삼항 연산자를 사용하는 것이 바람직 하다.
[ js2.js ]
// 이항 연산자로 비교한 값을 출력한다.
console.log(1 == true);
console.log(1 == '1');
// 삼항 연산자로 비교한 값을 출력한다.
console.log(1 === true);
console.log(1 === '1');
// x 값을 비교하여 true 이면 bigger 를 false 면 smaller 를 출력한다.
var x = 90;
console.log((x > 90) ? 'bigger':'smaller');
이항 연산자와 달리 삼항 비교 연산자는 값이 동일하지 않은 경우 false 로 비교 값이 반환됨을
확인할 수 있다. 이후 if 조건문을 다루겠지만, ? 을 이용하여 한줄로 비교 작업을 간단하게 할
수 있음을 확인하도록 한다.
[그림] 삼항 연산자는 데이터 형태도 비교한다.
논리 연산자
논리 연산자는 복수의 조건 식을 비교하여 최종적으로 그 값이 true 인지, false 인지를
반환한다. 앞에서 살펴본 비교 연산자를 사용하여 사용하며, 조합을 통해 복잡한 조건식을
표현할 수 있다.
[ js3.js ]
var x = 1;
var y = 2;
// 좌항과 우항이 둘다 true 일때 true 가 출력된다.
console.log(x == 1 && y == 1);
// 좌항과 우항중 하나만 true 이면 true 가 출력된다.
console.log(x == 1 || y == 1);
&& 의 경우, and 연산을 하여 좌항과 우항의 값이 모두 true 일 경우 true 를 반환하지만, || 의
경우는 or 연산을 하여 좌항과 우항 중 한 개만 true 인 경우 true 값을 반환한다.
[그림] 한 개만 조건을 만족하는 경우는 or(||) 연산을, 모든 조건을 만족해야 하는 경우는
and(&&) 연산을 사용하도록 한다.
IF 조건문
여러가지 상황에서 조건에 따라 이에 대응하는 명령을 실행할 수 있다. If 단독으로 사용할 수
있지만, else if 와 else 등으로 세분화 하여 분기할 수 있다.
[ js4.js ]
var x = 15;
// 30보다 같거나 크면 Bigger than 30 이 출력된다.
if( x >= 30){
console.log('Bigger than 30');
// 30보다 작고 10보다 크면, Bigger than 10 이 출력된다.
} else if ( x > 10) {
console.log('Bigger than 10');
// 10보다 값이 작으면 Smaller than 10 이 출력된다.
} else {
console.log('Smaller than 10');
}
첫번째 조건을 만족하지 못하고, 두번째 else if 조건을 만족하여 해당 결과를 반환함을 알 수
있다. 이처럼 중첩을 통해 다양한 조건에 따라 분기하여 원하는 명령을 수행할 수 있다.
[그림] 입력한 조건 값을 비교하여, 원하는 작업으로 분기할 수 있다.
SWITCH 조건문
동일 변수에 대한 비교시 사용할 수 있는 조건문으로, case 블록에 해당하는 값이 존재시 해당
블록 명령을 실행하고, 만족하는 case 가 없는 경우 default 블록을 호출하는 직관적인 구조를
가지고 있다.
[ js5.js ]
var rank = 'B';
// rank 에 저장된 값에 따라 출력된다.
switch(rank){
case 'A':
console.log('A Rank');
break;
case 'B':
console.log('B Rank');
break;
case 'C':
console.log('C Rank');
break;
default:
console.log('Not ranked');
}
if 조건문이 다양한 조건 식을 넣을 수 있는 반면, 값 비교에 따른 분기는 switch 조건문이 보다
명확하게 흐름이 식별된다. Break 문을 빼게 되면, 그 다음의 case 명령 값도 실행되게 되니
주의하도록 한다.
[ 그림 ] 단순 값 비교에는 IF 비교문 보다 SWITCH 비교문이 명확하다.
WHILE 반복문
주어진 조건에 따라 반복 처리하고자 하는 경우 사용하는 명령어이다.
[ js6.js ]
var x = 0;
// x 가 5보다 작을 때 괄호 안 명령이 계속적으로 수행된다.
while(x < 5){
console.log('X is ' + x);
x++;
}
예제 프로그램은 x 값이 5 보다 작을 경우, x 값을 출력해 주고, x 값을 1 씩 증가하는 코드이다.
4 까지 증가되는 값을 반복 출력하고, 종료 됨을 확인할 수 있다.
[ 그림 ] 조건에 따른 반복을 수행할 경우, while 문을 사용한다.
FOR 반복문
정해진 횟수만큼 반복 처리하기 하기 위해 사용하는 명령어 이다. 일반적인 경우 for 명령을
사용하지만, 지정된 배열이나 객체에서 선두부터 반복 처리하기 위해서는 for in 명령을
사용한다.
[ js7.js ]
var obj = { key1 : 'Pi', key2 : 'Raspberry', key3 : 'NodeJS'};
var arr = ['Pi','Raspberry','NodeJS'];
// obj 객체에 있는 키 값이 있을 때 까지 반복한다.
for(var key in obj){
console.log(key + ' : ' + obj[key]);
}
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT
라즈베리파이와자바스크립트로만드는 IoT

Mais conteúdo relacionado

Destaque

Personal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manualPersonal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manualCirculus
 
Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅Circulus
 
숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)
숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)
숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)Kevin Kim
 
123D Design - 정리함 만들기
123D Design - 정리함 만들기123D Design - 정리함 만들기
123D Design - 정리함 만들기Circulus
 
How to deploy oVirt using Nested KVM environment?
How to deploy oVirt using Nested KVM environment?How to deploy oVirt using Nested KVM environment?
How to deploy oVirt using Nested KVM environment?Rogan Kyuseok Lee
 
RHCE FINAL Questions and Answers
RHCE FINAL Questions and AnswersRHCE FINAL Questions and Answers
RHCE FINAL Questions and AnswersRadien software
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기Yong Joon Moon
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 Yong Joon Moon
 
TensorFlow Tutorial
TensorFlow TutorialTensorFlow Tutorial
TensorFlow TutorialNamHyuk Ahn
 
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기SangWoo Kim
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
 
IoT 서비스 아키텍처 분석 및 Case Study-Innovation Seminar
IoT 서비스 아키텍처 분석 및 Case Study-Innovation SeminarIoT 서비스 아키텍처 분석 및 Case Study-Innovation Seminar
IoT 서비스 아키텍처 분석 및 Case Study-Innovation Seminar영섭 임
 
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기위키북스
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 

Destaque (17)

Splunk6.3 소개서 2015_11
Splunk6.3 소개서 2015_11Splunk6.3 소개서 2015_11
Splunk6.3 소개서 2015_11
 
Personal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manualPersonal Interconnect AUdio - piAu manual
Personal Interconnect AUdio - piAu manual
 
Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅Startup 123D Design - 10. 3D프린팅
Startup 123D Design - 10. 3D프린팅
 
숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)
숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)
숭실대교육교재 - IoT 산업에서 오픈소스의 활용방안(김형채)
 
123D Design - 정리함 만들기
123D Design - 정리함 만들기123D Design - 정리함 만들기
123D Design - 정리함 만들기
 
How to deploy oVirt using Nested KVM environment?
How to deploy oVirt using Nested KVM environment?How to deploy oVirt using Nested KVM environment?
How to deploy oVirt using Nested KVM environment?
 
RHCE FINAL Questions and Answers
RHCE FINAL Questions and AnswersRHCE FINAL Questions and Answers
RHCE FINAL Questions and Answers
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기파이썬 확률과 통계 기초 이해하기
파이썬 확률과 통계 기초 이해하기
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
TensorFlow Tutorial
TensorFlow TutorialTensorFlow Tutorial
TensorFlow Tutorial
 
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
IoT 서비스 아키텍처 분석 및 Case Study-Innovation Seminar
IoT 서비스 아키텍처 분석 및 Case Study-Innovation SeminarIoT 서비스 아키텍처 분석 및 Case Study-Innovation Seminar
IoT 서비스 아키텍처 분석 및 Case Study-Innovation Seminar
 
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 

Semelhante a 라즈베리파이와자바스크립트로만드는 IoT

Ux discovery 5th rightbrain_part1
Ux discovery 5th rightbrain_part1Ux discovery 5th rightbrain_part1
Ux discovery 5th rightbrain_part1RightBrain inc.
 
UX discovery 7th rightbrain_part1
UX discovery 7th rightbrain_part1UX discovery 7th rightbrain_part1
UX discovery 7th rightbrain_part1RightBrain inc.
 
웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?
웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?
웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?yamoo9
 
Ux trend report 7월
Ux trend report 7월Ux trend report 7월
Ux trend report 7월RightBrain
 
Softbox arduino software education, softbox 소프트박스 제품소개서
Softbox arduino software education, softbox 소프트박스 제품소개서 Softbox arduino software education, softbox 소프트박스 제품소개서
Softbox arduino software education, softbox 소프트박스 제품소개서 봉조 김
 
Rightbrain - UX trend report - July, 2014
Rightbrain - UX trend report - July, 2014Rightbrain - UX trend report - July, 2014
Rightbrain - UX trend report - July, 2014RightBrain
 
음성인식 기반 홈IoT 제품서비스 동향 및 시사점 스마트홈산업협회 (순천향대학교 김학용 교수)
음성인식 기반 홈IoT 제품서비스 동향 및 시사점   스마트홈산업협회 (순천향대학교 김학용 교수)음성인식 기반 홈IoT 제품서비스 동향 및 시사점   스마트홈산업협회 (순천향대학교 김학용 교수)
음성인식 기반 홈IoT 제품서비스 동향 및 시사점 스마트홈산업협회 (순천향대학교 김학용 교수)Hakyong Kim
 
UX Discovery 6th Rightbrain_part2
UX Discovery 6th Rightbrain_part2UX Discovery 6th Rightbrain_part2
UX Discovery 6th Rightbrain_part2RightBrain inc.
 
LingoStar iPhone App Design Workshop
LingoStar iPhone App Design WorkshopLingoStar iPhone App Design Workshop
LingoStar iPhone App Design Workshop성관 윤
 
Rightbrain UX DISCOVERY 4th-part2
Rightbrain UX DISCOVERY 4th-part2Rightbrain UX DISCOVERY 4th-part2
Rightbrain UX DISCOVERY 4th-part2RightBrain inc.
 
Deren workshop final_opt
Deren workshop final_optDeren workshop final_opt
Deren workshop final_optJongHo Lee
 
O2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrain
O2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrainO2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrain
O2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrainRightBrain inc.
 
『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기복연 이
 
Softbox review and quickstartguide-20180926
Softbox review and quickstartguide-20180926Softbox review and quickstartguide-20180926
Softbox review and quickstartguide-20180926봉조 김
 
인공지능과 생활의 변화
인공지능과 생활의 변화인공지능과 생활의 변화
인공지능과 생활의 변화JeongHeon Lee
 
SK플래닛 M&C부문 D-spark #4 Make Movement
SK플래닛 M&C부문 D-spark #4 Make MovementSK플래닛 M&C부문 D-spark #4 Make Movement
SK플래닛 M&C부문 D-spark #4 Make MovementD:rink
 
UX Discovery 6th Rightbrain_part1
UX Discovery 6th Rightbrain_part1UX Discovery 6th Rightbrain_part1
UX Discovery 6th Rightbrain_part1RightBrain inc.
 
Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서
Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서
Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서봉조 김
 
My dream(ver2016)(nanheekim)
My dream(ver2016)(nanheekim)My dream(ver2016)(nanheekim)
My dream(ver2016)(nanheekim)Nanhee Kim
 
[IoT] MAKE with Open H/W + Node.JS - 5th
[IoT] MAKE with Open H/W + Node.JS - 5th[IoT] MAKE with Open H/W + Node.JS - 5th
[IoT] MAKE with Open H/W + Node.JS - 5thPark Jonggun
 

Semelhante a 라즈베리파이와자바스크립트로만드는 IoT (20)

Ux discovery 5th rightbrain_part1
Ux discovery 5th rightbrain_part1Ux discovery 5th rightbrain_part1
Ux discovery 5th rightbrain_part1
 
UX discovery 7th rightbrain_part1
UX discovery 7th rightbrain_part1UX discovery 7th rightbrain_part1
UX discovery 7th rightbrain_part1
 
웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?
웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?
웹표준화,대한민국 의식개선프로젝트-03 웹표준,접근성이란?
 
Ux trend report 7월
Ux trend report 7월Ux trend report 7월
Ux trend report 7월
 
Softbox arduino software education, softbox 소프트박스 제품소개서
Softbox arduino software education, softbox 소프트박스 제품소개서 Softbox arduino software education, softbox 소프트박스 제품소개서
Softbox arduino software education, softbox 소프트박스 제품소개서
 
Rightbrain - UX trend report - July, 2014
Rightbrain - UX trend report - July, 2014Rightbrain - UX trend report - July, 2014
Rightbrain - UX trend report - July, 2014
 
음성인식 기반 홈IoT 제품서비스 동향 및 시사점 스마트홈산업협회 (순천향대학교 김학용 교수)
음성인식 기반 홈IoT 제품서비스 동향 및 시사점   스마트홈산업협회 (순천향대학교 김학용 교수)음성인식 기반 홈IoT 제품서비스 동향 및 시사점   스마트홈산업협회 (순천향대학교 김학용 교수)
음성인식 기반 홈IoT 제품서비스 동향 및 시사점 스마트홈산업협회 (순천향대학교 김학용 교수)
 
UX Discovery 6th Rightbrain_part2
UX Discovery 6th Rightbrain_part2UX Discovery 6th Rightbrain_part2
UX Discovery 6th Rightbrain_part2
 
LingoStar iPhone App Design Workshop
LingoStar iPhone App Design WorkshopLingoStar iPhone App Design Workshop
LingoStar iPhone App Design Workshop
 
Rightbrain UX DISCOVERY 4th-part2
Rightbrain UX DISCOVERY 4th-part2Rightbrain UX DISCOVERY 4th-part2
Rightbrain UX DISCOVERY 4th-part2
 
Deren workshop final_opt
Deren workshop final_optDeren workshop final_opt
Deren workshop final_opt
 
O2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrain
O2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrainO2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrain
O2O 옴니채널 커머스를 위한 UX 최적화 방법과 사례 - RightBrain
 
『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기『임베디드 안드로이드』 - 미리보기
『임베디드 안드로이드』 - 미리보기
 
Softbox review and quickstartguide-20180926
Softbox review and quickstartguide-20180926Softbox review and quickstartguide-20180926
Softbox review and quickstartguide-20180926
 
인공지능과 생활의 변화
인공지능과 생활의 변화인공지능과 생활의 변화
인공지능과 생활의 변화
 
SK플래닛 M&C부문 D-spark #4 Make Movement
SK플래닛 M&C부문 D-spark #4 Make MovementSK플래닛 M&C부문 D-spark #4 Make Movement
SK플래닛 M&C부문 D-spark #4 Make Movement
 
UX Discovery 6th Rightbrain_part1
UX Discovery 6th Rightbrain_part1UX Discovery 6th Rightbrain_part1
UX Discovery 6th Rightbrain_part1
 
Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서
Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서
Aircleaner 20190616 - 미세먼지 공기청정기 메이커활동 제안서
 
My dream(ver2016)(nanheekim)
My dream(ver2016)(nanheekim)My dream(ver2016)(nanheekim)
My dream(ver2016)(nanheekim)
 
[IoT] MAKE with Open H/W + Node.JS - 5th
[IoT] MAKE with Open H/W + Node.JS - 5th[IoT] MAKE with Open H/W + Node.JS - 5th
[IoT] MAKE with Open H/W + Node.JS - 5th
 

Mais de Circulus

라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강Circulus
 
Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링Circulus
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Circulus
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Circulus
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
 
Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기Circulus
 
Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기Circulus
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 
123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기Circulus
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Circulus
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Circulus
 
123D Design - 화분 만들기
123D Design - 화분 만들기123D Design - 화분 만들기
123D Design - 화분 만들기Circulus
 
123D Design - 컵 만들기
123D Design - 컵 만들기123D Design - 컵 만들기
123D Design - 컵 만들기Circulus
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자Circulus
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초Circulus
 
123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링Circulus
 
JavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and RobotJavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and RobotCirculus
 
piBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOtpiBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOtCirculus
 
웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇Circulus
 

Mais de Circulus (20)

라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강라즈베리파이입문 - 연세대 특강
라즈베리파이입문 - 연세대 특강
 
Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링Startup 123D Design - 9. 강아지 모델링
Startup 123D Design - 9. 강아지 모델링
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기Startup 123D Design - 8.벤치 만들기
Startup 123D Design - 8.벤치 만들기
 
Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기Startup 123D Design - 7.물뿌리개 만들기
Startup 123D Design - 7.물뿌리개 만들기
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기123D Design - 전구 디자인 하기
123D Design - 전구 디자인 하기
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
123D Design - 화분 만들기
123D Design - 화분 만들기123D Design - 화분 만들기
123D Design - 화분 만들기
 
123D Design - 컵 만들기
123D Design - 컵 만들기123D Design - 컵 만들기
123D Design - 컵 만들기
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초
 
123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링123D Design - 스마트폰 케이스 모델링
123D Design - 스마트폰 케이스 모델링
 
JavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and RobotJavaScript Everywhere from Mobile and Robot
JavaScript Everywhere from Mobile and Robot
 
piBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOtpiBo- Personal Intelligent roBOt
piBo- Personal Intelligent roBOt
 
웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇웨어러블 디바이스를 활용한 개인용 지능형 로봇
웨어러블 디바이스를 활용한 개인용 지능형 로봇
 

라즈베리파이와자바스크립트로만드는 IoT

  • 1. ____________________________________________________ 라즈베리파이와 자바스크립트로 시작하는 IoT 원격 제어 LED 부터 소셜 오디오까지 __________________________________________________________
  • 2. 발간사 「라즈베리파이와 자바스크립트로 만드는 IoT」 한국과학창의재단 이사장님 발간사 2016 년은 그 어느 해보다 미래 사회의 변화를 체감하게 된 해로 기록될 것 같다. 1 월에 다보스포럼 주제는 ‘4 차 산업혁명의 이해’로, 정보통신기술 융합을 통해 모든 것이 연결되고 보다 지능화된 사회로의 변화가 눈앞에 와 있음을 강조했다. 그리고 3 월에는 우리 국민들에게 충격을 안겨 준 이세돌 9 단과 구글의 인공지능 ‘알파고’의 바둑 대국이 있었다. 바둑의 신이라 불리우는 이세돌 9 단이 컴퓨터에게 1:4 로 패배하는 장면을 전 세계가 목도했고, 이는 사회적으로 큰 반향을 불러 일으켰다. 다보스발 ‘제 4 차 산업혁명’과 서울발 ‘알파고 쇼크’로 시작된 우리 사회의 변화가 주는 의미는 무엇일까? 1940 년대 첫 다용도 디지털 컴퓨터 개발, 1970 년 초 개인용 컴퓨터 개발과 함께 컴퓨터는 우리 생활에서 없어서는 안 되는 필수품으로 자리 잡게 되었고, 산업분야는 2 차 산업혁명(대량생산)에서 컴퓨터를 통한 자동화인 3 차 산업혁명으로 발전하게 되었다. 3 차 산업혁명까지 우리가 알고 있던 컴퓨터는 인간의 지시에 의해 기능을 수행하는 편리한 도구였다면 4 차 산업혁명을 맞이하는 시점에서 알파고는 이러한 기존의 가치관을 완전히 파괴했다. 알파고는 이길 가능성이 있는 전략 여러 개를 컴퓨터가 스스로 분석해 성공 전략을 알아내는 기계학습방식이라는 참신하고 도전적인 접근방식을 선택한 개발자들에 의해 큰 성공을 거두었다. 이렇듯 4 차 산업혁명의 특징은 제품과 제조과정, 시스템의 지능화를 통해 기업이 고객의 특성에 맞는 맞춤형 제품을 제공하는 것이다. 그러나 우리가 주목해야할 사실은 4 차 산업혁명과 알파고도 결국 하사비스 박사와 같은 우수한 개발자에 의해 이루어졌다는 것이다. 이러한 맥락에서 프로그래밍, 디지털 사물과 밀접하게 대화하는 언어의 중요성은 그 어떠한 때보다 중요하다고 할 수 있다. 중세 시대 라틴어로 쓰인 성서를 읽을 줄 알았던 성직자가 그 시대를 이끌어 나갔듯이, 프로그래밍 언어로 자신의 아이디어를 현실로 만들어내는 프로그래머들이 제 4 차 산업혁명을 리드해 나가고 있다고 해도 과언이 아니다. 미국이나 영국 등에서는 프로그래밍을 영어, 중국어에 이어 제 3 의 언어로 생각하여, 이미 코딩 관련 소프트웨어 수업 등을 정규 과목으로 편성했다. 프로그래밍 언어를 습득하여 활용해 내는 것이 미래 인재로서의 핵심역량인 세상이 다가오고 있는 것이다. 디지털 환경을 태어나면서부터 생활처럼 사용하는 세대가 늘어나고 있는 만큼, 디지털 네이티브들의 프로그래밍 능력은 기존의 자작 문화, 즉 DIY(Do It Yourself)와 결합되어 메이커 운동(Maker Movement)라는 새로운 시대적 흐름을 만들어 내고 있다. 대규모 기업이나 공장 생산라인의 도움 없이도 자신이 생각하는 아이디어를 시제품으로 생산해내는 사람들이 생겨나고 있는 것이다. 이러한 메이커들이 탄생하게 된 계기에는 오픈소스 하드웨어와 소프트웨어의 공이 크다. 기존에는 관련
  • 3. 전공자들만 활용 가능했던 정보들이 공유되고 확산되면서 비전공자들도 시제품 제작에 쉽게 접근하여 자신의 아이디어를 물리적으로 구현해 내는 시대가 된 것이다. 모든 산업의 한계 생산 비용이 제로 수준으로 떨어지는 한계비용 제로 사회의 도래와 크라우드펀딩법 통과로 인해 국내에서도 메이커들이 자신이 만든 아이디어 시제품을 판매하고 사업화 할 수 있는 환경이 조성되고 있다. 과거에는 천편일률적인 제품만을 생산하고 사용했다면, 이제는 다품종 소량생산 체제로 더 넓은 시장을 충족하는 다양한 제품과 서비스를 만들어 낼 뿐 아니라 전 세계의 사용자로부터 평가 받고, 투자 받는 것이 가능해졌다. 페블이라는 스마트 워치 회사가 킥스타터에서 200 억 넘는 모금을 유치하여 사업화에 성공한 것이 그 대표적인 사례라고 할 수 있다. 이러한 시대적 흐름에 맞추어 한국과학창의재단은 아이디어와 상상력을 현실화하는 메이커 문화 확산에 힘쓰며 누구나 자신만의 창의적인 아이디어를 구현 할 수 있도록 다양한 사업을 통해 메이커 활동을 지원하고 있다. 실제로 이 책의 저자가 소속되어 있는 Circulus 팀은 재단이 추진한 ‘2015 우수메이커 활동 지원 사업’을 통해 개인용 지능형 로봇을 만들어 내었고, ‘2015 창조경제박람회’와 함께 개최된 ‘메이커 페스티벌’을 통해 그 성과를 세상에 알렸다. 또한 2015 대한민국과학창작대전을 통해 Circulus 팀은 소셜 오디오를 제작하였으며, 실제 이 제품은 크라우드펀딩을 통해 제품화 되었다. 메이커 학습 및 제작이 가능한 플랫폼(Circulus)을 구축하여 교육활동도 펼치고 있는 저자가 소셜 오디오의 성공 사례를 기반으로, 누구나 메이커가 될 수 있도록 그 제작과정을 오픈소스로 공유하여 책으로 접할 수 있도록 했다니 기쁜 일이다. 미국에서는 인구의 57%인 1 억 3500 만명이 스스로 메이커라고 생각한다는 조사 결과가 있다. 페블의 대표인 에릭 미기코브스키 뿐 아니라 애플의 스티브잡스와 워즈니악 또한 차고지에서 만들고 싶은 것을 만들던 메이커였다. 우리나라에서도 잠재력을 가진 개개인들이 다양한 아이디어를 시제품으로 구현해 내고 사업화 할 수 있는 환경이 더욱더 활성화되길 바라며, 이 책이 많은 사람들이 메이커 활동에 관심을 갖고 참여하는데 길잡이 역할이 되길 바란다.
  • 4. 목차 0. 시작하기 앞서 4p 1. 파이를 동작시켜 보자 - 초기설정 17p 2. 파이의 운영체제 - Linux 속성실습 33p 3. JavaScript 로 하드웨어 제어를 - Node.JS 57p 4. 거리 측정하고 정보 표시 하기 - GPIO 81p 5. 스마트폰으로 리모콘을 - jQueryMobile 119p 6. 인터넷으로 음악과 날씨를 - OpenAPI & RSS 137p 7. 오디오 소프트웨어 개발하기 153p 8. 외관을 생각대로 만들기 189p 9. 언제 어디서나 동작하는 IoT- Circulus 192p 10. 마무리 256p
  • 5. 0/시작하기 앞서 이 책의 집필 목적 생각만 있는 Thinker 에서 세상에 의미 있는 변화를 이끌고 직접 행동하는 Maker 가 되고자 하는 여러분들을 환영한다. 지금까지 우리는 전자 제품을 만든다고 하면, 구하기 힘든 장비, 비싼 가격, 납땜과 복잡한 프로그래밍 등 전문가만 할 수 있다는 인식을 가지고 있다. 한번 실수하면 큰 돈이 날라 가니 매우 조심스럽게 사용해야 했었다. 하지만 지금 이 순간 이런 비싼 장비들은 더 강력하면서 저렴한 가격으로 부품들을 구입할 수 있다. 더 쉽게 조립하고 손쉬운 프로그래밍으로 우리가 만들고자 하는 것을 마법처럼 눈앞에 보여 지도록 할 수 있는 시대를 살고 있다. 우리가 하고자 하는 것은 생각만 하는 것이 아닌 실제로 만들어 보는 것이며, 나 혼자만의 즐거움이 아닌 타인과 함께 공유하고 나눌 수 있는 멋진 제품이다. 더 이상 공장에서 붕어빵처럼 찍어 내고, 내가 원하는 기능이 없거나 필요 없는 기능에 불평하지 않아도 된다. 원하지 않는 디자인에 컬러의 제품을 돈을 주고 구입하는 시대는 끝났다. 직접 여러분의 손으로 직접 여러분이 실생활에 사용할 수 있는 제품을 만들 수 있도록 하고자 한다. 여자 친구를 위한 IoT 장비 처음 IoT 오디오를 만들게 된 계기는 필자의 경험을 통해서 나오게 된 것이다. 필자가 IT 업을 시작하고 나서 5 년간 지방과 해외 프로젝트로 떠돌았었다. 이 시기에는 불안정한 생활을 하다보니 여자친구를 만나도 떠도는 생활로 인하여 헤어지게 되는 경우가 많았는데, 지방이나 해외에 있어도 여자친구 곁에 있는 것 처럼 할 수 있는 방법은 없을까? 하여 처음 제작을 시도하게 되었다. 여자친구 곁에 IoT 오디오를 두어, 지방이나 해외에 있어도 음악 선물이나 음성 메시지, 알람 서비스를 보낼 수 있는 장치를 기획하였다. 삼성 그룹 해커톤에서 만든 초기 IoT 오디오, Flying Music 2014 년 삼성 그룹의 해커톤에 나가서 실제로 이 오디오를 만들어 냈다. 비슷한 경험을 가진 사람이 많아 좋은 호응을 얻을 수 있었다. 실제 효과도 있었다. 캐롤 송이 나오는 크리스마스 트리를 만들어 선물하여 사귀게 된 여자 친구. 거리가 떨어져 있어서, 실제로 오디오를 만들어
  • 6. 여자 친구 집에 두어서 활용하고 있다. 당신도 직접 만들어서 당신의 친구들과 가족들에게 선물해 볼 수 있다! 세상에 단 하나의 내가 만드는 오디오 [ 레이저 커터로 만든 초기 제작 모델 ] 지금까지 우리가 알고 있는 오디오는 기본적으로 사용자가 지정해 주는 파일이나 CD 등을 재생하는 장치였다. 우리는 기존의 오디오에서 할 수 없었던 사람과 사람을 이어 주는 감성적인 IoT 오디오를 만들어 볼 것이다. 물론 돈을 투자해서 파는 제품을 사면 어때 라는 생각을 할 수도 있다. 하지만 그 어떠한 제품에서도 제공해 줄 수 없는, 붕어빵 같은 전자 제품이나 기계가 아닌 세상에 단 하나의 오디오가 탄생할 것이다. 바쁜 당신을 기다리는 여자 친구를 감동 시킬 수 있는 IoT 오디오. 우리는 이 오디오에 다양한 하드웨어 및 소프트웨어 기술을 이용하여 우리가 지금까지 알고 있는 단순히 음악이 재생되는 장치에서 한 단계 수준을 끌어올리고자 한다. 기본 모델 - 탁상 시계 기능 - 스마트 폰 제어 - 음악 검색 / 다운로드 및 재생 - 시간 알람 기능 - 최신 가요 목록 확인 및 검색
  • 7. 우리가 하고자 하는 기본 모델만 있더라도 당신이 어디에 있던지 당신의 스마트 폰으로 여자 친구 집에 있는 오디오의 선곡을 통해, 음악을 선물할 수도 있다. 게다가 손 편지 대신에 당신의 마음이 담긴 메시지를 보내고 재생시킬 수 있다. 확장 모델 - 실 외에서의 원격 제어 - 헤드라인 뉴스 읽어 주기 - 오늘의 날씨 읽어 주기 - 메세지 전달 / 읽어 주기 - 현재 방안의 온 습도 알려주기 기본적인 기능을 만드는데 성공하였다면, 이 오디오에 좀더 재미난 기능들을 추가하고자 한다. 일단 인기가요 TOP10 을 곧바로 재생할 수 있는 기능을 제공한다. 알람 기능을 설정하여 설정한 음악을 재생할 수 있고, 오늘의 날씨, 주요 뉴스도 오디오로 제공받을 수 있도록 한다. 즉 아침 일어나는 시간에 알람과 동시에 오늘의 주요 정보를 들으면서 일어날 수 있는 것이다. 모바일 음성 인식을 통한 명령도 지원하여 편의성을 돕도록 한다. 이 책의 대상 독자 무언가 직접 만들어 보고, 만든 것이 나와 타인에게 도움을 주고자 하는 그 누구도 환영한다. 어떤 일이든 가장 중요한 것은 어떤 일이든 하고자 하는 의지와 뜻이라는 걸 우리는 잘 알고 있다. 우리는 이 책의 구성을 부품을 사고, 단계 별로 따라서 조립하고 화면에 코드를 입력하는 것으로 완성할 수 있도록 책을 구성하였다. 하지만, 여기서 하고자 하는 내용에 대해 기본 지식을 가지고 있다면 좀더 이해하면서 학습하는데 도움이 될 것이다. 다시 한번 말하지만, 당신의 의지가 있다면 아래 사항을 모른다고 해도 만들 수 있다! 바쁜 시간에 쫓기는 직장인 바쁜 시간에 쫓겨, 잦은 출장으로 여자 친구를 볼 수 없는 직장인 분들, 어린 시절을 떠올리며 무언가 만들어 보고 싶었지만 어디부터 시작해야 할지 모르는 분들이다. Making 에 대한 기초 지식을 빠르게 학습하고, 직접 오디오를 만들어 볼 수 있다. 무엇보다 이 오디오를 여자 친구에게 만들어 주어 바쁜 시간 속에서도 IoT 오디오를 통해 당신과 이어 주는 역할을 할 것이다. Making 에 관심 있는 대학생 Arduino 의 대중화에 따른 오픈 소스 하드웨어에 대한 인식의 확산으로 당신의 주변에는 이미 이러한 것들로 이것저것 만들어 보는 친구들이 많을 것이다. 당신이 대학생이라면, 직접 하드웨어 기반 Making 을 해 봄으로서, 소프트웨어와 하드웨어 그리고 서비스가 접목되는 방식을 이해하고 스타트 업이나 다양한 공모전에 당신만의 서비스와 아이디어를 이용하여 도전해 볼 수 있을 것이다.
  • 8. 컴퓨터 언어의 시대에 아이를 위한 학부모 2 년전 까지만 하더라도 프로그래밍 교육을 누구나 배우게 될 것이다 라고 하면 말도 안 되는 소리로 취급 받았으나, 이제는 누구나 배우는 시대가 되었다. 이러한 시대를 살아가는 아이들을 위해 본인이 직접 배우고 만듦으로써, 만든 제품을 아이와 함께 활용하고, 구성 원리를 알려 주고 더 나아가서는 아이와 함께 만들어 보는 과정 속에 컴퓨터의 원리를 파악 할 수 있도록 한다. 책에서 다룰 내용 라즈베리파이 오픈소스 하드웨어 하면 아두이노를 흔히 떠오르게 된다. 또한 우리가 선택할 수 있는 오픈소스 하드웨어가 다양하게 있다. 하지만 우리는 라즈베리파이를 이용하여 프로젝트를 진행하고자 한다. 라즈베리파이는 하드웨어를 제어할 수 있는 초 소형/초 저가의 컴퓨터이다. 우리는 이 먹음직스러운 파이로 실 생활에 도움이 되는 것을 만들어 볼 것이다. Linux 여러분이 사용하는 컴퓨터가 윈도우로 돌아가듯이, 라즈베리파이 또한 이러한 운영체제로 동작이 되며, 가장 많이 활용되는 것은 ‘라즈비안’ 이라고 불리우는 라즈베리파이를 위한 리눅스이다. 리눅스에 대해 A to Z 까지 다루는 것은 이 책의 범주를 벗어나는 것으로, 우리는 IoT 오디오 제작에 필요한 주요 리눅스 명령어와 관리 방법에 대해 다 JavaScript 우리는 이 오디오 프로젝트를 위하여 JavaScript 라는 언어를 사용할 것이다. 프로그래밍을 접해 본 경험이 있다면, 웹 페이지에서 Alert 창 띄우는 용도로나 쓰는 게 아닐까 하는 생각을 할 수 있다. 놀라지 마시라, 우리는 이 Web 을 위해 태어난 JavaScript 를 이용하여 모바일 웹은 물론 라즈베리파이를 우리 마음대로 요리할 수 있도록 도와 줄 것이다, 당신이 이 언어를 모른다고 해도, 핀란드어를 따라 친다는 심정으로 하면 마법처럼 화면에 보이고 당신이 조립한 장치가 동작이 될 것이다! 하지만 어느 정도 알고 있다면 더 큰 도움이 된다. NodeJS 라즈베리파이 오디오를 동작시키는 리모콘을 위해서도 JavaScript 를 이용하지만, 라즈베리파이에 탑재되는 하드웨어 제어 및 서버를 위해서도 JavaScript 가 활용된다. 이를 서버에서 가능케 하는 것이 NodeJS 이고, 이것에 대해서 간단하게 다루어 본다. 우리는 NodeJS 를 활용하여 라즈베리파이에 웹 서버를 구축하고, 연결되는 센서와 하드웨어를 제어해 볼 것이다. jQueryMobile
  • 9. 모바일 컨트롤러를 적은 노력으로 멋지게 만들 수 있는 jQueryMobile 프레임워크를 이용할 것이다. JavaScript 에서 가장 인기 있는 jQuery 기반의 모바일 프레임 워크로, 라즈베리파이와 유기적으로 연결된 모바일 웹을 만들게 될 것이다. Hardware Control 라즈베리파이에 LCD 를 연결하여 문자를 출력하고, 온습도 센서를 이용하여 현재 실내의 온습도 상황을 점검해 볼 것이며, 초음파 센서로 거리를 측정해 본다. OpenAPI 오디오 기능을 위해 음악 클라우드 서비스인 SoundCloud 의 개발자용 Open API 를 활용하여 원하는 음악을 검색하고, 검색 결과로부터 음원 다운로드를 하는 것을 실습해 볼 것이다. SoundCloud 가입 및 서비스 등록, JavaScript 용 API 활용까지 살펴 봄으로서, 사용자가 타 OpenAPI 연동 시에도 용이하게 할 수 있도록 한다. 부록 : 3D Printing 보기 좋은 음식이 맛이 있어 보이는 것과 같이, 우리가 만드는 하드웨어 역시 그러하다. 3D 모델링이라는 분야가 전문 분야 였지만, 쉽게 3D 모델링을 할 수 있는 프로그램인 123D Design 을 활용하여 간단하게 모델링을 배우고, 프린팅 하는 법을 알아볼 것이다. 메이커 세계로의 입문 이 책을 통해 여러분은 메이커의 세계로 입문할 수 있을 것이다. 메이커란 운동화 메이커의 메이커가 아닌, 자신의 생각을 직접 만들어 내는 사람들을 의미한다. 흔히 이전의 DIY(Do It Yourself) 에 IT 기술적인 부분이 결합된 것을 메이커라 이야기 하는 경우가 많다. 오바마 대통령이 백악관에서 메이커 행사를 열 만큼, 앞으로의 4 차 산업 혁명 시대에 중요한 역할을 담당하고 있는 문화가 메이커 문화이다. 여러분들도 이 책으로 말미 암아 여러분 만의 메이커 작품으로 , 메이커 페어에서 만나 보길 희망한다.
  • 10. 준비 물품 우리가 만들고자 하는 오디오를 위해 사용되는 재료들은 다음과 같다. 제작을 위한 필수 재료와 옵션이 존재하는데, 모니터 케이블이나 USB 키보드의 경우 이미, 그러한 장치가 있다면 구입하지 않아도 된다. 필수 구입 물품 라즈베리파이 라즈베리파이 오디오를 만들기 위한 핵심 Single Board 컴퓨터. 만일 당신이 자금의 여유가 있다면, 성능이 우월한 라즈베리파이 3 를 구입해도 된다. 하지만, 3 의 경우 전기소모가 많아 일반 2A 출력의 USB 어댑터로 제대로 동작할 수 없으므로, 좀더 저렴하면서도 쿼드코어로 충분한 성능을 제공하는 라즈베리파이 2 를 구입하는 것도 방법이다. 무선랜 유선 연결로만 라즈베리파이를 사용한다면, 필요하지 않지만, 어디에서나 사용할 수 있는 오디오를 위해서는 반드시 필요하다. 현재 가장 많이 사용되는 것은 N 스펙이다. 하지만 보다 빠르고 안정적인 속도를 위하여 N+ 스펙의 무선랜을 구입할 수도 있다. 만일, 라즈베리파이 3 를 보유하고 있다면, 이미 내장되어 있으므로 별도로 구매할 필요는 없다. 16GB MicroSD 카드
  • 11. 라즈베리파이의 저장장치로써 Linux 운영체제를 탑재하고, 각종 추가 Software 를 설치하기 위해서는 최소 8GB 이상의 용량을 추천한다. MicroSD 카드는 다양한 스펙이 존재하는데, Class 간에 가격의 차이가 크지 않다. 컴퓨터를 쾌적하게 쓰기 위해 하드디스크 대신 SSD 를 쓰듯이, 이왕 MicroSD 카드를 구입할 때 Class 10 이나 UHS-I 스펙을 사길 권장 한다. 종류 최소 속도 용도 Class 2 2 MB/s SD 영상 기록 Class 4 4 MB/s HD 영상 기록 Class 6 6 MB/s Full HD (1920x1080) 영상 기록 Class 10 10 MB/s 연속적인 HD 이미지 기록 UHS I 10 MB/s 실시간 방송 UHS III 30 MB/s Ultra HD 영상 기록 USB 스피커 실질적으로 음악소리를 듣기 위해서 필요한 장치이다. 일반 PC 용 스피커를 사용하면 무방하다. 물론 자체 전원을 사용하는 스피커를 이용할 수 있지만, USB 스피커를 이용하면, 라즈베리파이의 4 개의 USB 포트 중 하나를 전원 공급 용도로 활용하여 꽂아야 할 플러그를 줄여 구성을 간소화 할 수 있다.
  • 12. DHT11 (온습도 센서) 온습도 상황을 모니터링할 수 있는 쉽게 구할 수 있는 센서이다. 이 센서는 DHT11 과 DHT22 가 존재하는데, DHT22 센서가 값은 비싸지만 좀더 정밀한 온도와 습도 결과값을 보여준다. 실외나 정밀한 측정이 필요한 경우가 아니라면 DHT11 센서로도 충분한 측정 범위 값을 제공해 준다. 모델명 용도 온도 측정 범위 습도 측정 범위 DHT-11 실내용 0 ~ 50 도 20 ~ 80 % DHT-22 실외용 -40 ~ 80 도 0 ~ 100 % SR-04 (초음파 센서) 초음파가 발생되고 반사되는 시간을 계산하여 물체와 떨어져 있는 거리를 측정하는데 사용하는 센서이다.
  • 13. 7 Segment 4 Digit LCD 4 개의 숫자를 표시해 줄 수 있는 LCD 이다. 한 숫자를 7 개의 막대로 표현하여 7 Segment 라고 불리운다. 원칙적으로는 각각의 막대를 제어해야 하므로 많은 선이 필요로 하나, SPI 인터페이스를 위해 MAX7219 칩셋이 장착된 제품의 경우 5 개의 선으로 제어할 수 있다. 필히 SPI 인터페이스를 지원하는 제품을 구매하도록 하자. 점퍼 케이블 (Male-Male, Female-Male) 라즈베리파이와 브레드 보드, 센서와 부속을 연결할 때 사용되는 케이블이다. 브레드 보드에 꽂을 수 있도록 핀이 나온 것을 수컷(Male) 단자라고 하고, 핀이 있는 것을 연결할 수 있는 점퍼 케이블은 암컷(Female) 단자라고 한다. 라즈베리파이와 보드 연결, 부속 연결을 위해서는 암컷- 수컷(Female-Male) 단자와 수컷-수컷 (Male-Male) 단자가 필요하다.
  • 14. 선택 사항 DVI-to-HDMI 혹은 HDMI-to-HDMI (Option) 여러분의 라즈베리파이에 직접 모니터를 연결하여 사용하고자 할 때 필요한 케이블이다 라즈베리파이의 영상 출력단자는 기본적으로 HDMI 만 제공한다. 따라서 여러분이 가지고 있는 모니터의 단자가 DVI 를 지원하는지, HDMI 를 지원하는지에 따라서 필요한 케이블을 준비한다 마우스/키보드 세트(Option) 이 역시 라즈베리파이에 직접 연결하여 사용하고자 할 때 준비가 되어 있어야 한다. 윈도우와
  • 15. 같은 GUI 환경을 이용한다면 마우스가 필수적이지만, 일반 텍스트 Console 환경을 이용한다면, 키보드만으로도 충분하다. 우리가 실제 개발할 오디오는 원격으로 접속하여 사용하므로, 꼭 필요하지는 않다 구입처 IoT 오디오 프로젝트를 진행하기 위한 부품을 구입할 수 있는 방법은 다양하다. 사후 지원을 고려하고, 빠른 배송을 통해서 즉시 만들어서 사용을 해 보고자 한다면, 국내 판매 사로부터 구입할 수 있다. 하지만 배송 지연에 대해 느긋하고 사후 지원을 크게 고려하고 있지 않는 상황이라면 해외 직접 구매를 통하여 구입비를 대폭 낮출 수 있다. (다만 해외 배송은 경우에 따라서 1 달 넘게 소요될 수도 있다) 구입할 물품의 명을 정확하게 안다면, 국내는 네이버 쇼핑(http://shopping.naver.com), 해외는 알리 익스프레스(http://www.aliexpress.com)를 통해 검색해 보자. 일반 온라인 판매처 보다 더 저렴하게 구입할 수 있을 것이다. 정확한 명칭을 모른다면 전문 몰 사이트에 접속하여 다양한 부품들을 확인해 본 후 최저가를 산정하여 구입할 수 있다. 국내 온라인 구입처 디바이스 마트 http://www.devicemart.co.kr/ IC 뱅크 http://www.icbanq.com 엘레파츠 http://eleparts.co.kr/ 해외 온라인 구입처 엘레먼츠 14 http://www.element14.com RS 컴포넌트 http://www.rs-components.com 알리 익스프레스 http://www.aliexpress.com 연락 및 추가 정보 얻기 Making 및 프로그래밍 전파를 목적으로 Circulus 라는 팀을 결성하여 활동하고 있다. 이 책에서 나오는 내용에 대한 의문 점과 기타 Making 활동에 대한 문의 사항이 있다면, 다음의 페이스
  • 16. 북 그룹에 글을 남겨 주면 신속하게 답변을 줄 수 있도록 하겠다. 또한 Making 이나 프로그래밍과 관련된 기사들을 Facebook 페이지를 통해 공유하고 있다. 함께 관련 내용에 대해 의견을 나누고 토론할 수 있다. Circulus 그룹 http://group.circul.us Circulus 페이지 http://page.circul.us 이 책에서는 IoT 오디오를 만들기 위한 필수적인 내용을 위주로 다루고 있다. 충분하게 다루지 못한 내용들은 공유 슬라이드를 통해 다루고 있다. 책과 함께로 추가적으로 관련 자료를 학습하고 싶다면, 다음 내용을 참고할 수 있다. Lesson 1 - Introduction : IoT 개요, Opensource H/W, 라즈베리파이 기초 http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-1st Lesson 2 - Linux : Raspberry Pi 에서 리눅스 활용하기 http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-2nd Lesson 3 - Node.JS : Raspberry Pi 에서 Node.JS 로 프로그래밍 하기 http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-3rd Lesson 4 - Sensor : GPIO 를 Node.JS 로 동작시켜 센서 제어하기 http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-4th Lesson 5 - Project : Raspberry Pi 로 스마트폰 + 무선 IoT 오디오 제작 http://www.slideshare.net/rippertnt/iot-make-with-open-hw-nodejs-5th 또한, 여기서 다루는 프로그래밍 및 간단한 실습을 무료 Cloud Platform 인 Circulus 를 통하여 진행해 볼 수 있다. 실습한 코드 유실 위험이 없으며, 나의 작업 내용을 친구에게 공유하거나 타인의 코드를 복사하여 참고할 수 있다. 별첨에서 보다 상세하게 사용 방법에 대해 다루도록 하겠다. Circulus http://www.circul.us
  • 17. 1. 파이를 동작시켜 보자 – 초기 설정 라즈베리파이 운영체제 설치하기 라즈베리파이에서 선택할 수 있는 운영체제는 대양하다. 우리가 친숙한 윈도우 10 부터, 우분투 리눅스까지 10 여가지의 다양한 운영체제를 지원한다. (일부는 이러한 운영체제로 PC 대체로 사용하려고 하는 분이 있는데, 결코 PC 와 같은 환경을 기대해서는 안된다. 라즈베리파이가 강력하지만 100 만원짜리 PC 성능을 기대해서는 안된다.) 우리가 파이오를 만들기 위해 사용할 운영체제는 데비안 리눅스 기반으로 라즈베리파이에 최적화된 운영체제인 라즈비안(Raspbian) 을 선택할 것이다. 라즈비안 OS 는 라즈베리파이 초창기부터 현재까지 가장 많이 활용되고 있다, 이는 문제가 생겼을 때 남이 이미 겪었을 확률이 높아 해댕 정보를 검색하여 해결하기 용이하다는 것을 의미한다. 라즈비안은 라즈베리파이 공식 홈페이지에서 손쉽게 다운로드 받을 수 있다. 다음의 경로에 접속하여 라즈비안을 다운로드 받도록 한다. https://downloads.raspberrypi.org/raspbian_latest [그림] 컴퓨터로 쓸때는 일반 배포판, 메이커 키트로 이용할 때는 Lite 배포판을 이용하자
  • 18. info) 현재 라즈비안은 구 버전(wheezy) 와 신 버전(Jessie) 으로 제공이 되고, 신 버전도 일반 버전과 라이트 버전으로 제공되고 있다. 메이커를 위해서는 신 버전 라이트를 이용하면 불필요한 공간 낭비 없이 작업용으로 활용할 수 있다. 만일 윈도우와 같은 GUI 환경이 필요하다면, 일반 버전을 사용하도록 한다. 라즈베리파이 OS 의 이미지 파일을 다운로드 받은 이후, 라즈베리파이에서 사용하기 위해서는 이른바 "굽기"가 필요하다. 윈도우의 경우 Win32Diskimager 라는 프로그램을 이용하여 손쉽게 운영체제 이미지를 마이크로 SD 카드에 담을 수 있으나, 맥 OS 나 리눅스의 경우 터미널 환경에서 직접 명령어를 입력하여 이미지를 담아내야 한다. 다음과 같은 절차로 운영체제 이미지를 복사하자! One more thing - 라즈베리파이를 게임기로 만들기 라즈베리파이를 교육 혹은 IoT 제작 실습용으로 많이 사용하나, 미디어 플레이어 혹은 게임기로 만들어 사용하는 경우도 많다. 만일 게임기로 만들어 사용하고자 한다만, 에뮬레이터 게임에 최적화된 Recalbox 를 사용하는 것이 좋다. 게임에 맞게 최적화 되고, 조이스틱 연결을 지원할 뿐만 아니라, 닌텐도, 플레이스테이션, 네오지오 등 현존하는 다양한 에뮬레이터 게임을 지원한다. 자세한 내용은 www.recalbox.com 을 참고하도록 한다. 1.SD 카드 어댑터에 MicroSD 카드를 삽입한 후 맥의 카드리더에 삽입하자. Window
  • 19. 윈도우 에서는 간단하게 Win32Imager 를 이용할 수 있다. 다음의 주소에서 다운로드 받아서 설치하도록 한다. http://sourceforge.net/projects/win32diskimager/files/latest/download 다운로드 받은 최신의 라즈비안을 선택한 후 Write 버튼을 누르면, 마이크로 SD 카드에 기록이 된다. 완료 후에 라즈베리파이에 삽입하여 부팅이 정상적으로 이루어지는지 확인해 보자. Mac 2. Finder 에서 인식된 SD 카드 드라이브에서 마우스 우측으로 클릭하면 diskn 으로 (예시 disk4) 설정이 된걸 알수 있다. 이 정보를 기록해 두자. 3.터미널을 열어 다음 명령어를 입력하자 sudo dd bs=1m if=path_of_your_image.img of=/dev/rdiskn 명령어 실행에 실패한다면 rdisk 대신 disk 를 입력하도록 한다. sudo dd bs=1m if=path_of_your_image.img of=/dev/diskn Linux - 마이크로 SD 카드 삽입 후 다음 명령을 실해앟여 인식된 마이크로 SD 카드를 확인한다. $ df -h - 명령어 리스트 상에 인식된 내역을 확인한다 보통 ./devmmcblk0p1 이나 /dev/sdd1 의 형태로 인식된 것을 알수 있다. 인식된 sd 카드의 기록을 위해 mount 를 해제하는 다음 명령어를 실행한다. $ umount /dev/sdd1 - 기록을 수행하기 위하여 다음 명령어를 실행해 준다. $ dd bs=4M if=~/2012-12-16-...img of=/dev/sdd
  • 20. 첫 라즈베리파이 사용을 위한 기본 조립 운영체제를 준비했으니, 이제 라즈베리파이를 구동할 기본 준비가 되었다. 하지만 라즈베리파이 단독으로는 초기에 아무것도 할수가 없다. 마이크로 SD 카드를 라즈베리파이 후면 슬롯에 딸깍 소리가 나도록 삽입하고, 무선 USB 랜을 라즈베리파이의 USB 랜 포트에 설치하도록 한다. [그림] 구형 라즈베리파이 B (좌측하단) 는 SD 카드 형식으로, 라즈베리파이 B+ 이나 2B(좌측 상단) 은 Micro SD 형식으로 딸깍 소리가 날때가지 눌러 장착을 하나, 3B (우측)은 끝 부분까지 Micro SD 카드를 밀어 넣으면 된다. 라즈베리파이을 통해 개발하는 방법은 크게 2 가지로, 직접 라즈베리파이에 모니터, 키보드, 마우스를 직접 연결하여 개발하는 방법과 원격 구성으로 접속하여 개발하는 방법이 있다. 필자는 연결을 최소화 한 후자의 방법을 주로 선택하지만, 부팅시에 문제가 발생하거나 원격 연결이 어려운 경우, 그리고 GUI 환경으로 라즈베리파이를 활용하고자 할때는 직접 연결하여 사용해야 한다. 처음 라즈베리파이를 접하는 경우 GUI 를 통해 무선 설정을 하는 것이 용이하므로, 여기서는 초보자와 고급사용자를 위한 두가지 방법 모두를 다룰 것이다. GUI 를 통한 원격 연결 설정 처음 라즈베리파이를 사용하는 사용자를 위해 권장하는 방법으로, 마치 노트북 컴퓨터나 스마트 폰을 인터넷 연결하는 것과 유사한 방법이다. 라즈비안 일반 버전으로 이미지를 만들어 라즈베리파이를 부팅하면 다음과 같이 부팅된 화면을 발견할 수 있다.
  • 21. [그림] 라즈베리파이 부팅후 화면, 상단 우측 무선인터넷 항목을 클릭하면, 접속가능한 AP 목록을 발견할 수 있다. 부팅한 화면 우측 상단을 보면, 안테나 모양으로 PC 운영체제나 스마트 폰에서 보는 무선인터넷 연결 아이콘을 발견할 수 있는데, 해당 아이콘을 클릭하면 접속가능한 무선 AP 목록을 확인할 수 있다. 접속할 수 있는 무선 AP 를 선택한 후, 필요하다면 비밀번호를 입력하여 인터넷 연결을 수행하자. 연결이 완료되면 터미널 창을 열어, ifconfig 명령으로 무선인터넷에 연결된 IP 정보를 확인한다. 다음과 같이 정상적으로 IP 목록이 표시된다면, 앞으로는 원격접속을 통해 라즈베리파이를 제어하고 개발할 수 있다. [그림] 접속하고자 하는 AP 를 선택한 후, 필요하다면 비밀번호를 입력하자. 콘솔을 통한 원격 연결 설정 보다 어려운 접근 방법이지만, 라즈비안 Lite 버전을 설치한 경우 다음과 같은 방법으로 인터넷 연결 설정을 진행할 수 있다. 무선 인터넷 공유기와 라즈베리파이의 유선 랜을 서로 연결해 주도록 한다. 이는 PC 에서 원격으로 접속하여 개발할 때 사용하기 위함이다. 원격으로
  • 22. 접속하기 위해서는 라즈베리파이의 IP 를 확인해야 하는데, 접속된 공유기를 통해서 IP 를 알아낼 수 있다. 현재 내가 접속한 컴퓨터의 IP 를 알아내기 위해 ip 를 확인해 보자 윈도우 - ipconfig 리눅스 - ifconfig
  • 23. 맥 OS - ifconfig 내 IP 가 192.168.1.140 으로 되어있다면, 공유기의 IP 는 192.168.1.1. 이 된다. 차후 공유기 설정을 위하여 해당 IP 를 기록해 둔다. [그림] 라즈베리파이에 키보드와 모니터를 연결하여 부팅하자. 라즈베리파이에 키보드와 모니터를 연결하고, 운영체제를 설치한 MicroSD 카드가 장착되었는지 확인한 후, Micro USB 를 통해 전원을 공급해 보자. 라즈베리파이가 부팅되는
  • 24. 것을 확인할 수 있다. 부팅이 완료된 후, 로그인 ID 는 pi, 비밀번호는 raspberry 를 입력하여 로그인을 수행한다. 이제 IP 를 알아내서 무선환경에서 라즈베리파이를 작업할 수 있도록 수정해 볼 것이다. 콘솔창에 다음과 같은 명령을 입력하여 라즈베리파이의 IP 를 확인해 본다 $ ifconfig [그림] Eth0 에 나오는 inet addr 이 라즈베리파이의 유선 IP 주소이다. Ifconfig 명령 실행후 eth0 의 inet addr 값이 유선랜 IP 이다. 라즈베리파이에서 직접 작업해도 되지만, IP 를 알아냈으니 원격으로 설정 작업을 수행해 보자. 원격접속을 위해서는 터미널 프로그램이 필요하다. 리눅스나 맥 OS 의 경우 기본적으로 터미널 명령이 지원되나, 윈도우 XP 이후에 나온 버전 부터는 터미널이 지원되지 않아서, 터미널을 사용할 수 있도록 도와주는 프로그램을 별도로 설치해야 한다. 윈도우에서 많이 활용되는 무료 터미널 프로그램인 putty 를 이용하여 접속해 보도록 한다. putty 다운로드 - http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
  • 25. [그림] 라즈베리파이의 IP 를 입력한 후 Open 을 클릭하여 라즈베리파이의 터미널에 접속한다. 다운로드 받은 putty 를 실행하면 다음과 같은 입력창을 확인할 수 있다. 확인했던 IP 를 입력하고, Open 을 클릭하여 원격으로 라즈베리파이에 접속해 본다. 기본 사용자 계정은 pi, 비밀번호는 raspberry 를 입력하면 다음과 같은 로그인 성공 메세지를 확인할 수 있다. 라즈베리파이 부팅 성공을 축하한다. 이제 본격적으로 설정 및 개발을 진행해 보자. [그림] 부팅 후 원격 접속시 로그인 ID 는 pi, 비밀번호는 raspberry 를 입력해 주면 로그인 된다. One More Thing – 복잡한 OS 설정을 한번에 CirculOS 라즈베리파이를 무선으로 동작시키고 실제 개발을 하기 위해서는 앞으로도 다양한 설정을 해야 한다. 이러한 설정이 복잡하게 느껴진다면, 필자가 활동하는 커뮤니티인 Circulus 에서
  • 26. 제공하는 CirculOS 배포판을 이용하면, 복잡한 설정 필요 없이 곧바로 사용할 수 있도록 도와준다. CirculOS 를 사용하는 방법은 10 장에서 자세히 다룬다. 라즈베리파이 기본 설정하기 라즈베리파이에 운영체제를 설치한 후 그대로 사용하면 몇 가지 문제가 발생한다. 우선 SD 카드 전체 용량을 활용하지 못하며,, 우리가 만들 오디오 시간이 영국 기준 시간이 아닌 우리나라 시간에 맞추어 동작하게 된다. 몇 가지 기본 설정을 변경해 주어야 한다. $ sudo raspi-config 첫 번째 해야 할 일은 SD 카드 전체를 사용할 수 있게 해 주는 일이다. 1. Expand Filesystem 을 선택한 후 Enter 를 누르면, Root partition has been resized 라는 문구를 볼 수 있다. 재 부팅 후 정장적으로 반영되지만 몇 가지 작업을 위하여 다음 설정 화면으로 넘어가도록 한다.
  • 27. 두 번째 할 일은 기본 국가인 영국에서 한국으로 바꾸고, Timezone 을 서울로 바꾸는 일이다. 5. Internationalization Options 을 선택한 후 Enter 를 누른다. I1. Change Locale 에서 ko- Kr.UTF-8 로 한국 위치로 설정한다. 설정이 완료되면, I2. Change Timezone 에서 시간 대역을 Seoul 로 변경 하도록 한다.
  • 28. 마지막으로 할 일은 LCD 통신을 위한 SPI 를 Enable 로 설정한다. 9. Advanced Option 을 선택한 후, A6. SPI 항목을 선택한다. SPI 를 설정하겠냐는 응답에 Yes 를 선택한 후 Enter 를 누른다. 그러면, Would you like SPI kernel module to be loaded by default? 라는 메시지가 뜨게 되는데, Yes 를 선택한 후 Enter 를 누른다. 모든 설정을 마친 후, Finish 를 선택하고 Enter 를 누르면 Would you like to reboot now? 라는 메시지가 출력되는데, Yes 를 선택하여 재 부팅 함으로서, 설정한 작업이 반영되게 된다. 네트워크 설정하기 IoT 환경의 라즈베리파이를 사용하기 위하여 네트워크 설정이 필요하다. 기본적으로는 유선, 무선 모두 DHCP 연결을 통한 접속을 설정하여, 이후 별다른 설정 없이 인터넷 환경이 가능하게 할수 있다. 하지만, 우리가 현재 개발하고 있는 상황에서는 DHCP 를 이용하면 IP 가 수시로 바뀌어 원격접속시에 매번 IP 를 확인해야 하는 불편함이 있다. 개발 완료 이후에는 DHCP 를 이용할 수 있지만, 개발 시점에는 고정 IP 를 사용하도록 한다. WIFI 설정 라즈베리파이에서 어떤 WIFI 를 사용할 수 있는지 스캐닝 하기 위해 다음 명령어를 사용하자 $ sudo iwlist wlan0 scan iwlist 명령으로 접속가능 한 무선랜 목록을 확인할 수 있다. 명령어를 입력하면, 접속할 수 있는 AP 목록이 보여지게 된다. AP 명은 ESSID 인데, 전파 강도가 강한 순서대로 목록이 제공된다. 접속할 목록을 확인한 후 설정을 진행하도록 한다.
  • 29. $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf One more thing – Nano 에디터를 이용한 설정 편집 Nano 에디터는 리눅스에서 간단히 파일을 편집하는데 유용하다. 수정 후 CTRL-X 를 입력하고 Y 와 Enter 키를 누르면 저장이 완료된다. 보다 자세한 내용은 2 장에서 다룬다. 파일의 하단에 다음과 같이 입력하자 network = { ssid = "접속할 ESSID 명" psk="WIFI 패스워드" } CTRL+X 를 입력한 후 Y 입력하고 Enter 를 누르면 저장이 된다. 라즈베리파이를 재 부팅하면 자동으로 적용되지만, 재부팅 필요없이 연결을 확인하기 위해 다음 명령을 입력하자 $ sudo ifdown wlan0 $ sudo ifup wlan0 재 구동후 무선랜이 제대로 동작하는지 다음 명령어를 이용하여 확인한다. 아래 화면과 같이 IP 가 제대로 잡혀서 나온다면 정상적으로 동작하는 것이다. $ ifconfig wlan0
  • 30. wlan0 항목에 ip address 가 제대로 할당되어 있다면 정상적으로 접속된 것이다. 무선 인터넷 끊기지 않게 설정하기 라즈베리파이를 유선으로 연결하여 사용해도 되지만, IoT 컨셉의 제품이나 이동성이 좋은 시스템을 개발하기 위해 WiFi 를 이용하는것이 바람직 하다. 라즈베리파이 3 를 구매하였다면, WIFI 가 내장되어 있으므로 그대로 사용하면 된다. 단 기본 설정으로 절전 모드가 활성화 되어, 실제 사용시 원격 접속이 잘 안되거나 인터넷 연결이 수시로 비활성화와 활성화가 반복되어 개발시에 문제가 발생할 수 있다. 우선 iwconfig 로 절전 모드 상태를 확인하도록 한다. $ iwconfig [그림] Power Management 가 on 으로 되어있으면, 절전모드가 활성화 되어 있는 것이다. Power Management 가 on 으로 보여진다면, 절전 모드가 설정 된 것이다. 이를 비활성화 하기 위해서는 다음의 명령을 사용하도록 한다. $ iwconfig wlan0 power off
  • 31. [그림] power off 옵션을 사용하면, Power Management 설정이 off 가 된 것을 확인할 수 있다. 다시한번 iwconfig 로 확인해 보면, 절전 모드가 off 로 된 것을 확인할 수 있다. 이제는 원격 접속이나 인터넷 활용 서비스를 개발할 때에 안정적인 무선 인터넷 환경을 사용할 수 있게 되었다. 그러나 라즈베리파이를 재 부팅하면 다시 원래대로 되 돌아 가게 된다. 이를 방지하기 위해서는 상시적으로 무선 인터넷 설정에서 절전 모드를 해제해야 할 필요가 있다. 부팅 시에 구동 되는 무선 인터넷 관련 파일을 수정하여, 별도의 절전 모드 해제 명령 없이 자동으로 절전 모드를 해제할 수 있다. $ iw dev wlan0 set power_save off 만일 라즈베리파이 2B 이하의 WiFi 가 기본으로 장착되지 않은 기종을 구매하였다면, 추천되는 무선 USB 어댑터는 Realtek 사의 8188cu 를 이용한 무선 랜 카드이다. 시중에서 8188cu 기반으로 만들어진 구매할 수 있는 랜 카드는 다음과 같다. (제조사 사정에 따라 칩셋이 변동되는 사례가 있었다. 구매전에 다시한번 확인하길 바란다) EFM 네트웍스 – ipTIME M100mini Netis – Netis WF2120 유니콘정보시스템 – 유니콘 BW-150MINI One More Thing – 무선랜 카드를 8188cu 칩셋이 장착된 랜카드를 구입해야 하는 이유 아무 무선랜을 선택하면 안 되는 이유는 8188eu 의 경우 wheezy 버전의 라즈비안에서 문제가 발생하는 경우가 많았고,새 배포판인 jessie 에서는 드라이버 지원이 추가 되었다고 하지만, 필자가 직접 8188eu 기반의 무선랜을 사용했을 때 인터넷이 제대로 되지 않는 문제가 발견되었다. 따라서, 가급적이면 8188cu 기반의 무선 랜 카드를 구매할 것을 권장한다. 정상 적으로 무선랜 카드를 사용한다고 하더라도, WiFi 를 이용하여 라즈베리파이를 이용하다 보면, 인터넷 문제와 무관하게 종종 끊기는 현상이 발생한다. 대부분의 라즈베리파이 관련 책들은 연결하는 방법만 다루지 실제 이런 문제를 다루고 있지 않은데, 이러한 문제로 구현 및 구동에 있어서 큰 어려움을 겪게 되는 경우가 많다. 이는 라즈베리파이의 WiFi 드라이버에서 절전 모드 및 대기 모드로 동작되기 떄문에 발생하는 문제로, 이 기능을 disable 하여 WiFi 로 인하여 발생하는 문제를 최소화 할 수 있다.
  • 32. 8188cu 의 경우 상위 칩셋인 8192cu 와 호환이 되어 부팅시 8192cu 로 잡히게 된다. 절전 설정값이 어떻게 되어있는지 확인해 보는 명령어는 다음과 같다. $ cat /sys/module/8192cu/parameters/rtw_power_mgnt $ cat /sys/module/8188eu/parameters/rtw_power_mgnt 1 로 값이 설정되어 있다면, 절전 모드가 활성화 되어 있는 것이다. 이를 비활성화 하기 위해서는 다음의 설정 파일을 수정하도록 한다. $ sudo nano /etc/modprobe.d/8192cu.conf One More Thing – 8188 이 아닌 8192 라는 이름으로 설정 파일을 만드는 이유 랜카드 사용시 8188cu 계열의 랜카드를 사용하더라도 8192cu.conf 파일을 만들어야 한다. 8188cu 칩셋과 8192cu 호환이 되어, 라즈비안 상에서 8188cu 랜 카드의 경우도 8192cu 로 인식하기 때문이다. 8188eu 의 경우 인식은 되지만 정상적으로 동작이 안 되는 경우가 발생한다. 따라서 구입시 가급적 8188cu 칩셋이 탑재된 무선 랜 카드를 구입하도록 한다. 다음의 줄을 추가하고, CTRL+X 와 Y 를 누른후 Enter 를 누르면 저장이 된다. options 8192cu rtw_power_mgnt=0 rtw_enusbss=0 다음의 세부 설정 옵션은 다음과 같다.
  • 33. rtw_power_mgnt 0 - 절전 모드를 비 활성화 1 - 최소로 절전 기능을 수행함 2 - 최대로 절전 기능을 수행함 rtw_enusbss 0 - 대기 모드를 비 활성화 1 - 대기 모드를 활성화 함 Rtw_ips_mode 0 – 낮은 전원 1 – 높은 전원 무선 연결 설정이 완료되었다면, iwconfig 명령으로 정상적으로 무선랜이 활성화 되었는지 확인해 볼 수 있다. 절전 설정을 off 하지 않으면, 인터넷 연결이 수시로 끊길 수 있어 IoT 제품으로 만든 경우 정상적으로 동작하기 어려우며, 개발 시에 putty 를 통한 원격접속도 수시로 끊어지는 문제가 발생한다. 이제 유선으로 연결한 인터넷 선을 뽑고, 무선 환경으로 다시금 putty 로 접속하여 문제가 없는지 확인해 보자. 정상적으로 접속이 된다면, 이제 유선으로 연결할 필요 없이 개발을 진행하면 된다. 라즈베리파이와 파일 주고 받기 - FTP 설정하기 라즈베리파이를 사용할 때 내 컴퓨터에 있는 소스 코드나 파일들을 보내고 싶을 때도 있고 반대로 파일들을 받고자 할 때가 있을 것이다. 파일 공유를 가능하게 해 주는 삼바 서버를 라즈베리파이에 구축할 수 있으나, 우리는 가장 간단한 방법을 활용할 것이다. 별도의 설치 필요 없이 바로 활용 가능한 FTP(File Transfer Protocol) 을 활용하는 것이다. 파일 전송에 사용되는 FTP 프로그램 중 가장 인기 있는 프로그램은 FileZilla 이다. 한국어도 지원하므로, 설치 시에 한국어를 선택할 수 있다. 다음의 경로에서 다운로드 받아 설치하도록 한다. 다운로드 > https://filezilla-project.org/download.php?type=client FTP 접속을 할 때 호스트(Host) 에 라즈베리파이의 IP 주소를 입력하고, 사용자 명(U) 에 pi 를, 비밀번호(W) 는 raspberry (변경하였다면, 변경한 비밀번호를 입력해야 한다) 를 입력한다. 일반적인 FTP 접속에 사용되는 포트(P) 는 21 이나, 라즈베리파이와 사용되는 방식은 SFTP(Secure FTP)로 22 번 포트를 사용한다. 포트(P)에 22 를 입력하고 빠른 연결 버튼을 누르면, 정상적으로 FTP 연결이 성공한 것을 볼 수 있다. 왼쪽은 사용자가 사용하는 컴퓨터의
  • 34. 디렉토리 구조이고 오른쪽이 라즈베리파이의 디렉토리 구조이다. 복사 하거나 받고자 하는 파일을 드래그 앤 드랍으로 편리하게 파일을 주고받을 수 있다. [그림] FileZilla 를 활용하면, 파일을 드래드 앤 드랍으로 주고 받을 수 있다. One More Thing – 파일 복사 경로 라즈베리파이에 파일을 복사할 때 /home/pi 디렉토리나 해당 디렉토리의 하위 디렉토리를 생성하여 파일을 전송하도록 한다. 타 디렉토리에는 보안상의 이유로 파일을 전송할 수가 없다. 파일 전송을 시도하고자 하면 permission denied 라는 메시지와 함께 전송이 실패하는 것을 알 수 있다. 이번 장을 정리하며 첫 장에서 우리는 라즈베리파이를 사용할 수 있도록 OS 를 설치하고, 기본 환경 설정을 마무리 하였다. 무선 개발 및 IoT 서비스를 위해 무선 랜 환경을 구축하고 원격 접속 및 데이터를 주고 받을 수 있는 구성을 구축하였다. 라즈베리파이의 장점은 아두이노와 달리 리눅스 OS 가 탑재되어, 리눅스 생태계의 다양한 오픈소스를 그대로 활용하고 다양한 서비스를 구축할 수 있다는 점이다. 다음장에서는 라즈베리파이를 보다 깊이 있게 사용할 수 있도록 라즈베리파이의 리눅스에 대해 살펴보도록 하겠다.
  • 35. 2. 파이의 운영체제 - LINUX 속성 실습 리눅스란 무엇인가? Linux 는 일종의 운영체제 이다. 우리가 사용하는 컴퓨터나 스마트폰을 자유자재로 원활하게 사용할 수 있는 것은 우리와 컴퓨터 사이에 Window, Android, iOS 같은 운영체제가 있기 때문이다. 이러한 OS 덕분에 다양한 어플리케이션을 설치하여 다양한 용도로 활용할 수 있다. 리눅스는 핀란드 헬싱키대학의 대학원 생인 리누스 토발스가 취미 삼아 개발하였다. 개발하게 된 유래를 알게되면 재미난 점을 발견할 수 있다. 토발스는 원래 교육용 유닉스인 미닉스를 이용하고 있었는데, 미닉스를 함부로 개조하지 못하게 제한을 두자, 미닉스의 기능에 만족하지 못한 토발스는 직접 운영체제를 만든 것이다. 역사를 보면 무언가 비싸거나 어려운 것이 존재하면, 그 까짓거 내가 만든다는 생각의 위인들이 나타나 저렴한 가격에 쉽게 접할 수 있도록 나오는 현상을 많이 발견하게 된다. 오픈소스나 오픈소스 하드웨어가 그러하듯이 리눅스 역시도 그러한 제약을 벗어나고자 태어나게 된 것이다. [그림] 리눅스의 로고가 펭귄이 된 까닭은 원 저자가 오스트레일리아를 여행중 펭귄에 물린적이 있다고 한다. 펭귄에 물리면 펭귄 중독에 걸려 펭귄을 사랑한다는 속설이 있다. 왜 리눅스 인가? 아두이노와 달리 라즈베리파이는 운영체제가 지원된다. 이를 통해 모터가 돌아가고 LED 가 반짝하는 기능 뿐만 아니라 대화를 나누고, 뉴스와 날씨를 구독 받는등의 다양한 아이디어를 실제로 구현할 수 있는 것이다. 이러한 기능을 위해 사용하는 것이 바로 라즈베리파이에 올라가는 Linux 이다. 이미 Linux 생태계에서는 하드웨어 제어를 위한 오픈소스 부터 데이터 처리 및 분석에 대한 방대한 오픈 소스를 제공하고 있다. 일반 PC 에서 사용되는 Linux 가 그대로 라즈베리파이에 이식되어 있기 때문에, 라즈베리파이를 위해 특정 업체에 종속된 프로그래밍 언어나 개발 방식을 사용하지 않고, 기존 PC 환경에서 사용했던 내용들을 그대로 이용할 수 있는 장점이 있다. 다양한 리눅스가 존재하지만 우리는 Debian 계열의 라즈비안 리눅스를 사용하므로, Debian 배포판의 리눅스 사용법을 살펴보도록 할 것이다.
  • 36. [그림] 가장 많이 사랑받는 3 대 리눅스. Ubuntu 역시 debian 계열이다. 라즈리안 역시 debian 계열의 리눅스로 명령어가 가장 많이 사용되는 Ubuntu 리눅스와 유사하다. Linux 를 사용하기 위한 명령어 리눅스를 사용하는 방법은 크게 2 가지가 있다. 우리가 윈도우를 활용하는 것과 같은 그래픽 유저 인터페이스(GUI)를 이용하는 방법과, 영화에서 보아 왔던 명령어를 입력하는 방식이다. 윈도우 환경을 이용하는 것은 일반적인 PC 사용 환경을 다루는 것이므로 이 책에서 다루고자 하는 범위를 벗어난다. 여기에서는 라즈베리파이를 위해 오디오를 만들기 위하여 필요한 명령어들을 다루고자 한다. 리눅스의 양대 배포판인 데비안(Debian) 과 페도라(Fedora) 에 따라 일부 명령어가 약간은 차이가 발생하는데, 가장 인기 있는 리눅스 배포판인 우분투(Ubuntu) 리눅스와 마찬가지로, 라즈비안(Raspbian) 역시 데비안 기반으로 하고 있다. 우리는 데비안 리눅스의 기본 사용법에 대해 다룰 것이다. 명령어 구조 라즈베리파이를 콘솔로 부팅하면 프롬프트(prompt) 가 나타난다. 프롬프트는 사용자의 명령 입력을 기다리는 표시로서, pi 는 사용자 계정의 이름을 말하는 것이고, circulus 는 호스트 이름을 이야기 하는 것이다. [그림] 라즈비안에 처음 접속한 모습 명령 [옵션] [인자 값...] 명령
  • 37. 리눅스를 사용하기 위해 사용자가 입력하는 명령어 이다. 옵션 명령의 세부 기능을 선택할 수 있다. 옵션은 - 기호로 시작하며 영문 소문자나 대문자로 구성되어 있다. 명령에 따라 어떤 옵션이 있고 그 기능이 무엇인지는 해당 명령어에 따라 차이가 있다 (명령에 따라 옵션이 있을 수도 있고 없을 수 있다) 인자 인자는 명령으로 전달되는 값이며, 주로 파일명이나 디렉터리 명이 사용된다. 각 명령어에 따라 필요한 인자가 다르다 (명령에 따라 인자가 필요할 수도 있고 없을 수 있다) 기본 명령어 clear – 화면 지움 현재의 화면이 깨끗하게 지워지고 커서가 화면 왼쪽 상단에 위치한다 $ clear date - 현재 날짜와 시간을 출력 현재 시스템의 날짜와 시간을 출력하는 명령어 이다. $ date [그림] Locale 설정한 지역에 맞추어 시간이 표시된다. man - 명령어 사용법 안내 리눅스가 제공하는 각종 명령의 사용법을 보여준다. 명령의 옵션이나 인자값을 확인하고자 할때 유용하다. $ man clear sudo - 슈퍼 사용자 권한 일반적으로 사용자에게 생성된 기본 폴더 이외의 공간에서 명령을 수행하는 경우 관리자 권한이 필요하다.(이후 실제로 라즈베리파이에서 실습할 때 sudo 가 명령어 앞에서 쓰는 경우를 많이 발견하게 될 것이다) 관리자 권한으로 실행하기 위해 사용하고자 하는 명령어 앞에 sudo 를 입력 후 명령을 수행할 수 있다. $ sudo mkdir test 파일 디렉토리 명령
  • 38. 리눅스는 기본적으로 유닉스 계열의 운영체제 이므로 유닉스와 유사한 부분이 많다. 유닉스와 마찬가지로 리눅스도 시스템과 관련된 정보와 하드웨어의 장치를 모두 파일로 관리한다. 파일을 효과적으로 관리하기 위해 디렉터리, 윈도우에서는 폴더와 같은 구조가 사용되는데, 파일들을 용도에 따라서 계층적으로 관리한다. 디렉토리 용도 dev 장치 파일이 담긴 디렉터리 home 사용자 홈 디렉터리가 생성되는 디렉터리. 라즈베리파이 처음 부팅 시, 이 디렉터리의 pi 디렉터리가 기본 디렉터리가 된다. media CD-ROM 이나 USB 같으 외부 장치를 연결(마운트 라고 표현)하는 디렉터리 opt 추가 패키지가 설치되는 디렉터리 root root 계정의 홈 디렉터리이다. 루트(/) 디렉터리와 다른 것이므로 혼동하지 않도록 한다. sys 리눅스 커널과 관련된 파일이 있는 디렉터리 이다. usr 기본 실행 파일과 라이브러리 파일, 헤더 파일등 많은 파일이 있음. bin 실행파일(명령)을 가지고 있음 boot 부팅에 필요한 커널 파일을 가지고 있음 etc 리눅스 설정을 위한 각종 파일을 가지고 있음 lost+found 파일 시스템에 문제가 발생하여 복구할 경우 문제가 되는 파일이 저장되는 디렉토리. 보통은 비어 있음. mnt 파일 시스템을 임시로 마운트 하는 디렉터리 임 proc 프로세스 정보 등 커널 관련 정보가 저장되는 디렉터리 임 run 실행중인 서비스와 관련된 파일이 저장 됨 srv FTP 나 Web 등 시스템에서 제공되는 서비스의 데이터가 저장됨 tmp 시스템 사용 중에 발생하는 임시 데이터가 저장됨. 이 디렉토리의 파일은 시스템 재 시작시 모두 삭제 됨 var 시스템 운영중에 발생하는 데이터나 로그가 저장되는 디렉터리 pwd - 현재 위치를 확인 Print Working Directory 의 약자로서, 현재 디렉터리를 확인하는 명령이다 $ pwd cd - 디렉토리 변경 Change Directory 의 약자로서, 현재 디렉터리에서 다른 디렉터리로 이동할 때 사용하는 명령어 이다. $ cd [디렉토리 명] 실행 예 ROOT 디렉토리로 이동한다.
  • 39. $ cd / HOME 디렉토리로 이동한다. $ cd ~ HOME/PI 디렉토리로 이동한다. $ cd /home/pi [그림] cd 명령을 이용하여 디렉토리를 이동하고, pwd 명령으로 이동 위치를 확인할 수 있다. ls - 디렉토리 내부 확인 list 의 약자로서, 디렉토리 내부의 파일이나 하위 디렉토리 같은 정보를 보여주는 명령어 이다. $ ls [옵션]... [파일]... 옵션명 설명 -a 숨김 파일을 포함하여 모든 파일 목록을 표시함 -d 지정된 디렉터리 자체의 정보를 출력함 -F 파일 유형을 나타내는 기호를 파일명 끝에 표시 (디렉토리는 /, 실행파일은 *, 링크는 @가 나타남) -l 파일에 대한 상세 정보를 표시해 줌 -t 파일이 생성된 시간별로 표시 -C 한줄에 여러개의 정보를 함께 표시(기본설정) -R 하위 디렉토리 내용까지 표시 실행 예 현재 디렉토리의 정보를 확인한다. $ ls 파일에 대한 상세 목록을 확인한다. $ ls -l 숨김 파일을 포함하여 상세 목록을 확인한다. $ ls -al
  • 40. [그림] –C 옵션은 기본 적용된다. –l 옵션을 사용하면 보다 자세한 정보를 함께 확인할 수 있다. find - 파일 찾기 find 명령은 리눅스의 디렉터리 구조에서 특정 파일이 어디에 위치하고 있는지 찾아 주는 명령어 이다. $ find [경로] [검색 조건] 옵션명 설명 -name [파일이름] 파일 이름으로 검색함 실행 예 interfaces 라는 이름의 파일을 전체 검색한다. $ cd / $ sudo find –name interfaces [그림] Root (/) 디렉토리에서 검색을 하면, 모든 디렉토리를 전체 검색한다. cp/mv - 파일 복사 및 이동 Copy, Move 의 약자로서 특정 파일들을 이동시키거나 복사할 때 사용하는 명령어이다. $ mv [원본 파일 경로][대상 파일 경로] $ cp [원본 파일 경로][대상 파일 경로] 실행 예 /etc/network 디렉토리에 있는 interfaces 파일을 interfaces_bak 파일로 복사한다. $ sudo cp /etc/network/interfaces /etc/network/interfaces_bak
  • 41. /etc/network 디렉토리에 있는 interfaces_bak 파일을 interfaces 파일로 이동한다. $ sudo cp /etc/network/interfaces_bak /etc/network/interfaces [그림] cp 명령의 경우, 파일을 복사하지만, mv 를 사용하면 기존 파일이 사라진다. mkdir - 디렉토리 만들기 make directory 의 약자로써 새로운 디렉토리를 생성할때 사용 한다. $ mkdir [생성할 폴더명 또는 경로] 실행 예 현재 디렉토리에 test 라는 폴더를 생성한다. $ sudo mkdir test rm - 파일/디렉토리 삭제하기 remove 의 약자로써 기본 명령은 파일을 삭제할때 사용하지만 -r 옵션을 붙여 파일이 있는 디엑토리를 지울때도 사용할 수 있다. $ rm [옵션] [삭제할 경로] 옵션명 설명 -r 디렉터리를 삭제한다 -i Interactive 의 약자로, 삭제할 때 매번 삭제 여부를 사용자에게 묻는다. -f Force 의 약자로, 어떠한 확인 메시지도 묻지 않고 삭제를 수행한다. -v Verbose 의 약자로, 삭제하는 동안 정보를 상세하게 보여준다. 실행 예 현재 디렉토리에 있는 test.txt 파일을 삭제한다. $ sudo rm test.txt
  • 42. 현재 디렉토리에 test 라는 폴더를 삭제한다. $ sudo rm –r test 현재 디렉토리에 test 라는 폴더와 폴더내 파일도 함께 삭제한다. $ sudo rm –rf test 이정도 알면 리눅스 관리 어렵지 않아요! 시스템에 설치되어 있는 디스크와 메모리의 사용량을 확인할 필요가 있다. 우리가 최종적으로 만드는 라즈베리파이 오디오는 음악파일을 다운로드 받아서 재생하게 되는 구조이다. 라즈베리파이의 저장소 용량이 한정적이기 때문에 언제 꽉 차서 음악파일의 저장이 안될지 모르는 일이다. 또한 전원 방전이나 플러그를 뽑는 등 전원의 불안정, 소프트웨어 오류, 하드웨어 오동작 등으로 손상될 수 있다. 이렇게 손상된 파일 시스템 또한 점검하고 복구해야 할 필요가 있다. 여기서는 다양한 관리 명령을 살펴보도록 한다. df - 파일 시스템 별 사용량 확인 df 는 Disk Free 의 약자로, 현재 시스템에서 사용중인 파일시스템의 사용량에 대한 정보를 출력하는 명령어 이다. 부가적으로 전체 용량, 사용 가능한 용령 마운트 정보등도 함께 출력된다 $ df [옵션] [파일 시스템] 옵션명 설명 -a 모든 파일 시스템을 대상으로 디스크 사용량을 확인 -k 디스크 사용량을 KB 단위로 출력함 -m 디스크 사용량을 MB 단위로 출력함 -h Human 의 약자로, 디스크 사용량을 알기 쉬운 단위(GB, MB,KB 등)으로 출력함 -T 파일 시스템의 류도 출력함 실행 예 메가바이트(mb) 단위로 사용량을 확인한다. $ df -m 사람이 보기 좋은 단위로 사용량을 표시한다. $ df -h
  • 43. [그림] 디스크의 남은 공간을 확인할 때 df 명령에 –m (MB 단위) 을 지정하면 확인하기 수월하다. du - 디렉토리의 디스크 사용령 확인하기 du 는 Disk Usage 의 약자로, 파일 시스템별로 디스크 사용량을 알려주는 df 명령과는 달리 특정 디렉터리 별로 디스크의 사용량을 알려준다. $ du [옵션] [디렉토리] 옵션명 설명 -s 특정 디렉터리의 전체 사용량을 출력한다 -h 디스크의 사용량을 알기 쉬운 단위(GB,MB,KB 등으로 출력한다) 실행 예 메가바이트(mb) 단위로 사용량을 확인한다. $ du -s 사람이 보기 좋은 단위로 사용량을 표시한다. $ df -h fsck – 디스크 상태 검사 및 복구 fsck 는 File System Check 의 약자로, 디렉터리, 파일 링크등을 검사하고 필요시 복구 작업도 수행하는 명령어 이다. $ fsck [옵션] [장치명] 옵션명 설명 -f 강제로 점검한다. -y 모든 질문에 yes 로 대답하게 한다 -a 파일 시스템 검사에서 문제가 발생했을 때 자동으로 복구한다 실행 예 사용자에게 묻지 않고 자동으로 검색을 수행한다.
  • 44. $ sudo fsck - y 검사 중 문제 발견 시 자동으로 복구한다. $ sudo fsck -a Free – 사용가능 메모리 확인 Free 명령은 메모리 사용량을 확인하는 명령어이다. 정보를 보면 버퍼와 캐시가 있는데, 버퍼는 응용 프로그램별로 존재하는 임시 데이터 저장공간으로 이 데이터는 다른 응용 프로그램이 사용하지 않는다. 반면 캐시는 빠른 접근을 위해 자주 사용하는 데이터를 저장하는 메모리 공간이다. 캐시는 여러 번 사용될 수 있지만 버퍼는 한번만 사용한다. $ free [옵션] 옵션명 설명 -s 특정 디렉터리의 전체 사용량을 출력한다 -h 디스크의 사용량을 알기 쉬운 단위(GB,MB,KB 등으로 출력한다) 실행 예 메가바이트(mb) 단위로 사용량을 확인한다. $ du -s 사람이 보기 좋은 단위로 사용량을 표시한다. $ df –h lsusb List USB 의 약자로써, 연결된 USB 의 자세한 정보를 제공하는 명렁어 이다. 라즈베리파이에 다양한 USB 장치들을 연결하여 활용할 수 있는데, 해당 장치가 라즈베리파이에서 제대로 인식되는지 확인하는데 사용할 수 있다. $ lsusb [그림] lsusb 를 사용하면, USB 에 연결된 장치를 확인할 수 있다. 내부적으로는 1 개의 USB 포트를 허브로 5 개로 나누어 쓰고, 그 중 하나는 유선 이더넷에 포함되어 있다.
  • 45. 리눅스 시스템 종료 리눅스를 종료하는 방법을 살펴보자 윈도우를 사용하면 가끔 PC 가 동작을 멈추어서 전원을 껐다 켜는 상황이 발생한다. 이러한 경우 문제가 생겨 윈도우를 재 설치해야 하는 경우가 발생할 수 있고, 중요한 파일이 사라지기도 한다. 리눅스가 탑재된 라즈베리파이도 마찬가지로 시스템을 종료할때 정상 절차를 거치는 것이 매우 중요하다. 전원을 켜는 방법인 USB 전원 선을 연결하는 것처럼 종료하는 것을 선으로 뽑을 수 있으나, 잘못하면 여러분의 소중한 데이터가 날라가 버리게 된다. 여기서는 리눅스를 안전하게 종료하는 방법을 살펴보자 shutdown - 시스템 종료 리눅스 시스템을 정상적으로 종료하는 방법은 shutdown 명령을 사용하는것이다. shutdown 명령은 다른 시스템 종료 명령과는 달리 다양한 종료 방법과 옵션을 제공한다. $ shutdown [옵션] [시간] [메시지] 옵션명 설명 -h 시스템을 종료한다. -k 실제로 시스템을 종료하는 것이 아니라, 사용자들에게 메세지만 전달한다. -r 종료후 재 시작한다 -c 이전에 했던 shutdown 명령을 취소한다 실행 예 즉시 리눅스를 종료한다. $ sudo shutdown -h now ”System is going down” 이라는 메시지를 출력하고, 3 분뒤 종료한다. $ shutdown -r +3 "System is going down" reboot - 시스템 재 시작, halt/poweroff – 시스템 종료 shutdown 명령 외에 시스템을 재 시작하거나 종료하는 명령으로는 reboot 와 halt,poweroff 가 있다.halt 와 poweroff 명령도 내부적으로는 reboot 를 심볼릭 링크를 활용하여 이용한다. 이 명령들은 /var/log/wtmp 파일에 시스템 종료 기록을 남기고 시스템을 종료하거나 재 시작한다. 사용할 수 있는 옵션은 다음과 같다. 옵션명 설명 -w 실제로 재 시작하거나 종료하지 않지만 wtmp 파일에 기록을 남긴다. -f 강제로 명령을실행하며 shutdown 을 호출하지 않는다. -p 시스템의 전원을 끈다. -c 이전에 했던 shutdown 명령을 취소한다
  • 46. 실행 예 즉시 리눅스를 종료한다. $ sudo halt 즉시 리눅스를 재 부팅한다. $ sudo reboot 리눅스 프로세스 관리하기 라즈베리파이에서 리눅스를 실행하며 다량한 명령어를 배워보았다. 사용자가 실행한 명령은 프로세스가 되어 실행된다. 프로세스는 현재 실행 중인 프로그램을 의미하는 것으로, 시스템에는 사용자가 실행한 프로세스 외에도 사용자 관리, 메모리 관리, 네트워크 접속 관리등 다양한 기능을 실행하는 수많은 프로세스가 실행되고 있다. 일반적으로 사용하는 명령은 실행시간이 짧아 실행 후 바로 종료되기 때문에 짧은 시간 동안만 프로세스 상태를 유지하고 있다. ps 프로세스 목록 보기 Process 의 약자로서, 현재 실행중인 프로세스의 목록을 확인할 수 있다. $ ps [옵션] 옵션명 설명 -e 시스템에서 실행중인 모든 프로세스 정보를 출력 -f 프로세스의 자세한 정보를 출력 -u 특정 사용자에 대한 모든 프로세스 정보를 출력 -p PID(Process ID)로 지정된 특정 프로세스 정보를 출력 실행 예 실행중인 프로세스 정보를 상세하게 출력한다. $ ps -f 시스템에서 실행중인 모든 프로세스 정보를 보여준다. $ ps -ef [그림] 프로세스의 상태를 자세히 확인하기 위해서는 –f 옵션을 함께 사용한다.
  • 47. 실행중인 프로세스의 목록을 자세히 확인하기 위해서는 –f 옵션을 함께 사용해야 한다. –f 옵션을 사용하였을 때 세부적으로 나오는 정보는 다음과 같다. 항목 설명 UID 프로세스를 실행한 사용자 ID PID 프로세스 번호 PPID 부모 프로세스 번호 C CPU 사용량 (%값) STIME 프로세스의 시작 날짜와 시간 TTY 프로세스가 실행된 터미널의 종류와 번호 TIME 프로세스의 실행 시간 CMD 실행되고 있는 프로그램의 이름 grep - 특정 프로세스 정보 검색하기 ps 명령만 사용하면, 모든 프로세스 목록이 모두 보이기 때문에, 특정 프로세스의 상태를 확인하기 어렵다. 라즈베리파이에서 본인이 실행시킨 특정 프로세스를 확인해 보고자 할 때가 있다. 이러한 경우는 ps 와 grep 명령어를 조합하여 사용할 수 있다. $ ps -ef | grep [명령] 실행 예 node 라는 이름을 가지고 있는 프로세스를 상세하게 확인한다. $ ps –ef | grep node [그림] grep 으로 현재 동작되는 프로세스 중 특정 프로세스를 찾는 방법이다. 여기서 마지막 줄은 grep 자기 자신이 나오는 것이므로, 현 화면에서 실제로 node 라는 이름으로 동작되는 것은 2 개의 프로세스 이다. 특정 프로세스 정보 검색하기 pgrep pgrep 은 ps 와 grep 을 하나로 통합하여 만든 명령어 이다. ps 와 달리 지정한 패턴과 일치하는 프로세스의 정보를 간략하게 출력한다. $ pgrep [옵션] [패턴] 옵션 설명
  • 48. -x 패턴과 정확히 일치하는 프로세스의 정보를 출력 함 -n 패턴을 포함하고 있는 가장 최근의 프로세스 정보를 출력한다 -u 사용자 이름 : 특정 사용자에 대한 모든 프로세스를 출력한다 -l PID 와 프로세스의 이름을 출력한다 -t [TERM] 특정 단말기와 관련된 프로세스의 정보를 출력한다 kill,pkill - 프로세스 종료하기 응답이 없거나 불필요한 프로세스를 종료하려면 해당 프로세스의 PID 를 알아야 한다. 앞에서 배운 ps 나 pgrep 명령으로 정보를 확인한 후 kill 이나 pkill 명령을 이용하여 프로세스를 종료한다. kill 인자로 지정한 프로세스에 시그널을 전달한다. $ kill [시그널] pid 시그널 설명 -2 인터럽트 시그널을 보낸다 (CTRL+C 와 같은 효과) -9 프로세스를 강제로 종료한다 -15 프로세스가 관련된 파일을 정리하고 프로세스를 종료한다. 프로세스가 종료되지 않을 수도 있다. 실행 예 프로세스 ID 가 2419 인 프로세스를 강제로 종료한다. $ sudo kill -9 2419 [그림] kill 명령으로 2419 프로세스를 종료한 후 다시 ps 명령으로 확인하면, 프로세스가 종료되었음을 확인할 수 있다. pkill
  • 49. Process Kill 의 약자로, kill 명령과 같이 시그널을 보내는데, pid 가 아니라 프로세스의 명령 이름(CMD)로 프로세스를 찾아 종료한다. kill 명령어와의 차이점은, 명령이름으로 찾아 종료하므로 여러개가 한번에 종료될 수 있다는 점이다. $ pkill [옵션][패턴] 옵션 설명 -2 지정한 패턴을 명령어 뿐만 아니라 경로명, 옵션, 인자값도 비교 -9 패턴과 일치하는 프로세스의 가장 최근에 실행된 프로세스 하나만 종료 -15 패턴과 정확하게 일치되는 프로세스만 출력 실행 예 node 라는 이름을 가지는 프로세스를 강제로 종료한다. $ sudo pkill node [그림] pkill 을 이용해 이름으로 프로세스를 종료하면, 여러 프로세스를 한번에 종료하는데 유용하다. top 프로세스 관리도구 ps 명령으로는 현재 프로세스 목록을 확인할 수 있다. top 명령은 현재 실행중인 프로세스 정보를 주기적으로 출력하는데, 프로세스의 요약 정보를 상단에 출력하고 각 프로세스의 정보를 하단에 출력한다. $ top
  • 50. 항목 설명 PID 프로세스 id USER 사용자 계정 PR 우선순위 NI NICE 값 VIRT 프로세스가 사용하는 가상 메모리 크기 RES 프로세스가 사용하는 메모리 크기 SHR 프로세스가 사용하는 공유 메모리 크기 %CPU CPU 사용량 %MEM 메모리 사용량 TIME+ CPU 누적 이용시간 COMMAND 명령 이름 동시에 여러가지 작업을 수행해 보자 백그라운드 작업 사용자가 터미널에서 보통 작업을 할때 한번에 하나만 실행이 가능하다. 이는 새로운 명령을 실행하기 위해서는 이전에 실행했던 명령이 끝날때까지 기다렸다가 사용해야 함을 의미한다. 하지만 상황에 따라 여러가지 명령을 한번에 실행해야 하는 경우가 있다. 이럴때 작업을 제어하는 명령을 사용하면 유용하다. 포그라운드 작업
  • 51. 일반적으로 명령어를 입력하면 컴퓨터는 사용자가 입력한 명령을 해석하고 실행하여 그 결과를 출력한다. 사용자는 화면에 출력된 결과를 보고 다시 명령을 입력하는 컴퓨터와 대화하는 방식으로 작업을 수행한다. 이러한 방식을 Forground Process 라고 한다. $ sleep 100 ->sleep 명령이 끝날때까지 기다려야 한다 백그라운드 작업 & 포그라운드 작업은 명령을 한번에 하나씩 실행하므로 동시에 여러개를 실행할 수 없는 문제가 있다. 이럴때 이전과 같이 포그라운드 작업을 진행하게 되면 다른 작업을 실행할 수 없다. 이럴 때 백그라운드로 실행하면 포그라운드에서는 다른 작업을 수행할 수 있다. 백그라운드 작업은 명령의 실행시간이 많이 걸리는 작업을 수행하거나 다른 명령을 동시에 실행하고 자 할때 사용한다. 명령을 수행하기 위해서는 마지막에 & 기호를 붙이면 된다. $ sleep 100 & 작업목록 보기 jobs 현재 실행중인 백그라운드 작업을 볼수 있는 명령어로 모든 백그라운드 작업을 보여준다. 특정 번호를 지정하면 해당 작업의 정보만 보여준다. $ jobs [옵션] 옵션 설명 -l 프로세스 번호를 추가하여 보여준다. 작업 전환하기 포그라운드로 동작중인 서비스를 제어할 수 있다. 옵션 설명 CTRL+Z 또는 stop [%작업번호] 포그라운드로 작업을 잠시 중지한다. bg [%작업번호] 작업번호가 지시하는 작업을 백그라운드로 작업을 전환한다 fg [%작업 번호] 작업번호가 지시하는 작업을 포그라운드 작업으로 전환한다. 작업 종료하기 CTRL + C 포그라운드 작업을 종료할때 CTRL + C 를 이용하면 종료가 된다. 백그라운드 작업은 kill 명령으로 강제 종료해야 한다. kill 명령의 인자로 %작업 번호를 지정하면종료 된다. $ sleep 100 & $ kill %1 로그 아웃 후에도 백그라운드 작업 계속하기 nohup
  • 52. 백그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던 백그라운드 작업도 종료된다. 하지만 터미널이 종료되도 작업이 완료될때까지 종료되지 말아야 하는 상황이 있는데, 이때 nohup 명령을 사용한다 $ nohup [명령] & 패키지 관리하기 드디어 운영체제가 탑재된 라즈베리파이를 강력하게 사용할 수 있는 패키지 관리 기능이다. 아두이노와 달리 라즈베리파이는 리눅스 기반이기 떄문에 수 많은 소프트웨어를 손쉽게 설치하여 사용할 수 있다. 직접 프로그래밍하지 않더라도 이를 통해 이미 만들어진 다양한 소프트웨어로 다양한 기능을 발휘하도록 할 수 있다. 이러한 소프트웨어는 소스코드 자체로 제공되어서 수동으로 컴파일하여 설치하는 방식이 있고, 바이너리 패키지로 배포되어 설치하여 사용할 수 있는 형태가 있다. 여기에서는 패키지로 관리되는 다양한 소프트웨어를 손쉽게 설치하는 방법을 다룰 것이다. 패키지의 특징 - 바이너리 파일로 되어 컴파일을 할 필요가 없다. - 패키지의 파일들이 관련 디렉터리로 바로 설치된다. - 패키지를 삭제할 때 관련된 파일을 일괄적으로 삭제할 수 있다. - 기존에 설치한 패키지를 삭제하지 않고 바로 업그레이드 할 수 있다. - 패키지의 설치 상태를 검증할 수 있다. - 패키지에 대한 정보를 제공한다. - 해당 패키지와 의존성을 가지고 있는 패키지가 무엇인지 알려준다. 따라서 의존성이 있는 패키지를 미리 설치할 수 있고, apt-get 명령을 사용하면 의존성이 있는 패키지가 자동으로 설치된다 패키지의 이름구성 파일명_버전-리버전_아키텍쳐.deb 항목 설명 파일명 패키지의 성격을 나타내는 파일명이다. 패키지 버전 두 번째 항목은 패키지의 버전을 의미한다. 패키지 리비전 리비전은 원래 소스의 버전이 업그레이드 되지는 않았지만 패키지의 보안. 아키텍쳐 사용하는 시스템 아키텍쳐로 i386 은 인텔을, all 은 시스템과 상관없는 문서나 스크립트 등을 의미함. 라즈베리파이는 ARM CPU 이므로 arm 으로 시작하는 명칭이 붙는다. 확장자 우분투 패키지의 확장자는 .deb 를 사용한다.
  • 53. apt-get 소프트웨어 패키지들이 저장된 저장소를 업데이트하고 패키지를 설치하거나 제거하는데 사용하는 명령이다. $ agt-get [옵션] [서브 명령] 옵션 설명 -d 패키지를 내려받기만 한다. -f 의존성이 깨진 패키지를 수정하려고 시도한다. -h 간단한 도움말을 출력한다. 서브명령 설명 update 패키지 저장소에서 새로운 패키지 정보를 가져온다. upgrade 현재 설치되어 있는 패키지를 업그레이드 한다. install [패키지] 패키지를 설치한다. remove [패키지] 패키지를 삭제한다. download [패키지] 패키지를 현재 디렉토리에 내려 받는다. autoclean 불완전하게 내려 받았거나 오래된 패키지를 삭제한다. clean 캐시되어 있는 모든 패키지를 삭제하여 디스크 공간을 확보한다. check 의존성이 깨진 패키지를 삭제한다. 사용 예 Linux 패키지 정보를 갱신하여, 설치된 모든 패키지를 업데이트 한다. $ sudo apt-get update $sudo apt-get upgrade MP3 재생 패키지인 mpg321 을 자동으로 설치한다. $ sudo agt-get install mpg321 –y MP3 재생 패키지인 mpg321 을 삭제한다. 상황에 따라 사용자 확인을 받는다. $ sudo apt-get remove mpg321
  • 54. [그림] 패키지 설치/삭제시 자동 진행을 위해서 –y 옵션을 사용할 수 있다. 패키지 수동 관리하기 - dpkg apt-get 도 내부적으로는 dpkg 를 사용한다. 시스템의 특정 파일이 어느 패키지에 속한 것인지를 확인 하는 기능 등 보다 세부적인 기능을 제공한다. Deb 확장자로 시작하는 패키지를 직접 받은 경우 이를 설치하고 제거하는데 사용할 수 있다. $ dpkg [옵션] [파일명 또는 패키지 명] 서브명령 설명 -l 설치된 패키지의 목록을 출력한다. -l [패키지] 패키지의 설치 상태를 출력한다. -I [DEB 파일] 해당 파일을 설치한다 (sudo) -r [패키지] 해당 패키지를 삭제한다 (sudo) -P [패키지] 해당 패키지와 설정 정보를 모두 삭제한다 (sudo) 사용 예 NODEJS 를 다운로드 받은 후 설치한다. $ sudo wget http://node-arm.herokuapp.com/node_latest_armhf.deb $ sudo dpkg –I node_latest_armhf.deb NODEJS 를 설치 정보와 함께 삭제한다. $ sudo dpkg –r -P node_latest_armhf.deb
  • 55. 심플하고 쉬운 텍스트 에디터 - Nano 리눅스 상에서 문서 편집을 위해 흔히 많이 이용되는 것은 VI 편집기이다. GUI 환경이라면, GEDIT 를 이용할 수 있지만, Linux 는 콘솔이나 터미널 환경에서 많이 이용하기 때문에 대안을 찾아야 한다. vi 의 경우 UNIX 시절부터 이어 내려오는 편집기로 강력한 기느와 다양한 명령을 제공하지만, 처음 접하는 사람들에게는 어렵다. 터미널 환경에서 GEdit 처럼 간단하게 활용할 수 있는 것은 nano 이다. Nano 의 특징 사용하기 쉽다는 점이다. VI 는 키보드 방향으로 커서를 이동할 수 없지만 나노는 커서를 이동할 수 있고, VI 가 편ㅈㅂ과 입력 모드가 나뉘어 있지만 나노는 GUI 환경과 윳하게 사용할 수 있도록 되어 있다. 또한 아래 부분에는 단축키도 표시해 주므로 손쉽게 사용할 수 있다. 전문적인 사용에는 VI 가 탁월하지만 대부분의 일들이 간단한 경우가 많기 때문에 나노로 충분히 처리할 수 있다. 가장 기본적으로 사용하는 방법은, 방향키를 이용하여, 수정이 필요한 위치로 이동하여, 원하는 내용으로 입력한 후 CTRL + X 를 누르고, 저장하겠냐는 질문에 Y 를 입력한 후 Enter 를 클릭하여 저장하고 종료하는 방식이다. 보다 다양한 기능이 필요한 경우 다음 하단의 단축키를 활용하도록 하자. $ sudo nano /etc/rc.local l 단축키 기능
  • 56. CTRL+G / F1 나노 에디터 사용법(도움말)을 확인할 수 있음 CTRL+X / F2 나노 에디터 종료. 저장하지 않았을 경우 저장할지 여부를 물음 CTRL+O / F3 현재 작성중인 파일 저장 CTRL+W / F6 현재 문서에서 검색. 검색중 정규식 검색모드로 전환하려면 ALT+R 을 누르면 됨 CTRL + ^ ALT+R 문자열을 검색하여 내용을바꿈 ALT+W 이전에 검색했던 검색 결과를 반복 CTRL+R / F4 파일 불러오기. 현재 편집중인 문서에 다른 문서의 내용을 삽입 하는 동작. 불러온 파일의 내용을 변경할수 없음. 나노에서 편 집 중 다른 파일을 불러오려면 나노를 종료하고 명령을 다시 실행해야 함 CTRL+Y / F7 이전 페이지로 이동하는기능, 키보드의 Page Up 키로도 사용 가능 CTRL+V / F8 다음 페이지로 이동하는 기능, 키보드의 Page Down 키로 사용 가능 ALT+ M 문서의 맨 처음으로 이동 함 ALT + M? 문서의 맨 끝으로 이동함 CTRL+SHIFT+^ 혹은 ALT+G 특정 행을 입력하여 특정 행으로 이동할 수 있음 ALT+SHIFT+M / ALT+SHIFT +M ? 현재 행을 들여쓰거나 내어 씀 CTRL + J 한 줄이 현재 터미널의 폭을 벗어날 정도로 긴 행을 폭에 맞추어 정렬 함 이번 장을 정리하며 이번 장에서는 라즈베리파이의 리눅스를 다루는 법을 다루었다. 기본적인 명령어를 다루고, 시스템을 간단하게 모니터링 하는 법을 배웠으며, 리눅스 생태계의 다양한 패키지들을 설치하는 방법을 실습해 보았다. 여기서 배운 텍스트 에디트는 앞으로 설정 편집이나 간단한 프로그래밍에서 유용하게 사용되니, 잘 기억해두도록 한다. 다음 장에서는 본격적으로 자바스크립트를 이용한 NodeJS 프로그래밍에 대해 다룬다. 운영체제가 올라간 라즈베리파이에 직접 웹 어플리케이션 서버를 자바스크립트로 작성하여 활용해 볼 것이다.
  • 57. 3. JavaScript 로 하드웨어 제어를 - NodeJS 세상에서 가장 인기 있는 언어 - Javascript 아직도 자바스크립트가 웹에서 간단히 입력 값을 검사하는 프로그래밍 언으로 생각하는가? 생각을 바꾸어야 할 것이다. 자바스크립트는 이제 세상에서 가장 인기 있는 프로그래밍 언어가 되었다. Github 의 프로젝트 중에 자바스크립트로 구현된 프로젝트가 가장 많고, 해커톤에서 사용되는 가장 인기 있는 프로그래밍 언어가 자바스크립트 이다. 천덕꾸러기 신세였던 자바스크립트는 2005 년 구글로 부터 시작된 Ajax 혁명으로 인하여 보다 중요한 프로그램을 작성하기 위한 언어로 부각되기 시작했다. HTML5 의 부각과 다양해 지는 단말, 다양한 자바스크립트 프레임워크등으로 자바스크립트의 인기는 더욱 높아질 전망이다. [그림] GITHUB 에서 가장 인기 있는 언어는 단연 JavaScript 이다 JavaScript 로 서버와 라즈베리파이 제어를! - NodeJS? NodeJS 는 오픈소스로 공개된 Chrome 브라우저의 자바스크립트 실행 엔진(V8 이라 불리운다)을 기반으로 제작되었다. 확장성 있고 빠르게 어플리케이션을 개발할 수 있도록 도와주는 플랫폼이다. 즉, NodeJS 로 인하여 자바스크립트로 웹 페이지 개발 뿐만 아니라 서버나 하드웨어 제어 용도로도 사용할 수 있다는 의미이다. 이벤트 처리 기반과 Non-Blocking IO 를 이용하여 분산된 Device 상에서 실시간 데이터 통신을 하는 어플리케이션에 최적화되어 있고 경량의 효율적인 프레임 워크이다. 비동기식 이벤트 처리기반 프레임워크로, 확장가능한 네트워크 어플리케이션 개발에 맞추어 디자인 되어 있다.
  • 58. 쓰레드 기반의 네트워킹은 사용하기 어렵고, 데드락 현상으로 시스템 성능이 저하된다는 단점이 있는 반면, NodeJS 는 이벤트 기반으로 block 이 될 일이 없어, 비 전문가도 확장 가능한 시스템을 개발하는데 용이하다는 장점이 있다. [그림] NodeJS 도 결국 JavaScript 로 되어 있다. JavaScript 만 알면, 모바일 어플리케이션부터 서버, 데이터 분석, 하드웨어 제어 그 모든 것이 가능한 현 시대에 가장 활용성 높은 프로그래밍 언어이다. 왜 Javascipt 기반으로 하는가 - NodeJS 의 이점 NodeJS 가 만능은 아니고, 상황에 따라 더 좋은 성능을 보여 주는 언어도 많다. 상당수의 라즈베리파이 관련 예제와 책자들이 파이썬(Python) 으로 구현되어 있는데, 유일하게 이 책에서 JavaScript 로 모든 프로그램을 구성한 것이 의아해 할 것이다. 구현하고자 하는 아이디어가 있을 때 이를 단 한가지 언어로만 만든다고 하면 현재 선택할 수 있는 최선의 언어이다. 필자 역시 전자공학을 전공하고, 회사 일로 C 나 Java 와 같은 언어를 주로 사용하였지만, 메이크 활동을 위해서는 자바스크립트 만을 사용한다. 왜 자바스크립트, NodeJS 를 사용하는지에 대한 이유는 다음과 같다. - 개발자는 하나의 언어로 웹 어플리케이션 부터 IoT 하드웨어까지 개발할 수 있기 때문에 서버와 클라이언트, 모바일 부터 하드웨어 제어까지 넘나드는 비용을 획기적으로 줄일 수 있다. 또한 한 곳에서 제작된 코드는 다양한 플랫폼을 넘나들며 그대로 이용될 수 있어 유지 보수를 매우 간단하게 해준다. 심지어 간단한 데이터 분석 또한 NodeJS 에서 처리할 수 있다. - JSON (JavaScript Object Notation)은 XML 을 넘어서 현재 가장 보편적인 데이터 교환 포맷인데, Javascript 기반을 두고 있어 손쉬운 데이터 처리가 가능하다. - Javascript 는 CouchDB, MongoDB 와 같은 NoSQL 데이터베이스에서 사용되는 언어로 상호작용하기에 아주 적합하다. 몽고디비의 쉘과 질의언어가 자바스크립트이며, Client, Server, DB 까지 동일한 JSON 형식으로 데이터를 사용하기 때문에 데이터 처리가 매우 용이하다. 또한 데이터 분석 및 처리용도로 사용되는 엘리스틱 서치 (Elasticsearch) 또한 JSON 형태로 데이터를 활용할 수 있어 매우 편리하다. - Node 가 사용되는 v8 가상 머신은 ECMAScript 표준을 준수하여, Javascript 의 모든 새로운 기능을 즉시 확인해 볼 수 있다.
  • 59. Hello Pi! – NodeJS 설치하기 라즈베리파이에서 NodeJS 를 설치하는 기본적인 방법은 직접 소스코드를 컴파일해서 사용하는 것이다. 하지만, 더 간단한 방법으로 이미 배포판으로 만들어진 설치파일을 받아서 바로 설치하는 것이다. 우리는 배포 판을 받고, 2 장 리눅스 시간에서 다룬 dpkg 명령을 이용하여 NodeJS 를 설치해 보고, Hello Pi 를 작성하여 확인해 보도록 한다. 우선 배포 파일을 wget 명령으로 다운로드 받고, dpkg 명령으로 설치하도록 한다. $ sudo wget http://node-arm.herokuapp.com/node_latest_armhf.deb $ sudo dpkg –I node_latest_armhf.deb NodeJS 가 정상적으로 설치되었는지 확인하기 위해서 설치된 NodeJS 버전을 확인해 본다. $ node –v 버전이 제대로 확인이 된다면 node 를 입력하여 실행한다. Python 과 유사하게 작성한 코드를 실행할 수도 인터프리터 모드에서 하나씩 입력해서 동작을 확인해 볼 수도 있다. 다음과 같은 코드를 입력하여 Hello Pi 가 정상적으로 출력되는지 확인한다. 정상적으로 화면에 출력된다면, 간단한 연산을 수행하여 우리의 프로그램이 정상적으로 동작하는지 확인해 본다. 2 개의 메모리 공간에 숫자를 넣고 이를 더한 결과 값을 제대로 보여 주는 지 확인하는 예제이다. (원래 컴퓨터가 전자계산기에서 출발했다는 것을 생각하자) [그림] NodeJS 버전 확인 및 NodeJS 인터프리터 모드에서 코드를 작성하여 실행하는 예시 console.log('Hello Pi!'); var a = 10; var b = 5; console.log(a + b);
  • 60. 프로그래밍 방식 선택하기 – Nano vs Sublime Text 우리는 라즈베리파이를 메이커 보드로 사용하기 위하여 별도의 GUI 구성을 하지 않고 텍스트들만이 난무하는 콘솔 환경에서 사용하고 있다. 첫 Hello Pi 예제와 같이 인터프리터 모드에서 하나씩 입력해 가면서 실행할 수도 있겠지만, 코드의 길이가 길어지면, 이렇게 하나씩 입력하는 방식으로는 프로그램 수정이나 공유가 어려울 있다. 따라서, 코드를 별도로 작성한 후 그 코드를 실행하는 방식을 대부분 사용한다. 이 라즈베리파이에서 NodeJS 코드를 작성하기 위해서는 Nano 를 이용하여 직접 작성하거나, 당신이 사용하고 있는 컴퓨터에서 작성한 다음, 파일을 FTP 로 전송하여 실행하는 방법이 있을 것이다. (Circulus 를 사용하면 이런 복잡한 문제가 해결되는데, 부록에서 다루도록 하겠다) 우선 첫 번째 실행한 예제를 Nano 로 작성한 후 실행해 보도록 한다. 작성이 완료되면 CTRL+X 를 누르면, 저장하겠냐고 묻는데, Y 를 누르고 엔터를 두번 눌러 주면 저장이 완료된다. $ sudo nano sample1.js 저장된 sample1.js 를 실행해 볼 차례이다. NODE 명령어 뒤에 간단히 파일명만 입력하는 것으로 실행이 되고, 결과가 화면에 보여지게 된다. $ node sample1.js
  • 61. [그림] 실행 결과가 인터프리터에 직접 입력한 것 과 동일하게 정상적으로 출력되는 것을 확인할 수 있다. 아무래도, 윈도우나 스마트 폰을 사용하던 환경에서 마우스 없이 직접 입력해서 프로그래밍 하는 것은 쉽지 않은 일이다. 좀더 편리하게 컴퓨터에서 자바스크립트 코드를 작성하는 경우, 사랑 받는 프로그램 중 하나가 Sublime Text 이다. 무료 버전을 사용하면 저장 시에 가끔씩 구매해 달라는 팝업이 뜨는 것 이외에 기능 제약이 없는 프로그램이다. Sublime Text 를 사용하고자 하면 다음의 주소에서 다운로드 받도록 한다. 다운로드 주소 > http://www.sublimetext.com/3 [그림] Sublime Text 3 는 강력하며 빠르고, 게다가 무료이다. Sublime Text 에서 저장된 코드를 FTP 로 라즈베리파이에 옮긴 후, 실행하게 되면 동일한 결과를 확인할 수 있다. 자바스크립트로 프로그래밍 시작하기 자바스크립트는 타 프로그래밍 언어에 비해 자유도가 높은 언어로 알려져 있다. 사용하기 쉬워 하는 프로그래머와 어려워 하는 프로그래머로 나뉜다. 여기서는 모바일과 하드웨어 제작을 위해, 기본적인 자바스크립트 사용법을 다룬다.
  • 62. 기본 연산자 자바스크립트를 이용하여 연산 할 때 사용하는 문법으로, 숫자 형인지 문자형인지에 따라 결과값이 달라진다. 증가연산자의 위치에 따라서 실행 전과 후의 결과 값이 달라지는 것을 확인하자. [ js1.js ] // 숫자를 더한 값을 출력한다. console.log(100 + 1); // 문자와 숫자를 더한 값을 출력한다. console.log('100' + 1); var a = 10; // a 에 저장된 숫자값을 연산하여 출력한다. console.log(a + 1); console.log(a); console.log(a++); console.log(a); console.log(++a); console.log(a); 증가연산자가 뒤에 있는 경우 (a++) 곧바로 출력시 값이 변경되지 않지만, 그 이후에 값을 출력시에 1 이 증가됨을 알수 있다. 반대로 앞에 있는 경우(++a), 이미 1 이 증가된 상태로 값이 출력됨을 알수 있다. [그림] 숫자와 문자의 덧셈 연산의 결과가 다르다. 비교 연산자 비교 연산자는 좌변과 우변의 값을 비교하여 그 결과를 반환하는 문법이다. 이항 비교연산자인 ==, != 은 값만을 비교하나, 삼항 비교연산자인 ===, !== 은 데이터 형태도 비교하므로, 예기치 못한 동작을 방지하기 위해서 삼항 연산자를 사용하는 것이 바람직 하다. [ js2.js ] // 이항 연산자로 비교한 값을 출력한다. console.log(1 == true); console.log(1 == '1'); // 삼항 연산자로 비교한 값을 출력한다. console.log(1 === true);
  • 63. console.log(1 === '1'); // x 값을 비교하여 true 이면 bigger 를 false 면 smaller 를 출력한다. var x = 90; console.log((x > 90) ? 'bigger':'smaller'); 이항 연산자와 달리 삼항 비교 연산자는 값이 동일하지 않은 경우 false 로 비교 값이 반환됨을 확인할 수 있다. 이후 if 조건문을 다루겠지만, ? 을 이용하여 한줄로 비교 작업을 간단하게 할 수 있음을 확인하도록 한다. [그림] 삼항 연산자는 데이터 형태도 비교한다. 논리 연산자 논리 연산자는 복수의 조건 식을 비교하여 최종적으로 그 값이 true 인지, false 인지를 반환한다. 앞에서 살펴본 비교 연산자를 사용하여 사용하며, 조합을 통해 복잡한 조건식을 표현할 수 있다. [ js3.js ] var x = 1; var y = 2; // 좌항과 우항이 둘다 true 일때 true 가 출력된다. console.log(x == 1 && y == 1); // 좌항과 우항중 하나만 true 이면 true 가 출력된다. console.log(x == 1 || y == 1); && 의 경우, and 연산을 하여 좌항과 우항의 값이 모두 true 일 경우 true 를 반환하지만, || 의 경우는 or 연산을 하여 좌항과 우항 중 한 개만 true 인 경우 true 값을 반환한다. [그림] 한 개만 조건을 만족하는 경우는 or(||) 연산을, 모든 조건을 만족해야 하는 경우는 and(&&) 연산을 사용하도록 한다. IF 조건문
  • 64. 여러가지 상황에서 조건에 따라 이에 대응하는 명령을 실행할 수 있다. If 단독으로 사용할 수 있지만, else if 와 else 등으로 세분화 하여 분기할 수 있다. [ js4.js ] var x = 15; // 30보다 같거나 크면 Bigger than 30 이 출력된다. if( x >= 30){ console.log('Bigger than 30'); // 30보다 작고 10보다 크면, Bigger than 10 이 출력된다. } else if ( x > 10) { console.log('Bigger than 10'); // 10보다 값이 작으면 Smaller than 10 이 출력된다. } else { console.log('Smaller than 10'); } 첫번째 조건을 만족하지 못하고, 두번째 else if 조건을 만족하여 해당 결과를 반환함을 알 수 있다. 이처럼 중첩을 통해 다양한 조건에 따라 분기하여 원하는 명령을 수행할 수 있다. [그림] 입력한 조건 값을 비교하여, 원하는 작업으로 분기할 수 있다. SWITCH 조건문 동일 변수에 대한 비교시 사용할 수 있는 조건문으로, case 블록에 해당하는 값이 존재시 해당 블록 명령을 실행하고, 만족하는 case 가 없는 경우 default 블록을 호출하는 직관적인 구조를 가지고 있다. [ js5.js ] var rank = 'B'; // rank 에 저장된 값에 따라 출력된다. switch(rank){ case 'A': console.log('A Rank'); break; case 'B': console.log('B Rank'); break; case 'C': console.log('C Rank'); break; default: console.log('Not ranked'); }
  • 65. if 조건문이 다양한 조건 식을 넣을 수 있는 반면, 값 비교에 따른 분기는 switch 조건문이 보다 명확하게 흐름이 식별된다. Break 문을 빼게 되면, 그 다음의 case 명령 값도 실행되게 되니 주의하도록 한다. [ 그림 ] 단순 값 비교에는 IF 비교문 보다 SWITCH 비교문이 명확하다. WHILE 반복문 주어진 조건에 따라 반복 처리하고자 하는 경우 사용하는 명령어이다. [ js6.js ] var x = 0; // x 가 5보다 작을 때 괄호 안 명령이 계속적으로 수행된다. while(x < 5){ console.log('X is ' + x); x++; } 예제 프로그램은 x 값이 5 보다 작을 경우, x 값을 출력해 주고, x 값을 1 씩 증가하는 코드이다. 4 까지 증가되는 값을 반복 출력하고, 종료 됨을 확인할 수 있다. [ 그림 ] 조건에 따른 반복을 수행할 경우, while 문을 사용한다. FOR 반복문 정해진 횟수만큼 반복 처리하기 하기 위해 사용하는 명령어 이다. 일반적인 경우 for 명령을 사용하지만, 지정된 배열이나 객체에서 선두부터 반복 처리하기 위해서는 for in 명령을 사용한다. [ js7.js ] var obj = { key1 : 'Pi', key2 : 'Raspberry', key3 : 'NodeJS'}; var arr = ['Pi','Raspberry','NodeJS']; // obj 객체에 있는 키 값이 있을 때 까지 반복한다. for(var key in obj){ console.log(key + ' : ' + obj[key]); }