System Compleat.

마이크로 컴퓨터와 RC (Remote Control) - 1편

Hobbies

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

약 10여년 전, 인터넷 검색을 하다가 우연히 어린 시절에 원격 조종 자동차나 비행기를 엄청 하고 싶었던 기억이 떠올랐다. 어린시절 용돈으로 감당하기엔 그 벽이 너무 높았던 장난감, 이제 성인이 되어 직장도 다니고 하니 하나 사서 가지고 놀아 보는 것도 괜찮겠다 싶었다. 

당시에 이미 다양한 중국산 제품들이 생각보다 저렴한 가격으로 홍콩의 하비킹이란 사이트를 통해 판매되고 있었다. 개인적으로 기술도 그렇고 놀이도 그렇고 뭔가 빨리 발견한다는 느낌인데, 그때 그런 느낌이었다. 발사라는 매우 가벼운 나무로 만들어진, 그리고 조종을 실패하면 상당한 파손 비용을 감당해야 했던 것들과는 다르게, 강화 스티로폼으로 만들어진 비행기들이 주력을 이루었다. 입문용 비행기는 16만원 선으로, 추락해도 본드칠로 고치면 되겠다는 생각에 누구 가르쳐 주는 사람을 알아볼 생각도 없이 무조건 질렀다. 

최초로 구매한 무선 조종 비행기. 여러번의 추락으로 이미 많이 아프다...

검색에 검색이 꼬리를 물다 보니, FPV라는게 눈에 띄었다. First Person View라 불리는 것으로 이제는 많은 사람들이 알고 있듯이, 무선 조종 비행기나 자동차 앞에 카메라를 달아서 실시간으로 영상을 보면서 즐기는 장치들이었다. 이거 대박인데? 하는 생각과 관련 시스템들을 알아보기 시작했다. 다양한 주파수로 동작하는 영상 신호 전송 및 수신 모듈, 수신 받은 영상을 실감나게 볼 수 있는 고글, 그리고 고글에 자이로를 달아 여기서 나오는 신호로 비행기에 붙은 카메라를 조절해 고개를 돌리면 카메라도 돌아가는, 마치 실제 비행을 하는 느낌을 주는 시스템, 그리고 OSD라 불리며 배터리로 동작하는 비행기의 남은 전략 상태, 고도, 속도, 배터리 잔량 등을 영상에 오버랩 해 주는 장비까지 정말 끝이 없었다. 

무선 영상 전송 카메라와 OSD 선 정리에 영 소질이 없... - FatShark

 

이쯤 되다 보니, 비행 안정 장치가 있지 않을까 하는 생각도 들기 시작했다. 아니나 다를까 EagleTree라는 회사에서 만든 자이로가 달린 마이크로 컴퓨터 기반 장치를 무선 조종 수신기와 서보 사이에 연결하면 바람의 영향으로 발생하는 자세의 흔들림을 보정했다. 게다가 그라운드 스테이션 컴퓨터도 있어, 이 장치에서 송신되는 텔레메트리 정보를 모으고, 더 장거리 비행을 위한 지향성 안테나를 날고 있는 비행기의 위치에 맞게 조절해 주는 장치도 있었더랬다. 

당시에 한가지 더 대두되었던 기술 중 하나는 바로 오픈 하드웨어, 최근엔 라스베리 파이나 아두이노로 알려진 프로그램 가능한 마이크로 컴퓨터들이었다. 코드를 통해 움직이는 무언가를 만들 수 있다는 것은, 그리고 그렇게 할 수 있는 장치들이 십만원 이상을 넘지 않는다는 것은 꽤나 충격적인 변화였다. 2000년대 중반만 하더라도 ARM기반의 학습용 보드들은 쉽게 천만원대를 넘고는 했으니까. 

특히 비행 제어 장치 부분에, 당시에는 꽤나 소규모 회사였던 DJI의 장치들이 달린 유튜브 영상들이 매우 충격적이었다. 매우 정밀한 포지셔닝, 그리고 강한 바람에도 흔들림 없는 자세를 유지하던 DJI의 RC용 컴퓨터들은 그 예쁜 디자인 만큼이나 꽤나 고가였다. EagleTree 같은 장치가 20-30만원 할때, DJI의 비행 제어 장치들은 당시에도 100만원을 호가하고는 했었다. 

취미와 토이 프로젝트를 통해 기술을 배워 보자 하는 생각을 시작한 것은 그때 쯤이었던것 같다. 아두이노 보드를 사고, GPS를 사고, 자이로를 사고 하며 서보와 연결하고 코드를 쓰고 하면서 꽤나 즐거웠던것 같다. 하지만 뭔가를 잘 하는 것에는 시간이 필요하고, 만들고 싶은 결과물은 너무나 거대했다. 

ArduPilot을 사용한 시험 기체. 활주 없이 이륙하기엔 너무 무거워 첫 비행에 손을 떠나자 마자 꼬꾸라 졌다고 한다. 힝. 

그러는 동안 국내 통신사의 클라우드 서비스를 만들고, 큰 외국계 기업에 입사하게 되고 하면서 취미를 통해 배우는 일은 매우 시간을 내기 어려운 것이 되었다. 거실의 티비 뒷쪽에는 윙스팬 2.5미터의 거대한 글라이더가 조립만을 기다린채 먼지만 쌓여갔고, 부모님 댁에 놓아두고 온 스핏파이어 발사 비행기는 아버지의 단골 핀잔거리였다. 

