System Compleat.

'YZCerberos'에 해당되는 글 231건

  1. BeagleBone rolling start 1
  2. When Arduino meet JavaScript
  3. Arduino
  4. Beagle Board
  5. Rules and Scalability 2

BeagleBone rolling start

Techs
( younjin.jeong@gmail.com, 정윤진 ) 

이번주에 배송이 완료된 BeagleBone 을 오늘에서야 올려 볼 수 있게 되었다. 이 귀여운 보드에는 완벽히 동작하는 리눅스가 Factory Default 로 올려져 있으며, 필요한 경우 안드로이드나 우분투 등 원하는 대로 별도의 OS 를 올리는 것이 가능하다.

귀요미_케이스

 
BeagleBone 을 구매하면 위와 같이 귀여운 케이스와 USB케이블, 그리고 Kingston MicroSD 아답터와 Linux SDK 가 들어있는 MicroSD 가 함께 배송된다. $89 주제에 내용물도 푸짐하다. BeagleBone 외에도 Beagle Board C4 도 함께 주문했는데, C4의 경우에는 별도로 추가된 패키지가 전혀 없다. 기대하지 말자. 

귀요미_보드

 
허접해 보이는 케이스는 보드를 보관하기 꼭 알맞은 사이즈로 되어 있다. 필요하다면 아래에 스펀지 등을 넣어 보호 할 수도 있겠지만, 어차피 내부에 전원 등이 포함되어 있지 않으므로 쇼트가 나지는 않겠지 하는 생각에 그냥 들고 다닌다. ㅋ 
 

연결!!!

 

보드를 처음 노트북과 연결하면, 뭐 별다른 일이 일어나지는 않는다. 만약 맥에서 BeagleBone 을 연결했다면, 사용중인 맥의 버전에 따라 한방에 잘 될 수도, 아니면 시작부터 고생길이 열릴 가능성도 있다. 

일단, 개발용 랩탑과 BeagleBone 은 처음에 USB 연결만 있으면 된다. 5V 의 전원은 USB를 통해 공급받으므로 전원에 대해 당장 걱정할 필요도 없다. Mac OSX Leopard 이상의 시스템에 연결 한 경우, 다음과 같은 내용을 확인 할 수 있다.

BeagleBone Mount

 
처음 연결하고 BeagleBone 이 준비가 되면 위와 같이 시스템에 마운트 되며, 안에는 몇가지의 내용이 들어있다. 이들 중 처음에 제일 중요한 것은 Drivers 디렉토리인데, 맥이건 윈도우용이건 BeagleBoard 의 접근을 위해 반드시 설치 해 주어야 한다. 단!, 한가지 조심 할 것은, 사용중인 맥이 32bit 인가 64bit 인가에 따라 보드에 포함된 파일의 사용 여부가 결정 된다는 것이다. 보드에 포함된 드라이버는 32bit 용이며, 따라서 현재 사용중인 시스템이 64bit 인 경우에는 다음의 링크에서 드라이버를 다운로드 받아 설치하도록 하자.

http://www.ftdichip.com/Drivers/VCP.htm 

내가 사용중인 맥은 Leopard 였던 시스템을 Lion 으로 업그레이드 한 것인데, 별 이상없이 잘 동작했다. 다만 준호형의 맥은 구매 할 때부터 Lion 이었는데, 정상적으로 보드와 연결되지 않는 현상이 발생했다. 아직 해결하지는 못했지만, 조만간 처리 될 것으로 생각된다.

아무튼 OS 가 32인지 64비트인지 잘 확인하고, 가장 최신버전의 Virtual COM Port 드라이버를 설치하도록 하자.
설치가 완료 된 이후 정상적인 경우라면 /dev/tty.usb 로 시작하는 장치명을 확인 할 수 있을 것이다. 하지만 필자의 경우에는 해당 장치가 나타나지 않았는데, 어쨌든 사용에 이상이 없으므로 무시했다. 문제의 해결을 위해서는 다음의 구글 그룹 페이지를 참고하도록 한다.

http://groups.google.com/group/beagleboard/browse_thread/thread/80a42d16976907a9/de2ad27d8bfeb2de 

/dev/tty.usbserial 장치가 나타나지 않더라도, 시스템 환경 설정의 네트워크 부분을 살펴보면 정상적인 경우 다음과 같은 새로운 인터페이스의 확인이 가능하다.

