KTH 개발자 세미나 H3 2012 참관 후기

1. baas.io
KTH에서 이번에 새로 만든 모바일 개발자를 위한 서버사이드 서비스입니다.
baas 는 Backend as a service 의 약자입니다.
이걸 사용하면 모바일 앱 개발자가 서버사이드 개발을 할 필요가 없다고 합니다.
서버 프로그램 안에서 웹 gui를 통해 앱 서비스를 만들고, RESTful api를 만들고 앱에서는 이것을 호출하면 됩니다.
실제 앱들은 RESTful api만 잘 설계하면 간단한 서비스들은 매우 심플하게 개발 가능하다고 합니다.
facebook 인증 등의 기능도 내장하고 있고, 모바일 고객센터 기능도 내장하고 있어서
복잡한 서버로직이 있는 것이 아니라면, 앱 개발자들이 서버사이드 모듈을 개발할 필요 없이 이 서비스만을 이용하고
모바일앱만 개발하면 앱을 서비스할 수 있도록 도와주고 있습니다.
현재 클로즈 베타를 제공하고 있고 차후에 정식 오픈 예정입니다.

 
2. node.js
자바스크립트를 사용하여 무궁무진한 응용이 가능하다는 것을 보여준 재밌는 세션이었습니다.
파이선에는 HTTP server를 매우 쉽게 만들 수 있는 기능이 있습니다. : python -m SimpleHTTPServer
자바스크립트로도 이렇게 간단하게 웹서버를 만들 수 있도록 locally 라는 것을 만들었다고 합니다.
자바스크립트로 locally 명령어 하나로만 웹서버를 띄웁니다.
 
그리고, 하드웨어를 자바스크립트로 컨트롤하는, 모든 청중을 휘어잡아버린 시연이 있었습니다.
arduino라는 하드웨어 모듈을 이용해서
전등을 키고 선풍기를 켜는 것을 웹에서 컨트롤을 하는 시연이 있었습니다.
웹은 node.js와 arduino연동 플러그인을 이용해서 자바스크립트로 만들었구요.
이렇게 만든 웹UI에서 버튼 클릭만으로 전등을 켜고, 선풍기를 켜고 끕니다.
현재 실시간 전력량과 전기세를 웹에서 실시간으로 보여주고 그래프로도 보여줍니다.
여기서 끝나는게 아니라, 온도센서를 이용하여 특정 온도가 넘으면 선풍기가 자동으로 켜지도록 만들고,
크롬의 음성인식 기능을 이용하여 음성인식으로 불을 켜고 선풍기를 켜는 시연도 있었습니다.
외출이라는 명령어로 선풍기, 전등 등을 모두 한번에 끄기도 했구요.
이 모든 기능을 현장에서 라이브로 시연을 해서 더욱 놀라웠습니다.
아이패드로 사파리를 띄워서 시연을 했습니다.
 
본인은 arduino를 사용했지만, Raspberry Pi 이용하면 연동이 더 쉽다고 합니다.
 
자바스크립트에서 불을 켜고 끄는건 간단합니다. 아래의 소스를 보시면 이해하기가 쉬우실 겁니다.
 
var  pin1 = new arduin.Led({
    board: new arduino.Board(),
    pin: 1
});

pin.on();
pin.off();
 
이런 식으로 컨트롤이 가능합니다.
클라이언트 웹과 하드웨어컨트롤 서버와는 web socket으로 통신을 합니다.
 
가만히 듣다 보니, 이 분 어디선가 뵌 적이 있었던것 같은 기억이 났습니다.
예전 2010년에 HTML5세미나에 간 적이 있었는데, 그때 node.js 세션에서 단순히 전등을 켜고 끄는 시연을 본 적이 있는데, 그때도 보고 놀라움을 금치 못했었는데 이분이 그때 발표한 그분인 것 같습니다.
시연 내용은 그때보다 훨씬 많이 발전을 했구요.
그때는 node.js가 매우 생소할 때였고 node.js에 별 관심도 없었는데, 이제는 누구나 아는 키워드가 되었네요.
 

3. 봄날은 간다.
여기서의 봄은 Spring Framework 입니다.
현재 우리나라에서 웹개발을 하면 대부분 Spring Framework을 사용한다는데서 시작합니다.
이것저것 고려하지 않고 웹이라고 하면 무조건 그냥 Spring을 사용하는 현실을 꼬집었습니다.
발표 내용을 러프하게 적어보겠습니다.
 
라이브러리 VS 프레임워크 의 차이점
라이브러리 : 내 코드가 라이브러리를 호출
프레임워크 : 프레임워크가 내 코드를 호출 – IoC, 제어의 역전

웹의 역사
현재 :
Model-View-Controller MVC : 여러 MVC 지원 프레임워크가 많이 나옴.
Ruby on Rails – 15분만에 블로그 만들기 – 굉장히 좋은 기술인데 관리 유지보수가 안됨. 개발은 빠른데 디자인 입히는데 한달, 뭐 하는데 한달.
미투데이가 루비로 만들었다가 NHN에 인수된 뒤 자바로 바뀜
우리나라에서 “루비 할 줄 아는 사람?” 했더니 아무도 없었다. (“루비 하고 싶은 사람?” 이라고 했다면……)
스트러츠 & 스프링 – 자바 할 줄 아는 사람 손? 모두 손 든다. 관리가 가능.

