System Compleat.

'Techs'에 해당되는 글 113건

  1. Cloud Networking 2
  2. BeagleBone rolling start 1
  3. When Arduino meet JavaScript
  4. Arduino
  5. Beagle Board

Cloud Networking

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


네트워킹에 대한 글은 참 오랜만에 써 보는 것 같다. 사실 그다지 잘 아는 분야도 아니거니와, 일반적인 L3 ip networking 이 거의 대부분의 사용성을 지배하는 한국에서는 너무 당연한 이야기들이 많아서 쓸 것이 없어 그랬지 않았나 싶기도 하다.

오늘 잠깐 생각해 볼 주제는, 클라우드 네트워킹에서 가장 중요한 '확장성'을 고려하게 될 때, 과연 어떻게 망을 구성해야 효과적일까 하는 것이다. 모두들 넌블러킹 스위칭에 대해서 이야기 하고 있지만, 실제 그 넌블러킹의 정체가 무언지, 또 그렇다면 어떤 장비를 어떻게 엮어야 그런 확장성을 이루어 낼 수 있는지에 대해서 디테일하게 이야기 해 보기란 쉽지 않은 일일것이다.

일반적으로 구성하는 ipSAN 또는 스토리지간 연결을 위한 내부 폐쇠망의 구성을 하는데 있어, 최소한 랙 500 대 이상을 확장 할 수 있어야 한다 라는 요구사항이 있을때, 이 구간의 연결 및 IP 정책을 어떻게 만들어 낼 것인가가 아마도 최대의 고민이 될 수 있을 것이다. 경력있는 네트워크 엔지니어는 이러한 경우 내부망을 위한 전용 백본을 구성하고, 이 백본에서 하위 Aggregation 스위치로 MLAG, 다시 ToR ( Top of Rack ) 스위치로의 MLAG 구성을 만드는 것이 일반적인 구성이 될 수 있겠다. 


MLAG ( Multi-chassis Link Aggregation )

 
Image from:  http://www.computer-room-design.com/Arista-Networks-7500-Series-Data-Center-Switch.asp 

흔히 MLAG 이라 불리는 이러한 기술은, 여러대의 스위치를 한대의 스위치로 묶어 L2 레벨의 사용성을 보장한다. 이러한 구성은 최근의 대부분의 벤더가 지원하지만, 특정 벤더별로 상위 스위치로 연결된 2 또는 그 이상의 trunk 된 회선을 동시에 사용하는 이른바 Multi-path 를 지원하거나 지원하지 않는 제품들이 있다. 또한, 이렇게 사용하게 될 때 보통 각 랙별로 별도의 분리된 네트워크를 사용하고자 하는 경우가 많은데, 이럴때 각 ToR 을 위한 VLAN 구성을 추가하게 된다면 이제 각 VLAN 별로 게이트웨이가 되는 IP 를 할당해 주어야 할 텐데, 여기서 또 한번 할당 할 수 있는 IP 수량에 대한 제약 사항이 발생하게 된다.   

이와는 별도로 ToR 의 이중화 구성에 대해서 궁금해 하시는 분들도 있겠지만, 현대의 대부분의 클라우드 시스템들은 랙 하나의 장애에 크게 구애받지 않는다. 따라서 Aggregation 또는 백본의 장애에 대해서만 MLAG 을 구현하고, ToR 은 랙 별로 하나만 두기 때문에 위의 그림에서는 ToR 스위치가 한대다. 물론, 비용을 보다 많이 사용 할 수 있다면 모든 구성에 이중화가 가능하겠다.

아무튼 원래 주제인 MLAG 으로 돌아가서, ToR 에서는 L2, Aggregation 에서 L3 를 구현하는 이러한 방법은 여러모로 확장에 제한을 받게 된다. 물론 이러한 확장의 제한이라는 것이, 보통 샤시 레벨의 제품군을 사용하게 된다면 수백개의 포트 단위까지는 충분히 허용이 가능하므로, 구성하려는 시스템의 규모에 따라 제약사항이 되지 않을 가능성이 있다. 아니, 지금까지는 보통 그래왔다.

게다가 샤시 레벨의 제품을 사용하지 않는 경우에도, Aggregation 의 구성에 Tier 를 적용함으로서 48포트 X 48포트의 구성을 하는 것도 가능하다. 최근의 몇몇 벤더에서는 업링크에 40G 를 지원하는 제품도 있으므로, 이러한 구성시 보다 여유로울 수 있겠다.

얼마 전 까지만 해도 나 역시 이러한 구성이 거의 유일한 해법이며, 넌블러킹 구성에 있어 이보다 좋은 다른 대안이 없는 것으로 생각하고 있었다. MLAG 구성에서 Multi-path 를 지원 할 수 있다면, 현존하는 가장 좋은 내부망 확장 방법이라고 생각 했었다.

 
하지만 최근, 일본의 Midokura ( www.midokura.com )의 Dan 과 Ryu 와 함께 일하게 되면서 새로 배운 것이 있는데, 바로 내부망에 라우팅 프로토콜인 BGP 를 사용하는 방법이다. 