RNDIS/Ethernet Gadget Int.

 
위의 그림처럼 나타난다면, 이제 보드에 접속이 가능하다.  위의 그림처럼 새로운 인터페이스가 나타나지 않는다면, 다음의 커맨드를 맥에서 실행 해 보자. 


sudo kextutil FTDIUSBSerialDriver.kext -v
위의 커맨드는 USBSerial 드라이버를 로드 하도록 한다. 또는 시스템을 재부팅 해도 된다. 이렇게 드라이버를 로드한 후에 인터페이스가 정상적으로 나타 남에도 불구하고 잘 동작하지 않는다면, Finder 에서 마운트 되어있는 BeagleBone 을 마운트 해제하고 잠시 기다려 보도록 하자. 이후에 정상적으로 192.168.7.2 와 ping 을 주고 받을 수 있다면 모든 준비가 완료 된 것이다.

계정은 root 이며, 패스워드는 없다. 그냥 엔터.

 
Younjin-Jeongs-MacBook-Pro:Extensions younjinjeong$ ssh root@192.168.7.2
The authenticity of host '192.168.7.2 (192.168.7.2)' can't be established.
RSA key fingerprint is 74:c4:b7:09:4c:3b:37:ba:69:96:b8:ca:09:61:6f:52.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.7.2' (RSA) to the list of known hosts.

root@192.168.7.2's password:
root@beaglebone:~#
root@beaglebone:~# hostname
beaglebone
root@beaglebone:~# whoami
root
root@beaglebone:~# ifconfig
eth0 Link encap:Ethernet HWaddr D4:94:A1:35:CA:6B
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:40

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:840 (840.0 B) TX bytes:840 (840.0 B)

usb0 Link encap:Ethernet HWaddr 02:09:34:3A:78:D3
inet addr:192.168.7.2 Bcast:192.168.7.3 Mask:255.255.255.252
inet6 addr: fe80::9:34ff:fe3a:78d3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:233 errors:0 dropped:0 overruns:0 frame:0
TX packets:115 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:38600 (37.6 KiB) TX bytes:15487 (15.1 KiB) 

위의 인터페이스에서 알 수 있듯이, 실제 랩탑과 보드의 통신은 usb0 를 통해 이루어 진다.  eth0 는 보드에 달려있는 이더넷 포트다. 모든 인터페이스의 설정 정보는 우분투와 동일한 위치인 /etc/network/interfaces 에서 확인이 가능하며, 192.168.7.2 는 usb0 에 고정된 인터페이스이다.
더욱 놀라운 다음의 내용을 살펴보도록 하자.
root@beaglebone:~# uname -a
Linux beaglebone 3.1.0+ #1 Tue Nov 15 15:51:15 CET 2011 armv7l GNU/Linux

root@beaglebone:~# Display all 1046 possibilities? (y or n)
root@beaglebone:~# ps -ef | grep node
root 98 1 0 15:31 ? 00:00:06 /usr/bin/node /usr/share/cloud9/bin/cloud9.js -l 0.0.0.0 -w /var/lib/cloud9 -p 3000root 99 1 0 15:31 ? 00:00:01 /usr/bin/node bone101.jsroot 349 342 0 16:19 pts/0 00:00:00 grep node

그렇다. default 로 Node 가 동작중이다. 게다가 이름에서 알 수 있듯이, cloud9 이 포트 3000 에서 돌아가고 있단다. 기가 찰 노릇이 아닌가. 그렇다면 접속 해 볼 일이다.

잇츠_어메이징_붸붸

 
위의 샘플 코드는 보드에 달려있는 사용자 LED 를 통제하는 101 코드가 들어있다. 위의 Run 버튼을 누르면 보드에서 LED 가 껌뻑 거리는 모습을 볼 수 있을 것이다.

이 보드가 시사하는 바는 무엇인가. Arduino 도 마찬가지지만, BeagleBone 은 보다 강력한 성능으로 주변 장치들을 붙이는 것이 가능하고, UNO 보드들과 마찬가지로 아날로그/디지털의 IN/OUT 통제가 가능하다. 이 작은 시스템은 완벽히 동작하는 리눅스의 구동이 가능하며, 저렴하고, 개발조차 쉽다.

이런 장점은 더이상 논하는 것이 무의미하므로, 그만 쓰도록 하고 이제 이 보드의 성능을 대강 살펴 보자.
root@beaglebone:~# free             
total used free shared buffers cached
Mem:
254176 78908 175268 0 8300 31508
-/+ buffers/cache: 39100 215076
Swap: 0 0 0

