Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Seoul GTUG 7th Event 세미나 후기

지난 주 토요일인 3일 Seoul GTUG 7th Event에 갔다가 왔습니다. 세미나는 좀 오랜만에 갔다온 것 같습니다. GTUG는 Google Technology User Groups의 약자로 전세계적으로 각 나라별로 있는 유저그룹이라고 합니다.

Seoul GTUG 7th Event 공지

GTUG를 알게 된지는 몇달 되었는데 세미나에 참가해 보기는 처음인데 위 시간표에서 보는것 처럼 딱히 구글기술에만 집중하고 있는 것은 아닌듯 합니다. 딱히 유저그룹에 대해서 자세히 아는 내용은 없어서... 어쨌든 구글 사무실은 처음 가봤는데 깔끔히 잘해놨더군요. 음료수나 간식을 맘대로 꺼내먹을수 있게 해논 것은 참 맘에 들더군요. (세미나중에도 계속 먹게 되서 여기서 일하면 살찌겠다는 생각이...)



크롬 브라우져 기반의 웹 개발 : 허광남(OKJSP)
시간표에는 앱개발이라고 나와 있는데 사실 전화상으로 얘기하다보니 웹개발이 잘못 전달되어서 앱개발로 공지되었다고 합니다. 앞에 크롬브라우저 얘기가 있었기 때문에 물론 이 세션을 네이티브 앱개발로 생각한 분은 없을 꺼라고 생각합니다.

세션별로 시간할당은 없었던 듯 시간을 재보진 않았지만 생각보다 짧게 진행되었던 세션이었습니다. 크롬브라우저에 대한 소개와 크롬의 개발자 도구에 대한 간단한 사용법을 소개해주는 내용으로 구성되어 있었습니다. Kenu님은 항상 초심자레벨에 맞춰서 기술이나 문화를 보급하시는 걸 잘 하신다고 생각하는데 이번에도 개발자도구의 고급테크닉이라기 보다는 사용법 소개에 초점이 맞추어져 있습니다. 참가자중에 웹개발을 안하시는 분들이 꽤 계셨던 것인지 개발자도구에서 웹페이지를 동적으로 다루는 것에 사람들이 놀라는걸 보고는 약간 당황하기도 했습니다.(왠지 제가 아는건 다들 알고 있는것 같아서...)



About go : 김종민(Go 한국 커뮤니티 운영자)
구글이 2009년 발표했던 Go 프로그래밍 언어에 대한 소개였습니다.

Go는 2007년 9월에 구글의 20% 프로젝트로 시작되어 2008년 5월 풀타임 프로젝트로 승격되고  2009년 정식으로 발표를 하게 됩니다. 현재는 r59 안정버전입니다. 구글이 왜 새로운 언어를 만들었는가 하면 하드웨어의 발전에 비해서 소프트웨어의 발전이 현저히 느리고 의존성관리가 상당히 중요하며 기존의 가비지 컬렉터가 그다지 좋지 않는 등의 이유가 있다고 합니다. 그래서 Go에는 긍정적인 요소들을 집어넣었는데 프로그래밍하는 재미를 느낄 수 있게 하였고 정적타입이지만 동적타입처럼 느껴지며 가비지 컬렉터를 지원하고 기계어로 컴파일되기 때문에 빠르다는 요소들입니다.


package main

import "fmt"

func main() {
  fmt.Println("Hello World")
}

위 코드는 헬로월드 코드입니다. 변수는 var i int 처럼 정의하는데 특이하게 타입을 변수명 뒤쪽에 작성해 줍니다. 함수는 func f() {}와 같이 선언하며 함수에서는 여러타입을 한꺼번에 리턴할 수 있다고 합니다. Go의 팩키지들은 여기서 볼 수 있습니다.

goroutine등 여러가지 설명해 주시기는 했는데 문법위주의 설명이다 보니 정리하기가 쉽지는 않았습니다. Go에 대해서는 이름정도만 알고 세부적인 것은 전혀 모르고 있었기 때문에 가볍게 언어를 엿본것 만으로도 흥미로왔고 얼핏 본것만으로는 Scala와 접근하는게 약간 유사한 느낌이 들었습니다.(정적과 동적을 섞었다던지 세미콜론을 생략한다던지 하는 등) Go 한국 커뮤니티에서 더 자세한 정보를 얻을 수 있습니다.



푸딩얼굴인식으로 살펴보는 하이브리드앱 제작 사례 : 김민태(KTH)
ibare님의 세션으로 스터디말고 ibare님의 발표를 듣는건 처음인것 같은데 역시 깔끔한 PT는 인상적이었습니다.