그렇게 세월이 흐르는 동안 FPV와 비행제어 시스템들은 날로 발전해 드론 레이싱이라는 취미까지 발전하게 된다. 예전에는 320 240 해상도만으로도 감지덕지 했던 것들이 이제는 상당한 해상도로 실시간 전송된다. DJI는 취미를 넘어 항공 촬영이라는 분야로 전문성을 넓혔고, 이것은 그 회사의 상당한 사업적 성공을 가져왔다. 한동안 4차 산업 혁명의 선두 주자 같은 이미지까지 확보하게 되었으니 허허 하는 웃음이 자연히 나는 것도 어쩔 수 없다. 

세월의 흐름에 따라 기술의 발전은 끝이 없다. 머신 러닝을 지나 딥 러닝과 비전 컴퓨팅이 등장했다. 카메라로 들어오는 영상 정보를 분석하고 분류하며 이 정보를 바탕으로 다양한, 그야말로 너무나도 다양한 것들을 할 수 있는 시대가 되었다. 오픈 하드웨어를 통해 열린 새로운 세상에는 그와 함께 사용 할 수 있는, 심각하게 저렴한 센서들도 함께 세상에 나오게 했다. 오늘날 Adafruit, Sparkfun 을 비롯한 수많은 몰에서 저렴하게 센서를 구매해서 마이크로 컴퓨터에 연결 할 수 있다. 수년 전에 AVNet과 같은 페이지에서 센서를 구매하려면 상당한 가격과 센서의 스펙을 달달달 읽어 보아야 했던 것과는 매우 다르다. 접근이 편하고, 바로 사용할 수 있는 라이브러리들이 존재하고, 저렴하기에 관심만 있다면 즉시 아이디어를 구현 할 수 있게 된 것이다. 

비글 보드를 필두로 라즈베리 파이가 등장했고, 아두이노보다 더 강력한 컴퓨팅 성능을 가진 컴퓨터들이 등장하기 시작했다. 심지어 이것들은 우분투와 같은 리눅스가 올라가 있다. 즉, 성능 좋은 마이크로 컴퓨터들을 위해 리눅스들이 포팅되기 시작했고, 이제 어지간한 규모의 코드들은 손쉽게 돌릴 수 있는 환경이 된 것이다. 심지어 표준이라 불릴만한 생태계를 이루어, 카메라를 구매할 때도 CSI, MIPI 같은 인터페이스의 규격을 모르더라도 '아두이노 호환' '라즈베리 파이' 호환과 같은 설명을 보고 구입해도 실패가 없을 지경이다. 

Nvidia의 Jetson TX2 보드. 당시로서는 GPGPU가 탑재된, 구매 가능한 가장 저렴한 보드였다. 현재 1:5 스케일 차에서 열일중.

이것은 이제 필시 넋 놓고 보기만 할 상황은 아닌 것이다. 심지어 이 분야, 즉 컴퓨터, 코드, 서비스와 관계된 일을 업으로 하면서 이런 기술을 배우지 않으면 안되겠다는 위기감이 들기도 했다. 그래서 다시 취미를 통해 새로운 기술을 배운다는 목표를 세우고 실행해 보기로 했다. 

이전의 실패중 하나는, 제어의 대상을 무선조종 비행기로 했다는 점이다. 첫째로 무선조종 비행기는 사실 일정 크기가 넘어가면 사람, 특히 어린 아이에게 매우 위험할 수 있다. 그리고 그 특성상 전신주나 전깃줄이 많은 지역, 도심 지역에서는 날리는 것이 불가능하다. 마이크로 컴퓨터를 비행기에 얹기 시작하면 그 무게가 있어 일정 규모 이상이 되지 않으면 안된다. 이러한 종합적 문제들로 인해, 비행기를 포기하고 자동차를 선택했다. 

무선 조종 자동차는 의외로 비행기보다 가격대가 높다. 취미로서 무선 조종 자동차는 그 역사가 상당하고, 쉬운 접근성으로 인해 마니아층이 상당해서 그런지는 몰라도, 대부분의 무선 조종 자동차들의 기본 구조는 실제 자동차의 것을 그대로 가져다 만들었기에 부품의 종류와 양이 많다. 뭐 어쨌든 자동차로 하기로 했다. 

1:5 스케일은 정말 더럽게 크다. 배터리도 무시무시함. 사진에 보이는 배터리는 단지 수신기와 서보용.

멍청했던 것 중의 하나는 컴퓨터가 올라가려면 좀 커야지! 하는 생각에 1:5 스케일의 자동차를 구매했다는 점이다. 사실 이것은 인터넷을 통해 접하게된 '오토 랠리'라는 조지아 공대의 프로젝트를 보고 따라하려다 보니 그렇게 된 것이다. 이 오토랠리 프로젝트에는 마이크로 컴퓨터가 아니라, 실제 itx 사이즈의 메인보드를 기반으로 한 컴퓨터가 들어간다. 이들의 깃헙에 소개된 부품 리스트들을 보면 그 종류에 입이 떡 벌어지고, 그 가격의 총 합에 턱이 빠지게 된다. 