root@beaglebone:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 498.89
Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls
CPU implementer : 0x41CPU architecture: 7
CPU variant : 0x3CPU part : 0xc08
CPU revision : 2
Hardware : am335xevm
Revision : 0000
Serial : 0000000000000000

이제 정말 달리는 일만 남았다.  아, Lion 에서의 문제는 해결 되는 대로 포스팅! 

아참, 그리고 블로그를 깔끔하게 재구성 해 준 퐈이아준 형에게 무한 감사 ㅎㅎ  블로그 노가다 시켜서 미앙~! ㅋ 

( younjin.jeong@gmail.com, 정윤진 ) 

When Arduino meet JavaScript

Techs
( younjin.jeong@gmail.com, 정윤진 )

Arduino 기반 보드에 Node.js 를 올리고, 여기에 JavaScript 를 사용하여 하드웨어를 컨트롤 한다면 어떻게 될까?

긴 말이 필요 없다. 다음의 영상을 보자.



이 주제가 바로 최근 준호형 ( @firejune ) 과 함께 장난질 하려고 하는 분야의 메인이다.
헌데 사람 생각이 다 거기서 거기인지, 이미 이를 시도한 사람을 웹에서 발견 해 버렸다.

http://www.juliangautier.com/2011/02/controlling-big-mean-deviceswith.html

위의 블로그에는 구체적인 실행 방법과 코드들이 소개되어 있다. 아마 준호형이 펄쩍 뛰며 좋아 할 것 같은데.

핵심은 바로, Arduino 를 통해 node 용 모듈을 만들어 주는 데 있다. 위의 블로그에 보면 node-arduino 가 있는데, 이 코드는 다음의 링크에서 확인이 가능하다. 

https://github.com/voodootikigod/node-arduino
https://github.com/voodootikigod/node-arduino/blob/master/src/node.pde


어떤가, 죽여주지 않는가?  이제는 정말로 JavaScript 개발자가 임베디드 하는 세상이 온거다. 웹을 통해 디바이스를 제어하는 아름다운 세상. 또 이러한 것들이 클라우드를 만나면 어떻게 될 것인가. 

아래의 Presentation 자료를 살펴 보도록 하자. 
http://www.slideshare.net/frendskr/61262128-whenarduinometnodejs


Arduino 를 통한 모듈의 생성, 그리고 이 모듈을 사용한 node 용 JavaScript 코드, 그리고 웹을 통한 엑세스. 
이 전의 포스팅과 연계 하여, 웹을 통해 제어되는 RC 비행기/헬기 제작이 가능한 거다. 

이를테면, 구글맵과 GPS 좌표의 연동으로 "어디서부터 어디까지 날아가라" 하는 개발을 JavaScript 로. 

막 씐나는 아름다운 밤이로세- 

( younjin.jeong@gmail.com, 정윤진 ) 


Adding :  Node.js 를 추가한다면 당연한 말이겠지만, node.js + socket.io + Arduino 의 사용법도 있다. 아래의 영상 확인. 


관련 링크는 다음과 같다.
http://d.hatena.ne.jp/h6n/20111216/1323984616

관련 코드는 다음의 링크에서 찾아 볼 수 있다.
https://github.com/hanachin/iine_duino

Arduino

Techs
( younjin.jeong@gmail.com, 정윤진) 

지난번에 Beagle Board 에 대해 포스팅을 했었다. 이번에는 Arduino 라는 특별한 임베디드 개발 도구에 대해 소개 하고자 한다.

이 블로그에 방문하는 분들은 컴퓨터 또는 마이크로 컴퓨터에 대해 관심이 있거나, 아니면 없을 수도 있다. 하지만 로봇이라거나, 미로를 찾는 마이크로 마우스 또는 로봇을 만들어 싸움을 붙이거나 또는 동작하는 레고 제품에는 관심이 있을지도 모르겠다.

Beagle xM / Arduino Robot

Image from: http://letsmakerobots.com/node/11252 

임베디드라는 것은 그 사용에 따라 무궁무진한 Variation 을 가진다. 집의 온도와 각종 전기, 전자 도구들을 통제하는 홈컴퓨터로도 사용 될 수 있고, 스키장을 관리하는 통제 시스템의 모듈, 최근 모든 차량에 탑재되어 있는 ECU 와 같은 도구들이 예가 될 수 있겠다.