하이브리드앱은 디바이스리소스에 HTML, CSS, JavaScript같은 표준 웹기술로 접근해서 앱을 제작하는 것을 이야기하는데 디바이스 리소스에는 Standard Device APIs, Device APIs, Device Elements등으로 접근을 합니다. Device APIs는 비표준이 많아서 현재는 W3C에서 표준화를 진행하고 있는데 이 표준화가 아직은 상당히 느리기 때문에 표준제정이전의 틈새를 메꾸는 역할을 하고 있습니다.

하이브리드앱의 사용을 고려할때 처음에는 표준 웹기술을 사용하기 때문에 네이티브앱보다 쉽게 만들 수 있다고 생각하기 쉬운데 생각보다는 진입장벽이 높습니다. 처음 하이브리드 개발을 하다보면 이 진입장벽때문에 차라리 네이티브앱으로 개발하는게 낫겠다는 생각이 들 정도라고 합니다. 이런 진입장벽은 접근방법 자체가 웹이랑 아주 다르기 때문이고 물론 이런 것을 도와주는 프레임워크나 라이브러리등이 존재 합니다.

하이브리드 프레임워크로는 가장 유명한 PhoneGap이 있고 Appcelerator Titanium도 있는데 Titanium은 폰갭과는 아주 다른 접근방법이 다릅니다. 이 밖에 worklight이나 폰갭을 커스터마이징해서 만든 app mobi가 있습니다. 과거 디바이스 API가 없었기 때문에 폰갭이 이를 지원해 주고 있는데 현재는 표준화가 진행되고 있기 때문에 표준화가 이루어질때까지만 유요한 과도기적인 역할을 하는 것이 아니냐는 이야기가 있는데 app mobi는 그 다음을 타게팅하고 있습니다. 그래서 app mobi는 모바일 클라우드를 지향하며 모바일에서 필요한 빌링, 회원등등의 것을 쉽게 구축할 수 있도록 해주고 있습니다. 그리고 KTH에서 개발한 APPSPRESSO가 있고 APPSPRESSO는 푸딩얼굴인식 하이브리드앱을 개발하는데 사용되었습니다.

하이브리드 앱 개발을 할 때 고려해야할 다음과 같은 체크리스트가 있습니다.

  • 자바스크립트 프레임워크의 사용여부 : 푸딩얼굴인식을 개발하면서 jQuery mobile, jQtouch, Sencha Touch를 다 고려해보았지만 결국 포기했습니다. 만들고자 하는 UI가 확정된 상태에서 UI를 제공하는 이런 류의 프레임워크를 사용할 경우 프레임워크의 UI를 완전히 커스터마이징해야 했기 때문에 그냥 jQuery를 사용하기로 결정하고 필요한 부분에 마이크로 프레임워크를 사용하기로 결정하였고 스크롤을 위해서 iScroll을 사용하였습니다.
  • 카메라와 갤러리 : 디바이스의 카메라와 갤러리를 사용하기 위해서 표준을 선택할 것이냐 비표준을 선택할 것이냐의 문제입니다. waikiki 디바이스 API가 선택했으며 사용방법이 W3C와 상당히 유사합니다. 표준 API가 폰갭보다는 사용하기가 약간 더 어렵습니다.
  • 이미지를 사용할 것이냐 CSS를 사용할 것이냐 : 디자인 작업에서는 디자이너와 부딪히는 일이 아주 많습니다. 디자이너와 개발자의 관점이 아주 다르기 때문에 이미지를 사용할 것이냐 CSS를 사용할 것이냐 하는데 많은 어려움이 있습니다. 디자이너는 이미지를 선호하는데 이미지로 갈 경우 다양한 해상도에 따라 모든 이미지를 만들어 주어야 하는 어려움이 있어서 개발자는 이미지를 그대로 CSS로 만들어서 적용하지만 개발자가 보기에는 똑같이 만들었지만 디자이너의 눈에는 똑같지 않기 때문에 여기서 많은 논쟁이 발생합니다.(개인적으로 웹디자이너가 보통 웹을 웹으로 보지 않고 출판물정도로 본다고 생각하기 때문에 크게 공감한 부분입니다.)푸딩얼굴인식의 경우에는 개발자가 이겨서(?) CSS를 선택했습니다.
  • Animation과 Transition : 애니메이션이나 트랜지션을 자바스크립트로 할지 캔버스를 사용할지 CSS로 사용할지 선택해야 합니다. 대단한 효과가 아님에도 불구하고 대부분의 안드로이드 폰에서는 성능이 제대로 나오지 않기 때문에 현재 시점에서는 CSS가 답이라고 생각합니다.
  • 스크롤링 : 아이폰만 지원하는 것이 아니라면 iScroll등을 사용하는 것이 좋습니다.
  • 국제화(i18n) : 네이티브앱에 비해서 하이브리드는 웹쪽부분만 국제화를 하면 모든 플랫폼에서 국제화를 적용할 수 있기 때문에 훨씬 편하고 실제로 다국어 적용에 2주정도밖에 걸리지 않았습니다. 특히 푸딩얼굴인식에서는 모두 CSS를 사용했기 때문에 더 빠르게 작업할 수 있었으며 이미지로 했다면 모든 다국어용 이미지를 새로 만들어야 했을 것입니다.