사실 국내에서 네트워크 전문가가 아니라면 생소한 이 프로토콜은, 보통 AS라 불리는 별도의 망 단위간 네트워크에서 라우팅을 위해 사용된다. 국내에서 생소한 이유는, 보통 이 AS가 데이터센터에 입주한 고객에게 별도로 할당되는 경우가 매우 드물고, 따라서 고객이 데이터센터의 ISP 와의 연결에 Static 라우팅을 사용하는 경우가 대부분이기 때문이다. 실제 수년간 필드에서 잔뼈가 굵으신 엔지니어 분들 께서도 BGP 구성에 직접 참여하게 되면 먼지쌓인 책을 다시 살펴봐야 하는 경우가 허다 했다. 

어쨌든 이는 라우팅 프로토콜이기 때문에, 라우터 A 에서 라우터 Z 로 가기 위한 여러개의 경로를 동적으로 할당하는 것이 가능해 진다. 물론 이러한 목적을 위해 BGP 만 존재하는 것은 아니며, RIP, OSPF 등의 수많은 프로토콜이 존재한다. 그런데 왜 여기서 갑자기 BGP를 꺼내들었는가. 그 이유를 살펴 보자. 


1. 최근 데이터 센터 구성에 사용하는 24-48 포트 10G 스위치는 L3 기반인 경우가 많고, 이 L3 스위치들은 BGP 운용이 가능하다. 바꾸어 말하면, 10G 24-48 포트 라우터로 사용 할 수 있다.  

2. iBGP 를 사용하여 Backbone / Aggregation 을 클라우드 망으로 구성할 수 있다. 무슨 이야기인고 하니, 모든 스위치가 라우터로 동작 하므로, 어느 한 지점의 장애에 구애 받지 않게 된다.

3. ECMP 를 사용하여 수없이 발생하게 될 경로에 대한 최대한의 대역폭 사용이 가능해 진다.

4. 장애가 발생한 경우 그 전파가 매우 빠르고, 전체 망이 한꺼번에 다운될 확률이 낮아진다.

5. 각 랙에서 발생하는 L2 통신은 랙 내부로 고립되고, 이 랙에서 돌리는 각 VM의 상태가 백본 레벨로 전달 될 염려가 없다. 랙 장애는 랙 장애에 국한된다.

6. 일단 백본이 구성되고 나면, 어느 경로에든 ToR 을 원하는 형태로 가져다 붙일 수 있다.  따라서 진정한 Scale-out 이 사용 가능한 IP 대역이 떨어질 때 까지 확장 가능하다. 

위의 장점 이외에도, 다른 수많은 장점이 있을 수 있다고 본다. 물론 굳이 iBGP 가 아니라, 각 랙에 사설 AS 를 할당하여 백본과 eBGP를 구성하는 방법도 있을 수 있다. 어떠한 구성의 방법이 더 좋은지의 여부는 네트워크 벤더별로 다를 수 있으며, 경우에 따라 ECMP 를 원활하게 지원하지 않는 경우도 있으니 확인을 꼭 해 볼일이다. 


현재 일을 하고 있는 회사에서 국내에 Arista 를 배포하고 있어, 장비를 가져다가 테스트 해 볼 수 있었다.
테스트 환경은,

- Arista 7124SX   5대
- 일반 Quanta 서버 3대

였으며, 테스트를 위한 컨셉은 다음과 같다. 

iBGP Test Concept



그림은, 각 랙은 서로 다른 24bit 의 네트워크를 가지며, ToR 을 지나는 순간 iBGP 를 사용하여 다른 랙으로 라우팅 된다. 이때 ToR 회서는 각각의 백본에 연결되며, 이 서로 다른 라우팅 Path 에 모두 ECMP 를 적용하게 된다. 

컨셉이 이렇다면, 실제 백본의 할당은 다음과 같다. 

IP Allocation


 
172 네트워크는 관리를 위한 별도의 망이며, 구성된 모든 장치에 연결되어 있다. 실제 트래픽은 푸른색의 회선을 통해 실리게 된다. 이렇게 환경에 대한 구성이 끝났다면, 이제 실제 각 스위치를 설정한다. 

백본은 백본끼리 서로 동일하며, ToR 설정은 각각 모두 동일하기 때문에 샘플로 하나씩만 싣도록 한다.

먼저, Backbone #1 의 설정
....
...
..
interface Ethernet1
   no switchport
   ip address 10.100.100.18/30
!
interface Ethernet2
!
interface Ethernet3
....
..
!
interface Ethernet22
!
interface Ethernet23
   no switchport
   ip address 10.100.100.1/30
!
interface Ethernet24
   no switchport
   ip address 10.100.100.5/30
!
interface Management1
   ip address 172.17.17.91/24