이전에는 이러한 도구를 사용하는 것이 로우레벨의 프로그래밍 언어와 PCB등의 기판, 칩셋 등에 정통한 기술자가 아니라면 감히 범접하기 힘든 부분이었지만, 최근에는 그렇지도 않다.

이것 저것 설명 하는 것 보다, 이런 분야에 대해 관심이 있다면 아래의 사이트들을 살펴 보시라.

Arduino (아두이노라 부르는 듯) 홈페이지 
http://arduino.cc/  

이를 사용한 각종 프로젝트들. 
http://www.element14.com/community/groups/arduino?CMP=KNC-KR-Arduino&s_kwcid=TC|22099|arduino||S|p|9695349601  

Beagle Board 와 Arduino 를 사용하여 만든 로봇
http://letsmakerobots.com/node/11252 

Arduino Board
http://www.plughouse.co.kr/shop/goods/Goods_view.php?G_code=20081004142229 

조금 살펴보니 국내에 이미 판매를 하고 있는 사이트가 많이 있다.
Korea: Plug HouseMakeZoneArtRobotEleparts 

http://www.makezone.co.kr/ 
http://artrobot.co.kr/ 
http://www.eleparts.co.kr/front/productlist_morning.php?code=017032002&listnum=&sort=&block=&gotopage= 
http://www.plughouse.co.kr/shop/goods/Goods_list.php?Category=023 


Arduino 보드와 개발 언어를 사용하게 되면 여러분은 기존에 쉽게 넘볼 수 없었던 신세계를 경험할 수 있게 될 것이다. 센서를 통해 얻어진 정보를 프로세싱하는 간단한 동작에서부터, Full Linux 구동이 가능한 Beagle Board + 센서, 그리고 Arduino 코드의 조합을 통해 만들어 낼 수 있는 수많은 도구들은 기존의 컴퓨팅에 지친 사람들 또는 새로운 무엇을 찾는 사람들에게 아주 재미난 장난감이 될 것을 믿어 의심치 않는다. 

납땜에 자신이 없기는 하지만, 학생 시절에 만났던 빵판 비슷한 기술을 더 재미지게 다룰 수 있다는 사실은 개발자에게 있어 매우 즐거운 일이 아닐 수 없다. 게다가 웹에는 바로 돌릴 수 있는 코드들도 수없이 떠 다니고 있다. Arduino 보드도 9만원 정도로 저렴하다. ( 물론 비글 보드를 미국에서 직접 공수하는 경우 20만원 정도는 생각 해야 한다.) 각종 센서들도 몇 천원 정도로 저렴하다. 게다가 JTAG 없어도 맥/윈도우에 USB를 붙이는 정도로 쉽게 Access가 가능하다. 무엇이 부족한가.

임베디드를 원래 하셨던 분들 중에는 이미 꽤 진도가 나간 분들도 계신 듯 하다.
http://knight76.tistory.com/category/%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8 


이러한 개발을 시작하려 하거나, 더 관심이 있다면 다음의 서적을 추천한다. (물론 한국에서는 원서도 없으며, 교보 문고를 통해 주문하면 약 일주일 정도 걸리는 듯 하다. 5만 7천원 선. Kindle이 있다면 그냥 아마존에서 원클릭 구매.)  
http://shop.oreilly.com/product/9780596154158.do  (1쇄)
http://shop.oreilly.com/product/0636920021735.do  (2쇄)

경험에 의하면, 하드웨어 hacker 나 guru 는 재미에 의해서 탄생된다. 재미가 없다면, 새벽 2시까지 코드를 잡고 있을 이유가 없다. 나는 지금 Beagle Board 에 node.js 를 위한 모듈을 만드는 것을 목표로 하고 있는데, 이는 비단 하드웨어 레벨의 센서 제어만이 아니라, 상위 레벨의 웹 애플리케이션에서 제어가 가능한 임베디드를 만드는 것이 아주 재미진 무엇으로 보이기 때문이다. 

가지고 놀다가 익숙해 지면 무인 RC 헬기/비행기도 GPS센서, 고도, 속도 센서 및 서보등을 사용해서 만드는 것도 가능 할 것이다. 얼마나 재미질까!!!! 

10년전에 비하면 천국과 같아진 이런 환경에 감사할 따름이다. 


