what / why / how we’re engineering at smartstudy

62
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY 박현우 / @lqez 2013-05

Upload: hyun-woo-park

Post on 18-Dec-2014

5.175 views

Category:

Technology


5 download

DESCRIPTION

스마트스터디 창업 3년을 맞이하여, 지난 시간동안 스마트스터디는 무엇을, 왜, 어떻게 개발해왔는가를 정리해보았습니다.

TRANSCRIPT

Page 1: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

WHAT / WHY / HOWWE’RE ENGINEERING AT SMARTSTUDY

박현우 / @lqez2013-05

Page 2: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
Page 3: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

•2010년 6월에 시작했습니다.

•제품과 서비스를 위해서 기술을 파고들며, 최신 기술 자체에 빠져서 허우적거리지 않습니다.

•2013년 5월, 26명이 이 배에 타고 있고,그 중 14명이 코드를 읽고 쓰고 있습니다.

우리는“서비스에 미쳤어요”

Page 4: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

스마트스터디는

무엇을 하는지, 그걸 왜 하는지,그리고 어떻게 하고 있는지.

Page 5: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

그래서, 무엇을

Page 6: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

무엇을

이런 걸 만들었습니다.}•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

Page 7: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

그런데 왜

Page 8: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

모바일 앱의 시장은 공평합니다. 누구나 앱을 만들어 글로벌 시장에 내놓아 경쟁할 수 있습니다.

: 우리는 300개 이상의 앱을 만들어 글로벌 시장에 출시했습니다.

Page 9: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

서비스의 성공은 사용자의 행동을 유심히 보고, 얘기를 귀기울여 듣는데 있다고 알고 있습니다.

:다중 접속 온라인 게임을 10년 이상 서비스 하며 얻은 경험을 살려 모바일에서도 실천하고 있습니다.

•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

Page 10: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

로그는 그저 로그일 뿐입니다.이를 가공해, 시각적인 데이터로 만들어야 의미가 있습니다.

:우리는 로그를 다듬어 데이터로 만들고, 다시 정보로 가공한 후에 이를 통해 통찰력을 얻습니다.

•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

Page 11: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

모바일 서비스의 푸시 메세지는 과거 이메일과 같습니다.심지어 더 강력합니다.

:우리는 자체적인 푸시 토큰 수집데이터베이스와 대용량 메세지 발송 시스템을 만들었습니다.

•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

Page 12: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

웹은 모든 플랫폼에서 동작하는 가장 완전한 기반이 됩니다.

골치아픈 업데이트도 필요 없이요.:

HTML5 위에서, Django와 같은 높은 생산성을 자랑하는 웹 개발 도구를 이용하고 있습니다.

•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

Page 13: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

오픈 소스는 단순한 코드의 공유를 넘어서는, 개발자의 문화입니다.

:우리는 오픈소스를 널리 사용하고 우리의 코드도 공유하고 있습니다.

•모바일 앱

•로그 수집기

•로그 분석기

•푸시 솔루션

•웹 기반 도구

•오픈 소스

Page 14: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

그러면 어떻게

Page 15: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

Page 16: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

OpenGLNativeWeb

Page 17: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

OpenGLNativeWeb

Page 18: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

OpenGLNativeWeb

어떻게/ 모바일 앱

Page 19: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

OpenGLNativeWeb개발에는 경계나 정해진 룰이 없습니다.최적의 아키텍처를 골라 사용합니다.

Page 20: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

iOS / AndroidNative API

OpenGL

SMARTSTUDY 라이브러리

Cocos2d-x

C/C++

NDKPythonHTML

JavascriptCSS

모바일 앱 & 서비스

Page 21: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱개발자 Z

iOS Android

개발자 M

iOS Android Web

개발자 B

Android Windows

개발자 H

iOS Android Bada

Page 22: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱개발자 Z

iOS Android

개발자 M

iOS Android Web

개발자 B

Android Windows

개발자 H

iOS Android Bada

다양한 플랫폼에서 개발하고 있기 때문에,모든 개발자는 둘 이상의 플랫폼을 담당합니다.

Page 23: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

•플랫폼을 구축하려하지 않고, 각각의 앱과 콘텐츠에 집중했던 것.

•윈도우 스토어나 스마트 TV 등의 비주류 플랫폼에도 진출하여 좋은 관계를 맺은 것.