필요한 센서와 부품들은 보다 낮은 등급, 즉 보다 낮은 정밀도를 가진 것들로 대체해서 해결 한다지만, 일단 가까운 곳에 트랙을 찾을 수 없는 것이 더 큰 문제였다. 자동차를 만들어도 굴릴데가 없다는 말이다. 1:5 스케일의 자동차를 본 적이 있는지 모르겠지만, 무게가 킬로그람 단위로 나가는 물건이 시속 80킬로미터 이상으로 달릴 수 있다면 이것은 비행기와 맘먹는, 아니 어쩌면 비행기보다 더 위험한 장난감이 될 수 있기에 다시 안전한 장소를 찾아야 했고, 그런 안전한 공터는 생각보다 많지 않다. 

Team Losi의 DBXL-e 차량과 ZED 스테레오 캠 등.

그러는 사이에 또 일년이 지났다. 아마존 웹 서비스에는 '딥 레이서' 라는 장난감과 서비스가 출시되었다. 취미를 통해 배우는 것이 좋다는 것을 아마도 아마존이 알아버렸나보다. 대량으로 생산할 수 있는 적절한 성능과 규모의 자동차와 많이 사용하는 소프트웨어 도구들을 쉽게 얹을 수 있는 딥레이서를 보자마자 나는 또 아차 싶었다. 

사실 그동안의 세월이 아무 소용이 없었던 것은 아니었다. 모든 분야가 그렇듯이 하나를 알기 위해서는 그 주변에 연결된 것들을 함께 알아야 할 필요가 있다. 지난 두번의 시도들은 많은 것들을 배울 수 있게 했지만, 일과의 직접적인 관계가 없었기에 충분히 집중하지 못했다. 일을 하다 식사시간에 스마트폰으로 검색하고, 퇴근하다 문득 생각나 검색하고 했던 느슨한 공부들이 어느순간 갑자기 연결되기 시작했다. 그리고 지난 세월 동안 투자했던 시간과 장비들을 모아모아 이번에는 기필코 무언가 완성하겠노라, 그래서 내가 아는 모든 것들을 되짚어 보고 새로운 것을 배워 익히겠노라 하는 다짐을 하게 되었다. 

 

하여 언제든 가까운 곳에서 가지고 놀 수 있고, 위험하지 않으며, 가격도 비교적 저렴한 "컴퓨터가 탑재된 무선 조종 자동차"를 기획했다. 목표는 다음과 같다. 

  • 무선 조종기의 스위치 조작을 통해 컴퓨터 제어와 직접 조종을 즉시 변환 할 수 있다. 
  • 마음대로 제어가 되지 않는 상황에서는 버튼 하나로 즉시 정지할 수 있어야 한다. 
  • 트랙 내에서 가능한 고속으로, 그리고 스스로 주행하도록 하는 것이 목표이다.
  • 주행중 수집된 데이터는 분석을 위해 모아서 저장할 수 있어야 한다. 
  • 수집된 정보는 원하는 경우 실시간으로 클라우드 서비스에 스트림으로 보내 저장하여 다양한 목적으로 사용한다. 
  • 스마트폰을 통해 달리고 있는 자동차에서 전송되는 정보를 다양한 그래프와 게이지로 확인할 수 있어야 한다.  

이 목적을 이루기 위해서 지난 수년간 검색한 결과를 토대로 다음과 같은 리스트를 만들었다. 

  • 무선 조종 자동차, 1:10 스케일 
  • Nvidia Jetson Nano // WiFi 및 블루투스 익스텐션 // 전용 레오파드이미징 MIPI 카메라 
  • Arduino Uno 와 데모 보드 
  • 무선 조종기 / 수신기 
  • 야외에서 사용 가능한 무선 공유기 
  • 오차 범위가 센티미터 단위인 GNSS 와 안테나 
  • 9축 가속도와 나침반을 포함한 센서 - 9DoF IMU 
  • 자동차의 바퀴 속도를 수집하기위한 Hall Effect 센서와 바퀴에 장착할 자석  
  • 각종 저항과 연결 실험을 위한 브레드 보드 
  • 자동차와 컴퓨터들에 전력을 공급할 전원 분배 장치 - Matek Duo 
  • 서보 케이블, 마이크로 USB 케이블 등 케이블 류 
  • 3D 프린터 
  • 6각 렌치 세트를 비롯한 각종 공구 
  • 납땜을 위한 인두 

 

이렇게 새로운 프로젝트는 다시 시작되었다. 이번에는 필시 끝을 보리라... 

Sparkfun의 9DoF IMU 센서 

 

다음편에는 1:10 스케일 차량을 포함한 부품들의 구매, 그리고 무선 조종 제어를 위한 PWM 시그널의 이해와 코드를 살펴보기로 한다. 한번에 쓸 수 있다면 MPPI 에 대해서도 간략히 설명을... 언제 또 블로그를 쓸 수 있을지 모른다는 것은 안비밀. 

 

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

국민 청원 및 제안 - 정부 전산 시스템

Stories


쓸때마다 답답한거 청원 한번 넣어 보았다. 