Beagle Board 를 한국에서 구매하려면 여러가지 어려움이 많은데, 다음의 사이트에서 구매하면 한국에 배송이 가능하다. 단, 구매하기 전에 이 보드를 군사적인 목적 또는 미사일 등의 개발에 사용할지의 여부를 물어보는데, 반드시 모두 '아니오'라고 답해야 하며 실제로도 그런 목적으로 사용하면 CIA가 맴매 하지 않을.... 어쨌든 즐겨 보도록 하자. 단, 회원 가입 및 해외에서 사용가능한 신용카드가 있어야 한다. 

http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId=500201&catalogId=500201&term=Beagle&x=0&y=0&N=0&Ne=100000&action=products 

ULCD7 이라는 제품은 다음과 같이 보드에 붙여서 사용 할 수 있겠다. 

ULCD7



BeagleBoard 에 대한 내용은 다음의 사이트들에서 참고 하도록 하자. 
http://beagleboard.org/ 
http://www.digikey.com/product-highlights/us/en/texas-instruments-beagleboard/685    


즐거운 컴퓨팅 생활이 기다려진다!!

( younjin.jeong@gmail.com, 정윤진 ) 

Adding:   사람 생각하는거 다 비슷하다더니 역시 이미 실행에 옮긴이가 있다. ㅋ 

Cheapest Auto Pilot 
http://diydrones.ning.com/profiles/blog/show?id=705844%3ABlogPost%3A35640

DIY Drones Ardupilot 프로젝트
http://diydrones.com/profiles/blogs/ardupilot-main-page

관련된 재미진 영상들
아래의 영상들은 모두 Arduino 보드와 프로그래밍을 통해 각종 센서로 부터 얻어진 정보를 기반으로 적절한 프로세싱을 거쳐 모터 또는 서보에 전달 함으로서 원하는 목적을 달성하는 아주 재미진 프로젝트라 하겠다.




30 Arduino Projects for the Evil Genius



ArduPilot v2.0 maiden flight




ArduPilot 2.6 - 19 Km Flight Part 1 of 3




Sun Tracking Solar Panel w/ Arduino - Powers ITSELF!!



Testing arduino helicopter auto-stabilisation



RC car control by Arduino BT



Android Home Automation with HomeSeer



Project Sentry Gun Project No.2



Face detection Sentry Gun

Beagle Board

Techs
( younjin.jeong@gmail.com, 정윤진 ) 

최근 클라우드 스토리지 관련해서 어떤 시스템을 구축이 가능 할 것인가에 대해서 살펴보던 도중, 급작스럽게 임베디드 분야를 검색해 보기 시작했다. 이 와중에 아주 흥미로운 제품을 발견했는데, 제품의 이름은 귀엽게도 무려 "Beagle Board".

 
홈페이지는 위의 그림과 같다.

이들이 발매한 Beagle Bone v1 보드 제품은 $89 에 판매되고 있는데,  기본으로 Angstrom Linux 가 탑재되어 USB를 연결하기만 하면 동작한다. 게다가 더 놀라운 사실은, 이 제품에는 Cloud9 IDE가 임베드 되어있어 바로 보드상에서 개발이 가능하다는 점.  이러한 장치에서 Cloud9 IDE 가 돌아간다는 사실은 정말 많은 의미를 내포한다. 

이 보드는 아래와 같은 스펙을 가진다. 

  • Board size: 3.4″ x 2.1″
  • Shipped with 2GB microSD card with the Angstrom Distribution with node.js and Cloud9 IDE
  • Single cable development environment with built-in FTDI-based serial/JTAG and on-board hub to give the same cable simultaneous access to a USB device port on the target processor
  • Industry standard 3.3V I/Os on the expansion headers with easy-to-use 0.1″ spacing
  • On-chip Ethernet, not off of USB
  • 256MB of DDR2
  • 700-MHz super-scalar ARM Cortex™-A8
  • Easier to clone thanks to larger pitch on BGA devices (0.8mm vs. 0.4mm), no package-on-package memories, standard DDR2 vs. LPDDR, integrated USB PHYs and more.