•모든 개발자가 ‘주 플랫폼’ 외에 ‘부 플랫폼’을 익혀 대응하고 있는 것.

잘한 점

Page 24: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

•플랫폼 독립적인 엔진, 라이브러리나 미들웨어를 충실히 가지지 못한 것.

•너무 많은 앱을 서비스하고 있는 것.

•개발자에게 여러 플랫폼으로 강요하고 있는 것은 아닌지?

못한 점

Page 25: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 모바일 앱

•각각의 앱과 서비스에 코드 베이스는 많이 가지고 있으므로,

•잘 정리해서 모두가 각자의 바퀴를 만들지 않고 쓸 수 있도록 하기.

•문서화, 문서화, 문서화, 그리고 문서화...그리고 널리 공유하기.

앞으로

Page 26: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

Page 27: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

•전통적인 RDB + NoSQL 의 결합.

•MySQL InnoDB / MyISAM 와 함께MongoDB 를 이용해 로그를 저장하고 분석하고 있습니다.

Page 28: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

초당 230 건

하루에 약 20,000,000 건

하루에 약10GB 정도

Page 29: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

이제까지

30억건의 로그를 수집하고 있습니다

Page 30: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
Page 31: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

Server

Apache httpd

mod_php

Server

Redis

Apache httpd

mod_php

Predis

Server

Apache httpd

mod_php

PredisPredis

Page 32: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

ReplicaSet

Secondary Secondary

Primary

Redis

Page 33: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

PV / UVDAU / MAUPU / ARPUNRU / RR

ReplicaSet

Page 34: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

참고

Redis, MongoDB and MySQL모바일 애플리케이션 서비스에서의 로그 수집과 분석

링크 : http://www.slideshare.net/lqez/redis-mongodb-mysql영상 : http://youtu.be/NYtRr2URAkI

Page 35: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

•각각의 시스템 장애를 허용하도록 한 것.

•서버의 장애나 네트워크 문제로 클라이언트가 로그를 보내는데 실패해도, 로컬 저장소에 저장해 나중에 다시 보내는 것.

•MongoDB 점검 중에도 Redis에서 로그를 보관하고 있다, 복원된 후에 쓰도록 한 것.

잘한 점

Page 36: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

•다양한 형태의 로그를 테이블 생성 없이MongoDB를 통해 손쉽게 쌓았던 것.

•장시간의 ‘ALTER TABLE’ 등으로 고민하는 일이 없어졌던 것.

•MySQL로 이전한 후에 SQL을 통한 분석 작업도 익숙했던 점.

잘한 점

Page 37: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

•하나의 콜렉션(테이블)에 모든 로그를 담았던 것.

•MongoDB의 Lock 과 관련된 문제들.

•MongoDB 로부터 분석을 위해 MySQL 로 옮기는데 너무 많은 시간과 비용이 발생.

못한 점

Page 38: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 로그 수집과 분석

•여러 콜렉션으로 잘게 나눠서 넣을 것.

•2.1 버전에 추가된 통계 프레임워크 사용하기.

•짧은 키(key) 이름을 사용할 것.

•메모리와 SSD 장비를 추가하는 일.

•여전히 Lock은 문제가 되므로, 용도에 따라 물리적으로 장비를 나누기.

앞으로

Page 39: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 푸시 솔루션

Page 40: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 푸시 솔루션

•APNS, GCM, C2DM 을 지원합니다.

•초당 200 개의 토큰을 수집.

•2천만개의 토큰을 MongoDB에 보관.

•로그 수집 시스템과 유사한 형태입니다.

Page 41: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 푸시 솔루션

•개인 정보를 제외한 기기의 언어 설정, 시간대, 앱 버전 정보 등을 같이 수집합니다.

•예약 시스템을 통해, 특정 대상에게 푸시 메세지를 전송하고 있습니다.

•한 달에 약 3천만 건 정도를 발송합니다.

•Urban Airship 등의 외부 푸시 솔루션의 약 $3,000 에 상응합니다.

Page 42: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 푸시 솔루션

•다른 서비스 데이터베이스들과 분리되어 독립적으로 동작하고 있습니다.

•다른 서비스와 유기적으로 결합되어, 더 밀접한 형태의 푸시 메세지 전송을 하는 것이 필요합니다.

•기기의 타임존에 따른 푸시 예약 발송 기능.