https://www1.president.go.kr/petitions/142901?navigation=petitions 


이로인해 고통받는 국민들이 얼마나 많을까. 

전자 정부 프레임워크도 스프링 부트로 좀 올리고 유닉스 같은거도 좀 그만쓰고 제일 중요한건 좀 브라우저에서 별도 설치 없이 돌아가게 좀. 쪼오오옹오옴 




ffmpeg를 자막 입히기, 자막 위치 조정

Hobbies


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


간혹 이런 저런 목적으로 유튜브에 비디오를 자막과 함께 올리는데, 유튜브의 경우 특정 자막이 포함된 링크를 생성하는 것이 불가능하여 아예 자막을 영상에 구워서 업로드 하는 방법을  사용하고 있다. 관련해서 매우 많은 다양한 도구가 있지만, 편의상 사용하는 방법은 아래와 같다. 


  1. ClipGrab 과 같은 도구를 사용해서 원하는 영상을 다운로드 받는다. (저작권 문제는 논외) 
  2. Youtube 에서 제공하는 "Creator Studio" 를 사용하여 원본 영상을 올린다.  
  3. Creator Studio 에 보면, "새로운 자막을 생성" 옵션에서 자막을 신규로 만들어 넣을 수 있도록 기능을 제공하는데, 이걸 사용해서 자막을 제작 한다. 
  4. 자막을 만들고 나면, "Action" 버튼에서 만들어진 자막을 srt 외 몇가지 포멧으로 다운로드 받을 수 있다. 
  5. srt 로 다운 받는다. 
  6. ffmpeg 로 ass 포멧으로 변환한다. 
  7. .ass 자막 파일을 열어 자막의 위치를 원하는대로 수정한다. 
  8. ffmpeg 로 자막을 비디오에 입힌다. 


Youtube Creator Studio 


.srt 자막을 .ass 로 변환하는 커맨드는 다음과 같다. 

ffmpeg -i input.srt output.ass


output.ass 파일을 열면 아래와 같은 포멧이 나타난다. 

[Script Info]

; Script generated by FFmpeg/Lavc57.24.102

ScriptType: v4.00+

PlayResX: 384

PlayResY: 288


[V4+ Styles]

Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0


[Events]

Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text

Dialogue: 0,0:00:00.00,0:00:01.04,Default,,0,0,0,,피보탈 | 마이크로 서비스

Dialogue: 0,0:00:01.22,0:00:05.60,Default,,0,0,230,,마이크로 서비스는 거대한 서비스가 각각 독립적인 코드로 구성된 작은 서비스들로 이루어진 것을 말합니다.

Dialogue: 0,0:00:05.66,0:00:08.68,Default,,0,0,270,,개발자들은 마이크로 서비스를 새로운 앱을 개발할때 적용하거나

Dialogue: 0,0:00:08.88,0:00:12.88,Default,,0,0,270,,기존의 소프트웨어를 다수의 파트로 나누어 구성하기도 합니다.

Dialogue: 0,0:00:12.96,0:00:17.26,Default,,0,0,250,,마이크로 서비스 아키텍처는 소프트웨어의 빠른 릴리즈를 도울 뿐만 아니라

Dialogue: 0,0:00:17.38,0:00:20.94,Default,,0,0,250,,팀을 작은 규모로 유지하여 더 나은 업무 프로세스를 만들 수도 있습니다.

Dialogue: 0,0:00:21.06,0:00:24.84,Default,,0,0,250,,이런 마이크로 서비스 접근은 팀이 변화의 요구에 부응하며

Dialogue: 0,0:00:24.84,0:00:26.84,Default,,0,0,250,,새로운 기능을 고객에게 전달할 수 있도록 합니다.

Dialogue: 0,0:00:27.06,0:00:30.84,Default,,0,0,250,,마이크로 서비스 아키텍처는 작은 규모의 소프트웨어를 독립적으로 운용 함으로서

Dialogue: 0,0:00:30.90,0:00:35.36,Default,,0,0,250,,개발과 혁신의 속도를 높여주는 핵심 엔진입니다.

Dialogue: 0,0:00:35.56,0:00:37.56,Default,,0,0,0,,피보탈 | 세상이 소프트웨어를 만드는 방법을 혁신 합니다.


여기서 Events 부분의 Format 을 살펴보면, MarginL, R, V 의 값이 있다. 상단과 하단의 조정은 V 값을 변경해서 적용한다. 변경 적용이 완료 되면 파일을 저장하고 ffmpeg 를 사용해서 비디오에 자막을 입힌다. 이때, ffmpeg 에는 자막 관련 라이브러리를 사용해서 컴파일이 되어 있어야 한다. 

커맨드는 아래와 같다. 

ffmpeg -i INPUT_VIDEO.mp4 -vf subtitles=INPUT_SUBTITLES.ass OUTPUT_VIDEO_NAME.mp4



그러면 아래와 같은 화면이 출력되며 신나게 인코딩을 수행한다. 

ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 7.3.0 (clang-703.0.29)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.0 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libass --enable-vda
  libavutil      55. 17.103 / 55. 17.103
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'What are Microservices.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2017-05-08 22:20:16
    encoder         : Lavf54.6.100
  Duration: 00:00:38.10, start: 0.000000, bitrate: 2137 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2029 kb/s, 24 fps, 24 tbr, 90k tbn, 48 tbc (default)
    Metadata:
      creation_time   : 2017-05-08 22:20:16
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2017-05-08 22:20:16
      handler_name    : SoundHandler