또한, 이 보드가 지원하는 기능 및 이에 대한 장점은 아래와 같다. 

 Features Benefits 
 More than 1,400 Dhrystone MIPS using TI's superscalar AM335x ARM Cortex-A8 microprocessors up to 720 MHz Runs full Linux operating system with full-featured web servers, native compilers and scripting languages, video analytics libraries and much more 
 Two 48-pin, two-row, 0.1-inch spaced female expansion headers  Enables developers easily add off-the-shelf expansion hardware or directly breadboard connections to countless readily available peripherals
 Multipurpose USB device connection with on-board hub, USB-to-serial/JTAG conversion device with software reset and reprogrammable high-speed USB device interface Developers can plug in just one cable to power, debug and interface to their applications and not needing a JTAG emulator saves additional cost 
 Open GL  ES 2.0 capable 3D graphics accelerator Achieves photo-realistic, real-time pixel-shaded graphics for gaming and 3D user interface acceleration
 USB 2.0 host port that supports low, full and high speeds Can be used for USB peripherals like keyboard, mouse, WiFi, Bluetooth, Web cameras or USB hubs for additional expansion via con-chip USB PHY 
 microSD connector Adds multiple gigabytes of storage for your boot image and data 
 On-chip 10/100Mbit Gigabit Ethernet Network your network and the internet with minimal software stacks 
 Four on-board LEDs Provide user status without the need to add additional hardware 

결과를 추려서 한 문장으로 정리 해 보자면, 

- Node.js 를 돌릴 수 있는 저렴한 임베디드 베이스 보드. 

이는, 원하는 거의 모든 오픈소스 패키지의 설치 및 실행이 가능하다고 할 수 있으며, 필요한 경우 스테핑 모터의 연결, 또 이 스테핑 모터를 자바스크립트 코드를 통해 노드로 제어하는 것이 가능하다는 말이 되겠다. 

이러한 임베디드 장치의 출현은 이전에 소개한 Raspberry 프로젝트와 유사하기는 하지만, Beagle Board 의 강점은 사용하기 편리한, 그리고 모든 OS의 기능이 동작하는 ARM 기반의 멋진 임베디드 보드라는 것이다.

이 보드를 가지고 무엇을 할 수 있는지 가만히 생각해 보자. 
여러분은 여기에 카메라 모듈을 붙일 수도, 일반적인 키보드 마우스 모니터를 붙일 수도, 바코드 리더를 붙일 수도, 기타 등등의 상상할 수 있는 모든 임베디드 장치의 형태를 구현 해 낼 수 있게 된다. 

네트워크와 바로 물려있는 카드 결재모듈을 탑재한 POS 장비의 메인 보드로서, 스키장 또는 놀이 동산의 입장권 및 서비스 사용을 위한 바코드 인식, 일반 사용자가 거주하기 힘든 지역의 데이터 수집등등 헤아릴 수 없이 많은 것들이 가능해 진다. 단순히 C 를 사용하는 로우레벨의 개발자가 아니더라도 이런 것들이 가능해 질 것이며, 이는 node.js 모듈만 있다면 자바 스크립트 개발자도 충분히 좋은, 아니 더 멋진 애플리케이션의 작성이 가능해 질 지도 모르겠다. 

http://beagleboard.org/buy


이 간단한 장치에는 단순히 리눅스만 동작 가능한 것이 아니다. 이 장치로 진행중인 다른 프로젝트를 간단히 살펴 보자. 

Android Rowboat Project
Arrow Windows Embedded Bundle
Ubuntu on the BeagleBoard
Ångström Distribution of Linux
XBMC Media Center
RISC OS
Symbian
Gentoo
QNX Neutrino
DesignSomething.org


외국인 아자씨가 소개하는 영상도 한번 보자.
 



이런 장치를 볼 때마다, 정말 세상이 빠르게 변하고 있음을 느낀다. 이전에 ARM 베이스 프로그래밍을 배우고 싶다면 대학에만 할인되는 LED, LCD 모니터가 달린 ARM 보드를 엄청난 고가에 구매해야 했지만, 이제는 더 쉬운 인터페이스와 보다 고 수준의 언어, 그리고 일반적인 OS 가 동작하는 임베디드 보드의 사용이 가능하며, 저렴한 가격에 누구나 구입하여 테스트 해 볼 수 있을 것이다. 


빨리 하나 구매해서 이것저것 해 보고 싶다. 
'프로젝트만 끝나면.'  ㅠㅠ 

참조 
http://beagleboard.org/
http://elinux.org/BeagleBoardUbuntu



( younjin.jeong@gmail.com, 정윤진 ) 

#include <test.h>int x = foo();  /* This is a comment  Continuation of comment */
int y = bar();

Rules and Scalability

Techs
( younjin.jeong@gmail.com, 정윤진 )