미래 :
TGIF : Twitter, Google, iPhone, Facebook
작년 트위터 자료 수는 1.8ZB
이 많은 데이터를 일반적인 방식으로 서치하는 것은 불가능.
해결방법 : 비동기, Non-Blocking I/O – node.js, vert.x, Akka, Parallel Python…
동기 & 멀티쓰레드 – 은행 창구
비동시 & 싱글쓰레드 – 고속도로 하이패스 창구1개 (계산은 나중에, 일단 그냥 지나가. 그러나 어리버리한 사람이 하이패스 에서 어리버리 하고 있으면 완전 막힘)
비동기 & 멀티쓰레드 – 커피 테이크아웃점 – 주문받고 다음사람, 커피 만들어지면 벨 호출(콜백)

경량 프레임워크 – RESTful API 호출 – 작업 후 응담 만 하면 프레임워크의 역할은 끝.
프론트엔드 프레임워크 – Backbone.js
Play 프레임워크 – 자바, 스칼라 동시 지원. 루비온레일즈와 비슷하게 CoC, Scaffolding, Akka를 통한 비동기/분산 처리
Play2는 템플릿엔진이 스칼라 DSL

이 세션의 핵심은 무조건 스프링을 쓸게 아니라,
그때 그때 용도에 맞는 프레임워크를 여러가지 조합해서 써야 한다였습니다.
발표자분의 추천하는 서비스별 프레임워크는 아래와 같습니다.
 
프론트엔드 프레임워크 Backbone.js, Angular.js
경량프레임워크 Express, Spray
API 는 Cherokee, NgineX 정적
비동기 프레임웍 – Akka, Spring IoC
캐시 – 분산 객체 캐시 & 웹가속기 Radis, Varnish
DB – RDBMS, MongoDB
백엔드 – baas.io
컴퓨팅리소스(이미지 프로세싱 등) – AWS EC2
레거시 – 건들지 말 것.
 

4. Scala
그때 메모한 내용들만 간략히 적어 보겠습니다.
 
스칼라는 functional 언어
def f(x:Int) = x + 1
(x:Int) => x + 1 —lamda expression

val people: List[Person]
val minors = people.filter(_.age < 20)

switch보다 강력한 match case 를 활용해서 로직을 좀 더 쉽게 구현 가능.
 
Action model – non thread 동시 처리
Akka 스칼라로 작성된 Actor model 구현
Typesafe Stack with Play framework.

기능들을 듣다 보면, 자바로 개발하면서 답답했던, 그래서 매우 복잡하게 개발해야 했던 것들을
심플하게 개발 가능할 것 같았습니다.
 
발표자의 마지막 요약은,
“빠르게 개발하려면 루비 또는 스칼라를 써라.” 였습니다.ㅎㅎ



5. Instant prototype with Ruby on Rails
커피 한잔 마실 시간에 프로토타이핑 하기
프로토타이핑은 핵심 기능만 완료
적절한 도구 : Rails, node.js
긍정적이고 빠른 피드백(긍정적인 피드백이 업무 효율을 올릴 수 있다.)
디테일은 양보 (프로토타이핑에서는 디테일한 내용을 언급하면 능률이 오르지 않는다)
빠른 실패, 빠른 성공
인스턴트 프로토타이핑을 하다 보면 backend, iOS, android, UI/UX도 하게 됨. -> 유니콘 같은 슈퍼 개발자가 됨
실행을 통한 아이디어 검증. risk taking 창업가 정신

rails new {app}
rails g scaffold {model}
heroku 등을 통해 쉽게 서비스 배포
1.서비스컨셉, 2.이름정하기 3.스캐폴딩(모델링) 4.서비스배포

html 몇천개를 크롤링 해서 의미 있는 데이터를 만들어 앱으로 제공할 때 레일즈로 쉽게 개발 가능했음.
 
 
6. Open API & Ruby on Rails 이야기
KTH의 pudding.to 서비스를 개선해야 하는 과제. 이를 위한 프레임워크를 선택해야 함.
1. node.js
2. Play – JVM상에서 동작. 고성능. 새로운 언어 학습에 대한 부담감(제대로 잘 사용하려면 스칼라를 알아야 함)
3. Ruby on Rails – 웹프레임워크 유행 선도자, 높은 생산성. 개발경험 있음. 낮은 VM 성능 (아마존에서 클라우드 서비스를 늘리면 될 거라 생각했음)

오픈API – 좋은 API의 특징
쉽게 배울 수 있어야 한다.
문서 없이도 사용이 가능해야 한다.

Controller
1. URL 설계는 Open API의 기초 공사
  – 제공 하는 Resource 룰 정의
  – Meaningful URL 혹은 Pretty URL
2. Versioning – OpenAPI 변경 주기에 대한 확장성 확보
3. CORS – 웹 브라우저 기반의 메쉬업 앱에서는 문제 발생
  api_controller.tb 에서 response 헤더 가공

MVC – Model
ActiveRecord

RABL : API view 를 위한 템플릿 엔진. 다양한 포맷 지원. 템플릿 내에서 루비 코드 사용 가능
 
 
 
전체 세미나를 다 듣고 난 생각은,
빠른고 간단한, 그리고 쉬운 위해서는 루비, 스칼라, 자바스크립트 등의 언어가 괜찮다는 것과,
그것을 지원해주고 쓸만한 프레임워크로는 레일즈, 플레이, node.js 가 괜찮다. 였습니다.
이 부분에 좀 더 관심을 가져봐야겠다는 생각이 듭니다.

댓글 남기기