File 'What-are-Micro-Services-KR-sub.mp4' already exists. Overwrite ? [y/N] y
[Parsed_subtitles_0 @ 0x7fb1dc500a60] Shaper: FriBidi 0.19.7 (SIMPLE) HarfBuzz-ng 1.2.4 (COMPLEX)
[Parsed_subtitles_0 @ 0x7fb1dc500a60] Using font provider coretext
[libx264 @ 0x7fb1dc80de00] using SAR=1/1


완료되면 비디오를 열어 확인한다. 

AEGISSUB 와 같은 좋은 도구가 많지만 웬지 커맨드 라인이 더 익숙해. 


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






AWS re:Invent 2016 - Keynote 2 신규 서비스

Techs


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

어제에 이어 오늘도 새로운 서비스들이 쏟아져 나왔다. re:Invent 첫째날은 아마존 웹 서비스의 사장인 Andy Jassy 가 발표를 했고, 두번째 날에는 아마존의 CTO인 Werner Vogels 박사님이 또 새로운 서비스들을 쏟아내었다. 죽 보면서 느끼는건데, 대체 각 서비스별로 Amazon 과 AWS의 이름 규칙은 무엇인가. 알수가 엄쏭. 

Keynote 첫날 발표된 내용은 여기로. : http://kerberosj.tistory.com/231


http://venturebeat.com/2016/11/30/aws-reinvent-2016/

2일 동안 발표된 서비스 및 추가 기능은 무려 24개에 달하는데 이는 역시 아마존이 시장의 선두를 유지하기 위해 박차를 가하는 모습이다. 대부분의 서비스들은 기존 고객의 요구 또는 고객들이 아마존 웹 서비스에서 주로 직접 구현해서 사용하는 것에 어려움을 겪는 문제를 해소하기 위해 매니지드 서비스로 만들어 배포하고 있다. 


두번째 날에 공개된 서비스들은 주로 개발자들이 관심을 가질만한 내용들로 보인다. 아래에 간단히 그 용도와 링크를 적어본다. 한국에 대한 아마존 웹 서비스의 투자가 늘어나 re:Invent 에서 발표된 내용이 실시간으로 한글 블로그로 번역되어 나오는것에 신기할 따름이다. 


AWS X-Rayhttps://aws.amazon.com/ko/blogs/korea/aws-x-ray-see-inside-of-your-distributed-application/  