한동안 바쁘기가 그지 없었다. 스토리지 클라우드 인프라의 아키텍팅, 자동화 코드 작성, 그리고 새로 시작한 고객사에서의 생활 등, 삶의 또 다른 한 사이클이 왔나 싶을 정도의 격한 생활을 지낸지 얼추 두어달 정도 되는 듯 하다.

이렇게 살면서 가장 힘든일이 무엇인가 생각해 보면, 각 기업에서 기존에 수행하던 방식의 모든 인프라 구성 방법과 다른 것이 바로 클라우드이다 하는 사실을 조직에 받아 들이게 하는 것이 가장 힘든 일이 아닌가 생각해 본다.  아주 간단한 호스트 이름을 짓는 방법 부터,  IP 할당 계획을 수립하는 것, 그에 따른 네트워크 구조를 만들어 내는 것 모두가 클라우드의 방식을 따르자면 모두 함께 Scale-out 을 고려 해야 하는데, 여기에 기존에 수십대의 서버를 사용하는 환경에서 사용하던 룰을 적용 하려는 경우가 많아 어려움을 겪는 경우가 많다. 

Lighter Side of Cloud 이미지는 내용과 관계 없음

Image From : http://www.cloudtweaks.com

이는 비단 한 두명의 관리자 때문만은 아니며, 클라우드 솔루션을 만들어 납품해야 하는 대상, 즉 또 다른 고객이 이 새로운 환경에 대해 준비가 되어있지 않기 때문에, 인프라 구성에 있어 기존의 패턴을 요구하기 때문에 발생하는 연쇄적이고 뿌리가 깊은 사이클에 기인하는 것으로 보여진다. 이 기존의 패턴이라는 것은 바로 고사양의 하드웨어에 치밀한 이중화를 준비 해 두어야만 데이터센터에 수용이 가능하다 라는 요구조건과 비슷한 것이 된다. 

하지만 클라우드는 이러한 기존의 패턴으로는 비용 효율성 측면에서 난관에 봉착하게 될 것임을 인지해야 한다. 한가지 더, 고비용의 시스템을 준비한다고 해서 획기적으로 좋은 성능을 만들어 낼 수는 없다. 클라우는 원래 생겨먹은게 가능한 "많은" 자원을 가지고 문제를 해결해야 한다. 그런데 이러한 것들은 모두 기존의 관리 패턴과 충돌하는 것이기 때문에 도입이 쉽지 않아진다. 대규모 클라우드를 처음부터 대규모로 만들 수 있는 것은 거대한 자본을 가진 기업만이 가능하다. 하지만 아무리 거대한 자본을 가진 기업일지라도 현재 시장의 표준이 되고 있는 아마존 클라우드보다 비용이 높아지게 되면 서비스의 중요성이 아무리 높다 한들 사업부의 동의를 구하기 힘들어지게 된다. 기존의 패턴에 의존할 확율이 높은 거대 기업이 자본을 믿고 고사양의 시스템으로 클라우드를 구축했다가 어이쿠 하고 빠지는 경우를 종종 보게 된다. 개인적으로 보기엔 이러한 이유들이 가장 크게 작용하고 있기 때문이라 생각되며, 따라서 클라우드 환경에 맞는 올바른 인식을 가지고, 그 그림을 공유하는 것이 성공적인 서비스 구성으로 가는 지름길이 아닐까 생각 해 본다. 

예를 들어 컴퓨팅 클라우드의 컴퓨트 노드, 즉 하이퍼바이저 노드의 경우, 이는 엄청난 숫자로 서버가 확장될 가능성이 있으며, 따라서 기존에는 아무것도 아닌 것 같은 NTP, DNS, DHCP, TFTP, 각종 서비스 설치에 필요한 Mirror Site 등의 자원에 대한 내부 구성이 중요해 진다. 더군다나 여기에 관리용 도메인/호스트 네임의 할당과 이와 관련된 IP 적용 규칙등을 모두 복합적으로 함께 고려하고, 이를 클라우드 제반 시스템 내부로 수용해야만 한다. 따라서 컴퓨트 클라우드는 단순히 하이퍼바이저의 집합이 아니라, 빌링과 자동화된 배포, 로깅, 모니터링 등을 처리해야만 하는 잘 조직된 관리용 서버 팜과, 이 컴퓨트 클라우드에서 사용될 이미지등이 저장될 스토리지 클라우드, 그리고 컴퓨트 클라우드 자체의 구성, 이 세가지가 모든 측면에서 고려되어야 한다.