!
ip route 0.0.0.0/0 Null0 255
!
ip routing
!
router bgp 100
   bgp log-neighbor-changes
   neighbor 10.100.100.2 remote-as 100
   neighbor 10.100.100.2 update-source Ethernet23
   neighbor 10.100.100.2 maximum-routes 12000 
   neighbor 10.100.100.6 remote-as 100
   neighbor 10.100.100.6 update-source Ethernet24
   neighbor 10.100.100.6 maximum-routes 12000 
   neighbor 10.100.100.17 remote-as 100
   neighbor 10.100.100.17 update-source Ethernet1
   neighbor 10.100.100.17 maximum-routes 12000 
   network 0.0.0.0/0
!
management telnet
   no shutdown
!
!
end

이제, ToR #1 의 설정을 살펴보자.
.....
...
.
vlan 10
!
interface Port-Channel10
   switchport access vlan 10
!
interface Ethernet1
   switchport access vlan 10
   channel-group 10 mode active
!
interface Ethernet2
   switchport access vlan 10
   channel-group 10 mode active
!
interface Ethernet3
   switchport access vlan 10
!
.....
...
..
!
interface Ethernet22
   switchport access vlan 10
!
interface Ethernet23
   no switchport
   ip address 10.100.100.2/30
!
interface Ethernet24
   no switchport
   ip address 10.100.100.14/30
!
interface Management1
   ip address 172.17.17.93/24
!
interface Vlan10
   ip address 10.1.1.254/24
!
ip routing
!
router bgp 100
   bgp log-neighbor-changes
   timers bgp 30 90
   maximum-paths 2 ecmp 2
   neighbor 10.100.100.1 remote-as 100
   neighbor 10.100.100.1 maximum-routes 12000
   neighbor 10.100.100.13 remote-as 100
   neighbor 10.100.100.13 maximum-routes 12000
   network 10.1.1.0/24
!
management telnet
   no shutdown
!
!
end

이렇게 설정하게 되면, 위의 다이어그램과 같이 원하는 대로 망이 동작하게 된다. 아래의 스크린샷은 각 스위치에 sflow 를 걸어두고, 서버 1대에서 다른 2개의 ToR 로 트래픽을 발생 시켰을 때 볼 수 있는 그림이다.

sflow when 2 paths from single server



네트워킹을 전문으로 하시는 분이라면 위의 null0 라우팅 부분을 의아하게 생각 하실 수 있겠다. 이는 이렇게 구성된 망이 폐쇠망이고 외부로 별도의 경로가 없기 때문에, 모든 ToR 에 default 라우팅을 전파하기 위해 별도로 구성된 설정으로 이해 해 주시면 된다. 또한, 경우에 따라 백본에 neighbor x.x.x.x route-reflect-client 를 구성하여 모든 ToR 에 다른 ToR 의 경로를 전파 할 수도 있겠다. 물론 여기서는 어쨌든 백본으로 모든 트래픽을 보내기 때문에, 백본에서 별도로 RR-client 설정을 넣어 주지는 않았다.

ToR 에서 살펴본 ip routing 정보. 
TOR-1#sh ip route 0.0.0.0/0
Codes: C - connected, S - static, K - kernel, 
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B I - iBGP, B E - eBGP,
       R - RIP, A - Aggregate

Gateway of last resort:
 B I    0.0.0.0/0 [200/0] via 10.100.100.1
                          via 10.100.100.13

이러한 스위치가 가지는 장점을 백분 활용함으로서 해 볼 수 있는 것들은 정말로 많이 있다.
기존에는 생각하지 못했던 방법, 보다 스케일링이 가능한 방법. 

네트워크 엔지니어만 알고 있어서 되는게 아니고, 서버 엔지니어라고 해서 네트워크를 모르면 안되는 것과 같은 이치이다. 한 구간만 생각한다면 이러한 룰이 나올 수 있을리 없다고 생각한다. 

최근 클라우드 아키텍팅에서의 트렌드는, 기존의 L2 + L3 구성을 버리고 모두 L3 를 사용하는 방법이다. 위의 설정은 단순히 이러한 구성 및 컨셉을 확인하기 위한 용도에 지나지 않으며, 서비스에 구성하기 위해서는 보다 나은 timer 설정등이 필요하게 될 것이다. 또한, 백본을 다중화 하는 방법도 충분히 실현이 가능하다. 


이 포스팅에 굳이 MLAG 구성의 그림을 넣지 않은 이유는, BGP 의 활용에 대해서 더 살펴보기 위함이었다. 필요하신 분들 께서는 구글에서 MLAG 이라는 검색어만 넣어도 수없이 많이 떠오르는 내용을 보실 수 있을 것이다. 


본 설정을 완료하기 위해 도움을 주신 분들이 계시다. 간단히 소개를 해 보자면, 

Dan Mihai Dumitriu ( CEO/CTO at Midokura )
Nishizawa, Satoshi ( Network expert at Midokura ) 
이정호 차장님 ( Arista Korea )

또한, 고생 해 준 우리 장비들에게도 쌩유. 

Arista 7124SX


 
네트워킹에 고민하고 계신 분들께 조금이나마 도움이 되었으면 하며, 혹시라도 가져가실때는 출처를 남겨 주시길.
조만간 eBGP 도 테스트 해 볼 예정. 

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

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();