- 웹 애플리케이션에서 클라이언트로 부터 서비스로 들어온 요청이 내부에서 어떻게 처리되는지에 대한 가시성을 확보하는 것은 매우 중요하다. 특히 마이크로 서비스와 같은 구조를 구현하고 있는 경우라면 더더욱 그러한데, 이를 AWS에서 사용할 수 있는 것이 X-ray 라는 서비스로 발매 되었다. 트위터가 만든 오픈소스 Zipkin (http://zipkin.io) 의 AWS 버전으로 보인다. 


AWS CodeBuildhttps://aws.amazon.com/ko/blogs/korea/aws-codebuild-fully-managed-build-service/ 

- 아마존의 코드 삼형제라는 별명을 붙여서 한참 발표하고 다녔는데 이제 코드 4형제가 되었다. AWS가 만든 Jenkins 라고 이해하면 되겠다. AWS CodeCommit, AWS CodePipeline, AWS CodeDeploy 와 연동 가능하며 특히 CodePipeline 에서 빌드 서비스 공급자로 CodeBuild 를 추가할 수 있어 유용하겠다. 사실 CI/CD 파이프라인 및 컨테이너 레벨의 빌드와 테스트를 수행하는 도구를 직접 설치해서 운영하는 것은 매우 피로도가 높은 일인데, 이렇게 서비스로 제공되면 사용이 편리하겠다. 


AWS Shieldhttps://aws.amazon.com/ko/blogs/korea/aws-shield-protect-your-applications-from-ddos-attacks/

- 많은 사람들이 아기다리고기다리던 기능이 아닐까 싶다. 아울러 이쪽 분야에 솔루션을 판매하던 보안회사들 몇몇은 곡소리가 날지도... 아무튼 AWS 의 DDoS 방어 서비스다. 설명에 따르면 Standard 서비스는 모든 사용자가 무료로 사용할 수 있으며, 지원을 받고자 하는 경우에는 Advanced 를 선택 가능한 모양이다. DDoS 방어의 경우 도메인 부터 서비스 엔드포인트까지 다계층에서 감지 및 조치를 취해야 할 필요가 있는데, Shield 서비스의 경우 Route53 의 도메인, CloudFront 의 CDN edge, 그리고 ELB의 밸런서의 다계층에서 DDoS를 방어한다. 모든 사용자가 살펴볼 필요가 있는 서비스. 


AWS Pinpointhttps://aws.amazon.com/blogs/aws/amazon-pinpoint-hit-your-targets-with-aws/

- 마케팅에서 선별된 고객에게만 메세지를 보내는 기능은 매우 중요하다. AWS Pinpoint 는 Mobile analytics 에서 제공하는 몇몇 간단한 지표를 바탕으로 특정 조건에 부합하는 고객들에게 SNS(Simple Notification Service) 를 통해 푸시알람이나 이메일등을 보낼 수 있는 마케팅 그룹용 매니지드 서비스라고 할 수 있겠다. 어떠한 모바일 서비스건 꼭 구현해야 하는 기능이지만 직접 구현하려면 시간과 노력이 필요한 기능을 서비스로 만들었다. 


AWS Batch : https://aws.amazon.com/ko/blogs/korea/aws-batch-run-batch-computing-jobs-on-aws/ 

- 배치 작업의 종류는 다양하지만, 그 기본 구성요소는 거의 대부분 비슷하다. 작업을 위한 클러스터와 이 클러스터를 통제하는 메인 노드 (또는 서버) 그리고 클러스터가 수행할 작업을 분배하고 결과를 수집하는 작업 큐, 그리고 그 클러스터의 수행 목적에 따라 결과를 저장하는 데이터베이스 또는 파일 시스템으로 보통 구성한다. Batch 서비스는 이전 MIT의 StarCluster 와 같은 도구가 하던 일을 아예 서비스로 만들고, 데이터 소스 및 결과물 저장을 위한 DynamoDB, S3 등과의 연동 및 작업을 위한 클러스터 노드 생성과 큐를 만들어 그야말로 뚝딱 사용할 수 있는 서비스다. 예를 들면 렌더링이나 분자화학식 계산, 각종 산업 시뮬레이션 등에 사용 가능하겠으며, 아마도 GPGPU 가 달린 또는 Elastic GPU 등을 사용해 OpenCL 등을 사용하는 클러스터도 제공할 것 같다. 


AWS Personal Health Dashboard : https://aws.amazon.com/ko/blogs/korea/new-aws-personal-health-dashboard-status-you-can-relate-to/ 

- AWS에서 서비스를 운영하다 보면 관리를 위한 정보를 각 서비스 콘솔에서 별도로 확인해야 하는 등의 불편함이 있었다. 예를 들면 메인터넌스를 위한 AWS의 EC2 인스턴스 재부팅 대상이라던가, RDS 데이터베이스의 업데이트 또는 CloudWatch 를 통해 확인해야 하는 각종 알람과 같은 정보들이다. 이런 정보들을 이제 여기저기 돌아다닐 필요 없이 하나의 대시보드에서 확인할 수 있도록 제공하는 서비스로 보인다. 


Blox, OSS Container scheduler  : https://aws.amazon.com/ko/blogs/korea/blox-new-open-source-scheduler-for-amazon-ec2-container-service/ 

- 어째서 ECS에서 사용하는 컨테이너 스케줄러를 서비스로 제공하지 않고 오픈소스 도구로 처리하라는지는 잘 모르겠지만, 어쨌든 그렇다. 아마존 웹 서비스를 사용하다 보면 EC2도 그렇고 현재 내가 어떤 인스턴스들 또는 컨테이너를 동작하고 있는지 Describe 관련 API 를 호출하는 경우가 많다. 이는 각 컨테이너의 "State - 상태" 를 그때그때 조회해야 하기 때문에 여간 불편한 것이 아닌데, 이 Blox 라는 도구는 CloudWatch 등을 통해서 상태를 추적하고 사용자가 원하는 수량 또는 작업을 SQS 를 통해 처리하도록 하는 오픈소스란다. 난 피보탈 직원이니까 컨테이너를 클라우드에서 돌리고 싶은 엔터프라이즈라면 그냥 피보탈 클라우드 파운더리를 살펴보는걸 권고. 데헷 


AWS Lambda@Edgehttps://aws.amazon.com/ko/blogs/korea/coming-soon-lambda-at-the-edge/ 

- AWS 람다는 함수 단위의 코드를 서버 없이 실행해 주는 서비스다. 이 서비스가 이제 CloudFront의 Edge에서 돌아간단다. 그러니까 즉, CDN에 컴퓨팅 파워를 부여해서 외부에서 들어오는 요청에 대해 더 스마트한 통제를 구현할 수 있게 된다. 현재는 자바스크립트 코드만 동작 가능한 것으로 보이는데, 정리하면 웹 서버 또는 NginX 와 같은 리버스 프락시에서 구현하는 다양한 웹 요청에 대한 조작을 CDN 엣지에서 내가 원하는 대로 자바스크립트를 사용해서 처리할 수 있겠다. 다양하게 응용이 가능하므로 웹 서비스를 수행한다면 꼭 살펴 보아야할 기능. 


AWS StepFunctionshttps://aws.amazon.com/ko/blogs/korea/new-aws-step-functions-build-distributed-applications-using-visual-workflows/

- 서버리스가 점점 발전하고 있다. Lambda 에서 작성한 각각의 함수 레벨의 애플리케이션을 서로 엮어 개발자가 원하는 조건에 따라 원하는 동작을 처리할 수 있는 일종의 "람다 함수를 묶어 하나의 서비스로" 와 같은 컨셉. 아마존에서 주창하는 서버리스와 람다에 열광하는 사용자라면 반드시 살펴볼 것을 권고한다. 


AWS Gluehttps://aws.amazon.com/ko/glue/ 

- 아마존의 공식 블로그 포스팅은 아직 없는 모양. 서비스 홈 페이지를 링크. 간단히 말해서 ETL as a Service. JDBC 로 연결 가능한 모든 데이터 저장소와 S3, RDS, Redshift 간의 데이터 이동등을 편리하게 처리할 수 있겠다. 또한 이렇게 만들어진 ETL을 Python, Spark, Git 또는 IDE 등을 사용해서 다른 Glue 사용자들과 공유를 할 수도 있단다. 따라서 Kinesis firehose 등을 사용하여 인입된 데이터를 서비스간 원하는 대로 편리하게 쪼물락 할 수 있다는 말. 


몇가지 서비스가 더 있기는 하지만, 일단 영문과 국문 블로그에 소개된 서비스들을 우선으로 정리 했다. 어차피 다들 시간을 두고 차근차근 살펴보아야 할 서비스들이므로, 몇개월 재미지게 생겼다. 

매번 느끼는 거지만 최근의 비지니스들은 모두 인터넷과 소프트웨어 그리고 데이터를 사용하지 않는 경우는 드물다. 더 중요한 것은 동일한 작업의 반복, 예를 들면 주로 테스트나 빌드, 그리고 배포등 과 같이 사람이 하면 오래걸리거나 실수가 발생하여 장애로 발전하는 형태의 것들이 클라우드 시대에 더더욱 많아진다. 금번 아마존 웹 서비스의  re:Invent 를 보면 인프라는 내게 맡기고 너는 서비스에 집중하라 는 메세지가 매우 강하다. 탄탄한 기본 서비스들을 바탕으로 점점 발표되는 신규 서비스의 양이 가속화 되는 것을 보면 굉장하다. 

나 역시 아마존 웹 서비스의 강렬한 팬이지만, 아마존 웹 서비스를 사용한다고 아마존 닷 컴을 만들 수 있는 것은 아니다. 결국 핵심 역량은 서비스에 필요한 애플리케이션과 데이터 코드를 얼만큼 빠르게 개발하고 테스트해서 배포할 수 있는가 하는 것이 아닐까.  


아마존 웹 서비스의 시장과 고객에 대한 집착이 보이는 굉장한 2일의 키노트였다. 

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


AWS re:Invent 2016 - Keynote 1 신규 서비스

Techs


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

오랜만에 아마존 웹 서비스 관련 내용. 아마존 웹 서비스는 매년 10월-12월 사이의 겨울에 글로벌 규모의 행사를 진행한다. 이 행사는 re:Invent 라고 불리며 매년 참가자가 늘어나고 있다. 올해 2016년에는 3만 5천명 규모의 행사로 라스베가스의 베네시안에서 진행된다. 여러해 동안 아마존 웹 서비스와 이렇게 저렇게 인연을 쌓아왔지만 re:Invent 에 참석하는 것은 처음이다. 어마어마한 사람들, 해를 거듭할 수록 쏟아지는 새로운 서비스들, 그리고 이 서비스들을 사용한 다양한 경험의 공유와 더 잘 사용하기 위한 팁 등이 발표된다. 

2016년 올해도 다양한 서비스들이 발표 되었다. 전반적인 서비스 개선의 흐름을 보자면 사용성의 개선을 통한 신규 사용자의 진입 장벽을 낮추고, 데이터 분석과 관련된 신규 서비스들이 발표 되었으며 특히 아마존 에코를 통해 축적된 음성 인식 기술을 보편적으로 사용할 수 있도록 하는 서비스들, 이미지 분석, 그리고 대량의 데이터 이전 등 첫날의 발표는 다소 데이터에 집중하는 모습이다. 

아마존 웹 서비스는 탄탄한 기반의 EC2와 S3를 바탕으로 지속적으로 서비스 포트폴리오를 확장해 왔는데, 이번에도 역시 아마존의 서비스를 지원하기 위해 필요했던 다양한 기술, 그리고 아마존의 경험이 녹아있는 기술들이 아마존 웹 서비스로 발표 되었다는 느낌이다. 


아래는 발표된 서비스에 대한 간략한 설명과 자세한 사용을 위한 링크다. 


EC2 확장 기능, Elastic GPU : https://aws.amazon.com/ko/blogs/korea/in-the-work-amazon-ec2-elastic-gpus/

- EC2 서버 인스턴스에 GPU를 붙였다 떼었다 할 수 있도록 디자인된 EC2 확장 기능 


F1 인스턴스 패밀리https://aws.amazon.com/ko/blogs/korea/developer-preview-ec2-instances-f1-with-programmable-hardware/ 

- FPGA를 사용할 수 있는 새로운 인스턴스 타입 


Amazon Athenahttps://aws.amazon.com/ko/blogs/korea/amazon-athena-interactively-query-petabytes-of-data-in-seconds/

- S3에 저장된 데이터에 표준 SQL을 사용할 수 있는 서비스 


Amazon LEXhttps://aws.amazon.com/ko/blogs/korea/amazon-lex-build-conversational-voice-text-interfaces/ 

- 음성 인식 및 자연어 이해를 통해 채팅봇 또는 애플리케이션에 음성 인터페이스를 추가할 수 있도록 하는 신규 서비스. 아직 한국어 지원은 되지 않는 듯 


Amazon Pollyhttps://aws.amazon.com/ko/blogs/korea/polly-text-to-speech-in-47-voices-and-24-languages/ 

- 다양한 음색과 언어를 지원하는 문장 -> 음성 인터페이스 서비스. 지원하는 언어에 사용되는 다양한 어휘를 상황에 따라 올바르게 읽는 능력을 제공, 따라서 LEX 와 함께 사용할때 애플리케이션에서 처리한 내용을 음성으로 사용자에게 전달할 수 있음 


Amazon Rekognitionhttps://aws.amazon.com/ko/blogs/korea/amazon-rekognition-image-detection-and-recognition-powered-by-deep-learning/ 

- 이미지의 내용을 분석해 주는 서비스. 이미지의 사람 표정에서 감정을 추출하거나, 이미지의 내용을 딥러닝에 기반하여 리턴 


Amazon Aurora - Posgresql : https://aws.amazon.com/ko/blogs/korea/amazon-aurora-update-postgresql-compatibility/ 

- 아마존 오로라는 아마존이 만든 오픈소스 기반의 데이터베이스 서비스인데, 종전에는 MySQL 호환만 존재 하였으나 이번에 Postgres 엔진도 발표 됨. 기존의 RDS Posgres 로 부터의 손쉬운 마이그레이션 등을 제공하며, 일반적으로 두배 정도의 성능 향상을 기대할 수 있다고 함 


AWS Greengrass : https://aws.amazon.com/ko/blogs/korea/aws-greengrass-ubiquitous-real-world-computing/ 

- IoT 관련 서비스를 만들다 보면 데이터를 클라우드로 전달하는 과정에서 누락등이 발생하기 때문에 이를 보완하기 위해 Sensor 게이트웨이 같은 장치를 구현하는 경우가 많은데, 이를 클라우드로 직접 전달하는 대신 센서등이 위치한 로컬의 하드웨어에서 Lambda 기반의 Greengrass Core 를 실행하여 작업을 처리하는 도구. 즉, IoT 데이터 처리를 위한 로컬 람다 소프트웨어. 


AWS Snowball Edgehttps://aws.amazon.com/blogs/aws/aws-snowball-edge-more-storage-local-endpoints-lambda-functions/ 

- 내용을 보다 보면 기존의 Storage Gateway 와 Snowball 을 합친 모양새. Snowball 은 로컬의 데이터센터에서 아마존으로 데이터의 이동이 필요한 경우 제공되는 일종의 운반용 디스크 세트였는데, 이를 아예 센터의 로컬에 설치하여 연동할 수 있도록 구현한 것으로 보임. 인터페이스는 10G, 25G, 40Gbps 를 제공하며, 심지어 Zigbee 역시 지원한단다. S3의 API 가 달려있으며 멀티파트 업로드 등으로 데이터 전송을 빠르게 처리할 수 있고, 몇개를 더 묶어서 클러스터링까지 가능한 모양. 람다를 사용한 컴퓨팅 기능까지 포함 하고 있는 로컬 스토리지 + 컴퓨팅 머신  


AWS Snowmobilehttps://aws.amazon.com/blogs/aws/aws-snowmobile-move-exabytes-of-data-to-the-cloud-in-weeks/ 

- 엑사 바이트 규모의 데이터 이전에 사용한다. 데이터센터에 아무리 빠른 네트워크가 있다고 하더라도, 엑사바이트 규모의 데이터를 아마존으로 전송하기 위해서는 수개월-1년 이상의 시간이 필요할 수 있다. 이에 아마존은 스노우모바일이라 불리는 서비스를 출시 하였으며, 거대한 컨테이너가 달린 트럭을 사용한다. 

http://venturebeat.com/2016/11/30/aws-unveils-snowmobile-truck-for-moving-data-to-its-cloud/


오늘 나온 서비스들이라서 더 자세한것은 써봐야 알겠지만 어쨌든 클라우드 서비스 시장에서의 맹주로서 무서운 속도로 서비스를 내어 놓는 것 만은 분명하다. 새롭게 늘어난 인스턴스 종류, 직접 구현하기 힘든 다양한 음성 및 데이터 관련 서비스들은 아마도 다양한 스타트업들에서 다양한 형태로 사용될 것으로 생각된다. 

놀라운 점은, 이미 시장에서 선두를 달리고 있는 회사가 이런 속도로 또 다시 신규 서비스들을 발매 한다는 점이다. 아울러 최근의 모든이가 알겠지만, 1.0 버전의 발매는 거기서 끝이 아니라 지속적인 개선을 필요로 한다. 수십개가 넘는 각각의 아마존 웹 서비스의 제품들이 저마다 또 다른 속도로 개선될 것을 생각해 보면, 2017년에는 아마도 일주일에 50개씩 업데이트가 생길지도 모르겠다. ㅎㅎ 

아울러 피보탈의 클라우드 파운더리에서 Amazon Service broker 를 통해 다양한 신규 서비스를 애플리케이션 개발자가 손쉽게 연동해서 사용할 날이 오기를 기대한다. 

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