위에 열거된 대부분의 내용은 바로 올바른 규칙의 설정에 그 핵심이 있다. 네트워크는 수평적으로 확장이 가능해야 하고, 기하 급수적으로 증가하는 서버를 일정한 규칙을 통해 배포하는 것이 중요하다. 여기에 필요한 규칙을 만드는 것, 그것이 바로 클라우드를 만드는 첫걸음이 아닌가 생각해 본다.

호스트명을 예로 들어 보자. 별도의 매핑 시스템이 존재하는 경우가 아니라면 클라우드에서는 호스트명 그 자체로 이 서버가 지역적으로, 그리고 물리적으로 데이터센터 내에서 어디에 위치하는지 즉각적으로 식별이 가능하도록 작성할 필요가 있다. 이는 서브도메인을 사용하는 방법과 호스트명에 직접 표기하는 두가지 방법이 있을 수 있는데, 이는 다음과 같다. 

* 서울 데이터 센터의 3층에 위치한 랙 40번의 아래에서 5번째 위치한 서버. 도메인은 a.com 이라 하자. 
예1) seoul-f3-r40-05.a.com 
예2) f3-r40-05.seoul.a.com 

* 위 예의 fqdn 을 가지고 서버의 IP 를 즉각적으로 유추해 내도록 망을 설계 할 수도 있다.
서울 : 10.
3층 : 10.3
랙 : 10.3.40
순서: 10.3.40.5

이는 극단적으로 단순한 예이다. 데이터 센터는 1개 층밖에 사용하지 못하는데 층을 기반으로 IP 할당 계획을 세운다면 IP가 모자르게 될 가능성도 있다. 따라서 가장 많이 증가 할 수 있는 자원을 기반으로 적절하게 서브네팅과 IP 계획을 세워 줄 필요가 있다. 이는 일견 간단해 보이지만, 직접 해 보면 쉽지 않은 일임을 알 수 있다. 하지만 이러한 예가 의미하는 바는 바로 약속이다. 이 약속의 내용을 알고 있다면 가급적 최대한 쉽게 식별이 가능하도록 만드는 것이 매우 중요하다는 말이다.

사실 이러한 내용은 그저 많은 약속 중의 단 하나일 뿐이다. 이러한 제한 조차 감당하기 어려운 경우에는, 별도의 호스트명 - IP 의 맵핑 로직을 만들어야 한다. 따라서 몇몇 대규모 클라우드 호스팅 업체의 경우 호스트명으로 아예 MAC 을 사용하는 경우도 있다.

랙 한두개로 클라우드를 모방하는 것은 기술적인 측면에서나 서비스적인 측면 모두에서 사실 별 일은 아니다. 이는 그저 시작일 뿐이며, 자그마한 유닛을 가지고 PoC 정도를 수행하는 것에 지나지 않는다. 물론 이러한 작업조차 하지 않는 경우가 대부분이긴 하지만, 수백, 수천대, 또 지역적으로 글로벌하게 서비스해야 하는 클라우드를 설계하는 경우라면 이러한 작은 차이들이 보다 수월한 자동화와 관리 시스템을 만들어 낼 가능성이 높다.

가장 중요한 것은, 이것은 기존의 방식과는 다르다 라는 것을 인지하는 것이 아닐까 한다. 하드웨어의 선정과 네트워크 구성은 절대 기존의 방식을 따라서는 안되며, 나아가 확장을 기본적으로 염두해 두지 않는다면 비용/관리/운영 모든 측면에서 눈덩이처럼 불어나는 이슈들을 감내하기가 분명 쉽지 않을 것이다.

Flat 네트워크나 Open vSwitch 와 같은 기술적인 내용의 수용에 앞서, 이러한 기본적인 내용을 이해하는 것이 무엇보다 중요하지 않을까 한다. 물론, 내가 지향하는 방법과 다른 방법이 분명 있을 수 있고, 그 방법이 보다 효율적이라면 따르지 않을 이유가 없지만 이러한 구성들은 한번 고려해 봄직 하지 않나 싶다.  

졸립고 피곤한데 뭔가 한마디 쓰고 싶어 끄적인게 또 두서없이 길어져 버렸다. 쓰다보니 이런 글이 과연 도움이 될까 싶은 의문이 드는 밤이다. 

( younjin.jeong@gmail.com, 정윤진 )