하이브리드앱은 최초 접근에는 상당한 시간이(오히려 네이티브보다 더) 걸리지만 그 이후부터는 다국화 적용이나 다양한 플랫폼의 수정사항을 적용하면서 그 장점이 드러나기 시작합니다. 그리고 게임같이 특수한 경우가 아니라면 네이티브앱 수준으로 성능을 올릴 수 있습니다.

이번 세미나에서 가장 만족스러운 세션이었습니다. 푸딩얼굴인식을 하이브리드로 개발하면서(푸딩얼굴인식은 최초 아이폰 버전만 네이티브로 개발되었으며 이걸 똑같이 구현하는 것을 목적으로 하이브리드앱으로 구현하였으며 안드로이드 버전과 iOS의 다국어 버전은 하이브리드앱으로 만들어져 있습니다.) 실제적으로 느낀 구체적인 경험을 나누어주었기 때문에 다른데서는 얻기 힘든 실용적인 정보들로 가득한 세션입니다. 단순히 하이브리드앱으로 해보자 하는 수준정도가 아닌 하이브리드앱의 한계와 어떻게 하면 더 좋은가를 위해서 엄청난 실험과 테스트를 진행했었는지를 느낄 수 있는 세션이었습니다. 하나의 서비스를 위해서 이렇게 많은 실험과 시도를 할 수 있는 문화가 부럽더군요.



모바일 클라우드 애플리케이션 개발 : Brian Lee(Seoul GTUG 운영자)
자바로 작성하면 자바스크립트까지 만들어주고 자바객체를 클라이언트와 서버가 쉽게 주고 받을수 있는 GWT를 소개하고 앱엔진에 대한 소개로 이어졌습니다. 앱엔진은 얼마전 가격정책이 바뀌어서 사용자들이 좀 동요하고 있는 상황이고 데이터스토어도 내부에서 제공하고 있으며 쉽게 배포할 수 있다는 장점이 있습니다. C2DM은 구글에서 제공하는 푸쉬서버로 실제로 테스트를 하려면 물리적인 서버와 단말기가 필요하며 registration id로 어떤 단말의 어떤 앱인지를 인식할 수 있는 인증 과정이 필요합니다. 이 기술들을 이용해서 만든 예제인 Cloud Task를 보여주셨습니다.

사실 이때부터는 체력이 떨어져서 세션에 많이 집중을 하지 못한 관계로 정리를 제대로 못하겠군요 ㅡㅡ;;



Epilogue
전체적인 느낌은 하이브리드앱세션 말고는 지루한 느낌이 들었습니다.(좀 더웠던 것도 한몫한듯 합니다.) 당초 5시까지 예정되어 있던 세미나도 6시가 넘어서 끝난 것 같고 별도의 공지도 없이 시간표에 있던 LETS는 진행하지 않았고 예정에 없던 아이스브레이킹을 위한 3 keywords가 2세션이후에 갑자기 진행되었기 때문에 진행에 대해서는 별로 만족스럽지 못했습니다. 개인적으로 아이스브레이킹을 별로 안좋아하는 편이기도 하지만 옆사람과 대화할 일이 별로 없는 세미나에서 중간에 갑자기 아이스브레이킹을 하는 것은 좀 당황스러웠고 3 키워즈는 자신을 나타내는 3가지 단어를 적고 돌아가면서 2분씩 계속 얘기하는 것인데 이게 집중된 시간에 빠르게 대화를 하는 것이다 보니 생각보다 피로도가 많이 느껴지고(저같은 타입은 더욱이) 그 이후 세션에도 이 피로도가 좀 영향을 끼친듯 합니다. 물론 세미나에서는 한세션만 건져도 충분히 갈 가치는 있었다고 생각합니다.
2011/09/07 00:35 2011/09/07 00:35