앞으로

Page 43: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 웹 기반 도구

Page 44: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 웹 기반 도구

•웹은 복잡한 도구를 빠르게 만들어 공급하는데 최선의 플랫폼입니다.

•Python과 PHP를 사용하고 있으며, 백엔드 프레임워크로 Django와 Flask를 주로 사용합니다.

•그리고 - 뻔한 얘기지만 - 프론트엔드에서 jQuery, Bootstrap, Google Chart 등을 사용하고 있습니다.

Page 45: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

참고

만화 서비스 제작 후기“넝쿨째 굴러온 김성모”

링크 : http://www.slideshare.net/lqez/ss-14820081영상 : http://youtu.be/-TEyIAqAB_E

Page 47: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 웹 기반 도구

•다양한 도구들에서 공통적으로 사용하는 Authentication 과 Authorization 이 정의되어 있지 않습니다.

•위에 대응하여 OAuth2 를 이용한 라이브러리를 제작하고 있습니다.

앞으로

Page 48: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 오픈 소스

Page 49: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 오픈 소스

•오픈 소스는 단순한 코드 공유나 라이센스 문제가 아닙니다.

•오픈 소스는 해커들의 문화입니다.

•우리는 오픈 소스를 널리 사용하고 있을 뿐 아니라,

•내부 라이브러리나 도구들을 만들 때에도 오픈 소스로 진행하는 것을 권장합니다.

Page 50: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 오픈 소스

•여기에 다 나열하기도 어렵습니다.

• Linux, OpenLDAP, Redmine, Cacti, Nginx, MySQL, MongoDB, watch, ImageMagicK, ffmpeg, libx264, OpenSSH, awk, sed, find, Python, wget, Celery, PHP, tar, gzip, curl, zlib, iptables, Django, Flask, Werkzeug, vim, fabric, eventlet, Sentry, django-debug-toolbar, Bootstrap, jQuery, Postgres, Redis, uWSGI...

Page 51: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 오픈 소스

•미약하지만, 오픈 소스에 참여하고 있습니다.

• npk : Neat package library

• https://github.com/lqez/npk

• django-project-layout

• https://github.com/smartstudy/django-project-layout

• FormEncode-Jinja2

• https://github.com/Kroisse/FormEncode-Jinja2

Page 52: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 오픈 소스•코드 외에, 실습 세션을 열어 오픈 소스 커뮤

니티에 보답하고 있습니다.

•2012 년 8월, 외부 개발자들을 대상으로 ‘Django In Action’을 진행했습니다.

•40 여명의 개발자들이 이틀 동안, 4시간 에 걸쳐, Python 설치부터 시작하여 Django 를 익히는 시간을 가졌습니다.

• http://blog.naver.com/ez_/140166283139

Page 53: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

어떻게/ 오픈 소스

•더 많은 코드를 오픈 소스화 합니다.

•더 많은 실습 세션을 진행합니다.

•다양한 개발자 컨퍼런스의 스폰서가 됩니다.

•사용하고 있는 우수한 오픈 소스 프로젝트에 공헌합니다.

앞으로

Page 54: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

그리고,•아마존 웹 서비스 CloudFront 사용기

• http://www.slideshare.net/lqez/using-cloud-front-with-s3-at-smartstudy

•만화 서비스 제작 후기• http://blog.naver.com/ez_/140157300770 (in Korean)

•Django + Sentry 사용하기• http://blog.naver.com/ez_/140177157684 (in Korean)

•모바일 기기를 위한 테스트 환경 구축• http://www.slideshare.net/lqez/ss-20901287 (in Korean)

Page 55: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

지금까지는단지 시작일 뿐

Page 56: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

대단하거나 우아한 플랫폼이 아니라

좋은 제품을 만듭니다

Page 57: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

콘텐츠는 플랫폼을 이기며,

재능을 지배하는 것은 경험입니다.

Page 58: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

그래서,

Page 59: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

우리의가장큰 자산은

Page 60: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

당신과 나,

Page 61: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

We, Human do make it works.코드 조각이나 튜링 머신이 하는게 아닙니다.

Page 62: WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY

WHAT / WHY / HOWWE’RE ENGINEERING AT SMARTSTUDY아직도 할 일

이,

잘 하고 싶은 일이

정말 많습니다!

박현우 / @lqez2013-05