oss개발자 포럼 캠프

310

Click here to load reader

Upload: hakbeom-hwang

Post on 20-Jun-2015

1.405 views

Category:

Engineering


6 download

DESCRIPTION

2014 OSS 개발자 캠프(성균관 대학교)

TRANSCRIPT

Page 1: OSS개발자 포럼 캠프
Page 2: OSS개발자 포럼 캠프

그럴듯해 보이는 목차

• SW 개발자의 종류

• 개발자가 되기 위한 기본적 지식

• 성장하기

Page 3: OSS개발자 포럼 캠프

SW 개발자의 종류

• 이런 얘기를 하는게 아닙니다.

• 좋은 개발자, 나쁜 개발자

• 서버개발자, 웹개발자, 모바일 개발자, PM..

Page 4: OSS개발자 포럼 캠프

SW 개발자의 종류

• 이런 얘기를 할꺼에요

• 대기업 개발자, 중소기업 개발자, 해외 개발자

• 어차피 개발자가 하는 일은 비슷해요

Page 5: OSS개발자 포럼 캠프

개발자가 되기 위한 기본지식

• 이런 얘기는 안해요

• 자료구조, OS, 데이터베이스, C, Java

Page 6: OSS개발자 포럼 캠프

개발자가 되기 위한 기본지식

• 이런 얘기 할꺼에요

• Mobile, Web, Back-end, Front-End

Page 7: OSS개발자 포럼 캠프

성장하기

!

• 훌륭한 개발자가 되기 위한 가이드를 제시합니다.

• 잘 먹고 잘 살기를 기원합니다.

Page 8: OSS개발자 포럼 캠프
Page 9: OSS개발자 포럼 캠프

하필이면 개발자를..?

Page 10: OSS개발자 포럼 캠프

우리는 누구?

Page 11: OSS개발자 포럼 캠프

• 학생?

• 개발자?

• 기획자?

• 아들? 딸?

• 잠재적 군인?

Page 12: OSS개발자 포럼 캠프
Page 13: OSS개발자 포럼 캠프

아직은 잘 모르지만 누구든 될 수 있다.

Page 14: OSS개발자 포럼 캠프

정말 개발을 좋아하는 삶

Page 15: OSS개발자 포럼 캠프
Page 16: OSS개발자 포럼 캠프

어쩔수 없이 돈때문에..

Page 17: OSS개발자 포럼 캠프
Page 18: OSS개발자 포럼 캠프

이유야 어쨌든 개발자는

Page 19: OSS개발자 포럼 캠프

돈을 법니다.

Page 20: OSS개발자 포럼 캠프

왜?

Page 21: OSS개발자 포럼 캠프

• 먹고 살아야 하고

• 결혼도 하고

• 차도 사고

• 부모님 용돈도 드리고

• 여행도 가고

• 학자금도 값고..ㅠㅠ

Page 22: OSS개발자 포럼 캠프

대기업 느님

Page 23: OSS개발자 포럼 캠프

나머지는?

Page 24: OSS개발자 포럼 캠프

중소기업 시작너 자신을 믿어라(Be Yourself)

-샘 올렌스(조지아주 법무장관)

Page 25: OSS개발자 포럼 캠프

갈 곳이 없다…너 자신을 알라

- 그리스 격언

Page 26: OSS개발자 포럼 캠프

한국 IT 80%를 차지하는 SI

Page 27: OSS개발자 포럼 캠프

SI에 가면 뭐해요?

Page 28: OSS개발자 포럼 캠프

제 경우를 예를 들자면 - 아무생각없이 놀았습니다

Page 29: OSS개발자 포럼 캠프
Page 30: OSS개발자 포럼 캠프

• 밴드도 하고

• 스쿠버도 하고

• 인라인도 타고

• 검도도 하고

• 바이크도 타고

Page 31: OSS개발자 포럼 캠프

그러다 보니…

• 2009 년 30살의 나이로 졸업

Page 32: OSS개발자 포럼 캠프

동시에 서브프라임

Page 33: OSS개발자 포럼 캠프

서브 프라임?

Page 34: OSS개발자 포럼 캠프

100 여군데 이력서를 넣고.. !

하청업체라 불리는곳에 합격.

Page 35: OSS개발자 포럼 캠프

하청업체?

Page 36: OSS개발자 포럼 캠프
Page 37: OSS개발자 포럼 캠프

그건 아청이고…

Page 38: OSS개발자 포럼 캠프

그럼 하청은?

Page 39: OSS개발자 포럼 캠프
Page 40: OSS개발자 포럼 캠프

아 그렇군!!!

Page 41: OSS개발자 포럼 캠프

농협카드와 함께 봄날을 맞이함

Page 42: OSS개발자 포럼 캠프

구조

• 농협 - 농협정보시스템 - LGCNS - 회사 - 나

Page 43: OSS개발자 포럼 캠프

내가 생각했던 직장인 !

특히 금융권

Page 44: OSS개발자 포럼 캠프
Page 45: OSS개발자 포럼 캠프

프로젝트 투입

Page 46: OSS개발자 포럼 캠프
Page 47: OSS개발자 포럼 캠프

입사1년만에 5일의 휴가를 받음…

Page 48: OSS개발자 포럼 캠프

다시 프로젝트 투입

Page 49: OSS개발자 포럼 캠프

가능할까?

• 집 -> 회사 1시간 30분

• 1시~2시 퇴근

• 9시 정시 출근

• 토요일은 기본, 일요일은 옵션

Page 50: OSS개발자 포럼 캠프

애가 생겼어요!!병원에 다녀야 해요..

Page 51: OSS개발자 포럼 캠프

충격적인 비밀을 들음

• 차세대를 하면 산부인과에 같이 못감

• 애 얼굴을 자주 못봄

• 돈이 많이 필요함

• 이게 평생 될꺼임.

Page 52: OSS개발자 포럼 캠프

목표가 생김(나름 대기업 간판)

Page 53: OSS개발자 포럼 캠프

입사할 수는 있으나.

• 오지 말라고 함

• 거기서 거기

Page 54: OSS개발자 포럼 캠프

이 바닥을 뜨자!!!

Page 55: OSS개발자 포럼 캠프

꺼져 이노무 회사!!!

Page 56: OSS개발자 포럼 캠프

살암인, 잡콜이야

Page 57: OSS개발자 포럼 캠프

대세는 웹, 모바일

Page 58: OSS개발자 포럼 캠프

갈곳이 없음..Java 못함

C 못함 웹은 뭔지. 모바일??? 엔지니어?

Page 59: OSS개발자 포럼 캠프

다 필요없고..

• 연봉/복지 안따짐

• 정시 퇴근만 하면 됨.

• 경력 세탁은 내가 할꺼임

Page 60: OSS개발자 포럼 캠프

처음으로.. !

집에 6시 30분에 도착..

회사를 옮겼더니

Page 61: OSS개발자 포럼 캠프

대학원, 스터디, 개발자 모임

Page 62: OSS개발자 포럼 캠프
Page 63: OSS개발자 포럼 캠프

Now..• 제 직책은.

• 두 아들의 아빠

• 10시에 어린이집

• 장보기

• 4시에 어린이집

• 백수

Page 64: OSS개발자 포럼 캠프

Now..

• 오픈 프론티어 멤버

• URQA- 오픈소스 커미터

• Fullstack 개발자

• 할줄 아는거: javascript, angularJS, ruby, python, go, redis, MongoDB, Scala, android, etc..

Page 65: OSS개발자 포럼 캠프

만족하며 살고 있음.

Page 66: OSS개발자 포럼 캠프

애초에 대기업을 가지?

Page 67: OSS개발자 포럼 캠프

대기업을 갑시다!!!

Page 68: OSS개발자 포럼 캠프
Page 69: OSS개발자 포럼 캠프

엄청 많음!!! !

!

하지만 들어가고 못들어가고 문제가 아니라

Page 70: OSS개발자 포럼 캠프

실제 수행업무가 중요!!

Page 71: OSS개발자 포럼 캠프

1000 ft View

Page 72: OSS개발자 포럼 캠프

• 군대 문화

• 술, 회식

• 정치

Page 73: OSS개발자 포럼 캠프

외국 회사로!!

Page 74: OSS개발자 포럼 캠프

훨신 더 많아!!!

Page 75: OSS개발자 포럼 캠프

채용 프로세스• 서류 면접

• 전화 면접

• 온사이트 (On-site) 면접

• 최소 3회 - 7 회

• 최소 5시간 - 12시간

Page 76: OSS개발자 포럼 캠프
Page 77: OSS개발자 포럼 캠프

프리랜서Free + Lancer

Page 78: OSS개발자 포럼 캠프

프리랜서 = 용병

Page 79: OSS개발자 포럼 캠프

SI 산업금융, 통신, 공공, 의료

Page 80: OSS개발자 포럼 캠프

사회 현상의 흐름을 파악

Page 81: OSS개발자 포럼 캠프

항상 새로운 것

• 새로운 업무 환경

• 새로운 사람들

• 새로운 업무

Page 82: OSS개발자 포럼 캠프

돈?

• 초급: 20대 후반

• 중급: 30대 초반

• 고급: 30대 후반

Page 83: OSS개발자 포럼 캠프

돈?

• 대한민국 평균 연봉보다 많다.

• IT 산업군과 비교해도 많다.

Page 84: OSS개발자 포럼 캠프

돈?

• 단, 퇴직금 제외

• 복지도 제외

Page 85: OSS개발자 포럼 캠프

경력?

Page 86: OSS개발자 포럼 캠프

경력?

• 원하는 경력대로 커리어 패스를 찍을 수 있다.

• 한 업무에 정통하면 인정받으면서 일할 수 있다.

• 찾지 않아도 찾아온다.

Page 87: OSS개발자 포럼 캠프

경력?• 단, 스킬을 잘못 찍으면 망한다.

Page 88: OSS개발자 포럼 캠프

경력?• 인생은 디아블로가 아님..

Page 89: OSS개발자 포럼 캠프

안정된 고용환경

Page 90: OSS개발자 포럼 캠프

업무 환경

Page 91: OSS개발자 포럼 캠프

업무 환경• 이직이 쉬움

Page 92: OSS개발자 포럼 캠프

안좋은점

Page 93: OSS개발자 포럼 캠프

일자리

Page 94: OSS개발자 포럼 캠프
Page 95: OSS개발자 포럼 캠프

계약직

Page 96: OSS개발자 포럼 캠프

전문성

Page 97: OSS개발자 포럼 캠프
Page 98: OSS개발자 포럼 캠프

다 잘해야함.. !

노래, 춤은 기본 !

SSD도 혼자 교체, 손글씨, 양궁

Page 99: OSS개발자 포럼 캠프

Requirement• 프로그래밍 실력은 기본

• 업무에 대해서도 빠삭해야 하고

• 전화응대도 잘해야 하고

• 분위기도 잘 맞춰줘야 하고(사무실, 회식)

• 치킨도 잘 튀겨야….

Page 100: OSS개발자 포럼 캠프

방법론

Page 101: OSS개발자 포럼 캠프

원래는 이렇게..

Page 102: OSS개발자 포럼 캠프

실제는…

그런게 어딨어.. 그냥 하는거지

Page 103: OSS개발자 포럼 캠프

일정

Page 104: OSS개발자 포럼 캠프
Page 105: OSS개발자 포럼 캠프

상황이 이러다 보니..

집에 못감..

Page 106: OSS개발자 포럼 캠프

일정이 이러다 보니..

Page 107: OSS개발자 포럼 캠프

!

개발자가 가고 싶은 회사들..

Page 108: OSS개발자 포럼 캠프
Page 109: OSS개발자 포럼 캠프
Page 110: OSS개발자 포럼 캠프

필요한 기술들..

• 면접: 기본 3차 ~ 7차

• 스킬: Java, JS, C, C++, php, python, ruby, object-C HTML5, CSS, etc..

Page 111: OSS개발자 포럼 캠프

못감..

Page 112: OSS개발자 포럼 캠프

좋은 회사의 기준은

먹고 살만한 월급 !

최신 장비 !

기술 습득 !

이라고 보통 생각함 !

Page 113: OSS개발자 포럼 캠프

방법? !

회사를 차리던가..

Page 114: OSS개발자 포럼 캠프

회사를 차리든. !

회사에 입사를 하든. !

알면 도움이 되는 기본 지식들..

Page 115: OSS개발자 포럼 캠프

Python. -Language

Page 116: OSS개발자 포럼 캠프

Framework?

Page 117: OSS개발자 포럼 캠프

소프트웨어 프레임워크(software framework)는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조(骨組), 프레임워크(framework)라고도 한다.

Page 118: OSS개발자 포럼 캠프

Full Stack

Server, Network, and Hosting Environment. Data Modeling Business Logic API layer / Action Layer / MVC User Interface User Experience Understanding what the customer and the business need. 납땜에서 영업까지

Page 119: OSS개발자 포럼 캠프

1인 기업

Page 120: OSS개발자 포럼 캠프

프로그래밍 언어• 언어는 내 생각을 구현하기 위한 도구

• 모바일 - Java, Objective C, C#

• 웹서버 - CGI, ASP, PHP, JAVA

• 게임 - C#, C++

• 디자인? - 포토샵, 일러스트레이터, 페인트?

• 관리 - 엑셀, 파워포인트

Page 121: OSS개발자 포럼 캠프

프레임워크

• Ruby - Rails, Sinatra

• Python - Django, Flask

• Java - Spring, Spark

• C# - .Net, Micro

Page 122: OSS개발자 포럼 캠프

왜?

Page 123: OSS개발자 포럼 캠프

영역이 다르다

Page 124: OSS개발자 포럼 캠프

• DB - Backend - Frontend - UX - 고객

• 영역 별로 사용하는 언어가 다름

Page 125: OSS개발자 포럼 캠프

과장님은 엑셀로 이야기해요

Page 126: OSS개발자 포럼 캠프

고객

• Design

• Speed

• UI/UX

• Pay

Page 127: OSS개발자 포럼 캠프

UI/UX(기획자)

• UI/UX

• Cost

• Cash Cow

Page 128: OSS개발자 포럼 캠프

Front-end

• Fast Script

• Layout

• Dynamic

Page 129: OSS개발자 포럼 캠프

Back-end

• High Availability

• High Tech

• Simple/Complex

• High Performance

Page 130: OSS개발자 포럼 캠프

Database

• Shard

• Replication

• Data

Page 131: OSS개발자 포럼 캠프
Page 132: OSS개발자 포럼 캠프
Page 133: OSS개발자 포럼 캠프

1000 ft View개략적으로 살펴봅시다

Page 134: OSS개발자 포럼 캠프

뭐 먹고 살지 고민중… !

아이디어가 하나 떠오름!!!

Page 135: OSS개발자 포럼 캠프

웹 페이지도 만들고 !

앱도 하나 만들어야징!!

Page 136: OSS개발자 포럼 캠프

대박 날것 같음!!

Page 137: OSS개발자 포럼 캠프

당연한 얘기지만.

• 컴퓨터 부터 구입…

• 혹은 집에 있는 컴퓨터.

• 또는 학교

Page 138: OSS개발자 포럼 캠프

당연한 얘기지만.

• 언어를 배워야함

Page 139: OSS개발자 포럼 캠프

code school

Page 140: OSS개발자 포럼 캠프
Page 141: OSS개발자 포럼 캠프

code academy

Page 142: OSS개발자 포럼 캠프

code.org

Page 143: OSS개발자 포럼 캠프

lynda.com

Page 144: OSS개발자 포럼 캠프

일단 게시판부터…

• HTML로 만들고

• 로그인 기능 추가해서 게시판 만들어야지

Page 145: OSS개발자 포럼 캠프

게시판 글을 어딘가 저장을… 해야 하네?

Page 146: OSS개발자 포럼 캠프

데이터 베이스

• 데이터베이스(database)는 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.

• 무료로 제공되는 Mysql 로 시작..

Page 147: OSS개발자 포럼 캠프

게시판 만들고 DB 연결 했더니..

Page 148: OSS개발자 포럼 캠프
Page 149: OSS개발자 포럼 캠프

뭔가 이쁘게 만들어 봐야 겠다..

Page 150: OSS개발자 포럼 캠프

bootstrap foundation skeleton

gumbyframework

CSS frameworks are pre-prepared software frameworks that are meant to allow for easier, more standards-compliant web

design using the Cascading Style Sheets language

Page 151: OSS개발자 포럼 캠프
Page 152: OSS개발자 포럼 캠프
Page 153: OSS개발자 포럼 캠프
Page 154: OSS개발자 포럼 캠프

그럴듯하게 페이지를 만듬

Page 155: OSS개발자 포럼 캠프

문제는..

• 개인 컴퓨터(집, 학교)는 항상 켜놓아야 함…

• 호스팅을 알아봄

Page 156: OSS개발자 포럼 캠프
Page 157: OSS개발자 포럼 캠프

페이스북 만큼은 아니지만..그래도.. 사람들이 꾸준히 들어옴

Page 158: OSS개발자 포럼 캠프

요청도 들어옴

• 페이스북으로 로그인 하게 해주세요

• 채팅 할수 있게 해주세요

• 바로가기 메뉴 추가 해주세요.

• 모바일도 추가해 주세요

Page 159: OSS개발자 포럼 캠프

로그인 연동시키자 openID, auth

Page 160: OSS개발자 포럼 캠프

• OpenID (OID) is an open standard and decentralized protocol by the non-profit OpenID Foundation that allows users to be authenticated by certain co-operating sites (known as Relying Parties or RP) using a third party service

!

• OAuth is an open standard for authorization.

Page 161: OSS개발자 포럼 캠프

사이트가 자꾸 죽어요

Page 162: OSS개발자 포럼 캠프

이유?

Page 163: OSS개발자 포럼 캠프
Page 164: OSS개발자 포럼 캠프
Page 165: OSS개발자 포럼 캠프

튜닝

Page 166: OSS개발자 포럼 캠프

Load Balance

Page 167: OSS개발자 포럼 캠프

Load Balance

Page 168: OSS개발자 포럼 캠프

어느 정도까지는 커버됨. - 모바일이 추가 되기 전까지

Page 169: OSS개발자 포럼 캠프

모바일을 대응하기 위해• REST-API!

• 2000년 로이 필딩(Roy Fielding)이 박사학위 청구 논문에서 REST(Representational State Transfer)를 소프트웨어 아키텍처 스타일로 제안한 후 OPEN API를 개발하는 기본으로 급속도로 확산되고 있다.!

!

• REST는 SOAP이 서비스 지향 구조인 것과 달리 자원지향구조(ROA: Resource Oriented Architecture)로 웹 사이트의 컨텐츠(Text, 이미지, 동영상), DB의 내용 등을 전부 하나의 자원으로 파악하여 각 자원의 고유한 URI(Uniform Resource Identifier)를 부여하고, 해당 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 HTTP의 기본 명령어인 POST, GET, PUT, DELETE를 통해서 처리한다.

Page 170: OSS개발자 포럼 캠프

REST!!!

Page 171: OSS개발자 포럼 캠프

Sinatra

Page 172: OSS개발자 포럼 캠프

Flask

Page 173: OSS개발자 포럼 캠프

Django + python

MySQL

현재상황..

Page 174: OSS개발자 포럼 캠프

갑자기����������� ������������������  증가하는����������� ������������������  사용자Ideal

Page 175: OSS개발자 포럼 캠프

또한번의 튜닝

Page 176: OSS개발자 포럼 캠프
Page 177: OSS개발자 포럼 캠프

Load Balancer

REST REST REST

MariaMysql Mongo …

Scalability

변하는����������� ������������������  요구조건

앞으로����������� ������������������  가야할����������� ������������������  상황..

Page 178: OSS개발자 포럼 캠프

아… 혼자는 못하겠다. -팀웍

Page 179: OSS개발자 포럼 캠프

필요한 툴들이슈 트래커

Page 180: OSS개발자 포럼 캠프

trello.com

Page 181: OSS개발자 포럼 캠프
Page 182: OSS개발자 포럼 캠프

unfuddle.com

Page 183: OSS개발자 포럼 캠프
Page 184: OSS개발자 포럼 캠프
Page 185: OSS개발자 포럼 캠프
Page 186: OSS개발자 포럼 캠프

pivotal tracker

Page 187: OSS개발자 포럼 캠프
Page 188: OSS개발자 포럼 캠프

사람도 확보했고..

Page 189: OSS개발자 포럼 캠프

Worker

Page 190: OSS개발자 포럼 캠프

Queue

Page 191: OSS개발자 포럼 캠프

URQA - 실습편

• URQA - Android Crash report

• 350개 개인/업체 사용중

Page 192: OSS개발자 포럼 캠프

URQA Committers

Page 193: OSS개발자 포럼 캠프

무료 어플리케이션

개인69%

회사31%

유료 어플리케이션

개인75%

회사25%

안드로이드����������� ������������������  마켓����������� ������������������  개발자����������� ������������������  현황

개인����������� ������������������  개발자:����������� ������������������  73%

Page 194: OSS개발자 포럼 캠프

출처 : http://offers2.compuware.com/rs/compuware/images/Mobile_App_Survey_Report.pdf

50% 이상이 앱이 죽거나 멈추거나!느려지는 문제를 겪는다.

Page 195: OSS개발자 포럼 캠프

출처 : http://offers2.compuware.com/rs/compuware/images/Mobile_App_Survey_Report.pdf

Page 196: OSS개발자 포럼 캠프

사후����������� ������������������  크래쉬����������� ������������������  리포트����������� ������������������  서비스로����������� ������������������  ����������� ������������������  

그나마����������� ������������������  다양한����������� ������������������  문제를����������� ������������������  대처할수����������� ������������������  있음

Page 197: OSS개발자 포럼 캠프

BugSense����������� ������������������  77%

Airbrake����������� ������������������  0%

zubhium����������� ������������������  0%

HockeyApp����������� ������������������  2%

Crittercism����������� ������������������  5%

ACRA����������� ������������������  15%

not����������� ������������������  use����������� ������������������  81%

Airbrake����������� ������������������  0%

zubhium����������� ������������������  0%

HockeyApp����������� ������������������  0%

Crittercism����������� ������������������  1%

ACRA����������� ������������������  3%

BugSense����������� ������������������  14%

not����������� ������������������  use����������� ������������������  90%

Airbrake����������� ������������������  0%

Zubhium����������� ������������������  0%

Critticism����������� ������������������  0%

HockeyApp����������� ������������������  0%

ACRA����������� ������������������  3%Bugsense����������� ������������������  

7%

새로운����������� ������������������  앱����������� ������������������  중����������� ������������������  Bug����������� ������������������  report를����������� ������������������  사용하는����������� ������������������  앱

전체����������� ������������������  앱����������� ������������������  중����������� ������������������  Bug����������� ������������������  report를����������� ������������������  사용하는����������� ������������������  앱2013년����������� ������������������  Play����������� ������������������  마켓����������� ������������������  앱����������� ������������������  개수����������� ������������������  

버그리포트����������� ������������������  시장����������� ������������������  점유율

Page 198: OSS개발자 포럼 캠프

왜����������� ������������������  안쓰지?����������� ������������������  불편한가?

Page 199: OSS개발자 포럼 캠프

3~7세����������� ������������������  어린이����������� ������������������  신발����������� ������������������  살때����������� ������������������  기준은?

귀여운����������� ������������������   기능성

Page 200: OSS개발자 포럼 캠프

Pain����������� ������������������  Point

Page 201: OSS개발자 포럼 캠프

비즈니스����������� ������������������  모델����������� ������������������  캔버스는����������� ������������������  창업자들이����������� ������������������  생각한����������� ������������������  가설이고,고객����������� ������������������  개발은����������� ������������������  창업자들이����������� ������������������  생각해낸����������� ������������������  해결책을����������� ������������������  검증하기����������� ������������������  보다는����������� ������������������  창업자들이����������� ������������������  가정한����������� ������������������  문제가����������� ������������������  진짜����������� ������������������  고객의����������� ������������������  문제인지����������� ������������������  검증하는����������� ������������������  것이다!

Steve����������� ������������������  Blank����������� ������������������  !Lean����������� ������������������  Startup의����������� ������������������  아버지����������� ������������������  Customer����������� ������������������  Development����������� ������������������  Method����������� ������������������  저자

Page 202: OSS개발자 포럼 캠프

고객의����������� ������������������  ����������� ������������������  문제를����������� ������������������  해결하자!=

����������� ������������������  우리����������� ������������������  소프트웨어의����������� ������������������  핵심가치����������� ������������������  찾기

Page 203: OSS개발자 포럼 캠프

Sleep����������� ������������������  If����������� ������������������  U����������� ������������������  Can

Page 204: OSS개발자 포럼 캠프

����������� ������������������  Sleep����������� ������������������  If����������� ������������������  U����������� ������������������  Can����������� ������������������  개발자����������� ������������������  신재명����������� ������������������  BugSense사용����������� ������������������  중

사용자가����������� ������������������  앱을����������� ������������������  어떻게����������� ������������������  사용하다����������� ������������������  버그가����������� ������������������  발생����������� ������������������  ����������� ������������������  하였는지����������� ������������������  알����������� ������������������  수����������� ������������������  없어����������� ������������������  ����������� ������������������  

!

버그����������� ������������������  재현에����������� ������������������  ����������� ������������������  많은����������� ������������������  시간����������� ������������������  걸림

기존����������� ������������������  경쟁����������� ������������������  제품의����������� ������������������  한계...

Page 205: OSS개발자 포럼 캠프

기존����������� ������������������  경쟁����������� ������������������  제품의����������� ������������������  한계...

말랑스튜디오����������� ������������������  CEO����������� ������������������  김영호����������� ������������������  

BugSense사용����������� ������������������  중

����������� ������������������  진정����������� ������������������  시급한����������� ������������������  버그가����������� ������������������  무엇인지����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  알����������� ������������������  수가����������� ������������������  없다.����������� ������������������  ����������� ������������������  !����������� ������������������  알람에서����������� ������������������  가장����������� ������������������  시급한����������� ������������������  버그는����������� ������������������  알람����������� ������������������  기능에서����������� ������������������  발생한����������� ������������������  버그이다.����������� ������������������  하지만����������� ������������������  버그의����������� ������������������  발생����������� ������������������  수에����������� ������������������  가려����������� ������������������  진짜����������� ������������������  시급한����������� ������������������  버그를����������� ������������������  노치게����������� ������������������  된다.

Page 206: OSS개발자 포럼 캠프

UrQA는����������� ������������������  모바일����������� ������������������  앱����������� ������������������  개발팀에게����������� ������������������  

크래시를����������� ������������������  빠르게����������� ������������������  대응 버그����������� ������������������  재현����������� ������������������  시간����������� ������������������  ����������� ������������������  절약

가치를����������� ������������������  제공하는데

실시간으로����������� ������������������  에러를����������� ������������������  ����������� ������������������  등급화하여����������� ������������������  리포팅

사용자����������� ������������������  이벤트����������� ������������������  경로����������� ������������������  시각화

를����������� ������������������  통해서����������� ������������������  이루어����������� ������������������  진다.

VALUE

FEATURE

차별화된����������� ������������������  기술력

C/C++����������� ������������������  네이티브����������� ������������������  ����������� ������������������  크래시����������� ������������������  리포트����������� ������������������  제공

Page 207: OSS개발자 포럼 캠프

판단����������� ������������������  기준����������� ������������������  즉����������� ������������������  목적성이����������� ������������������  정립됨

Page 208: OSS개발자 포럼 캠프

그래서����������� ������������������  나온����������� ������������������  소프트웨어

Page 209: OSS개발자 포럼 캠프

버그의����������� ������������������  갯수만을����������� ������������������  강조하는����������� ������������������  View

Page 210: OSS개발자 포럼 캠프

최근에러����������� ������������������  10개만����������� ������������������  보여주는����������� ������������������  데시보드

Page 211: OSS개발자 포럼 캠프

아이콘과����������� ������������������  색을����������� ������������������  ����������� ������������������  이용한����������� ������������������  버그의����������� ������������������  등급����������� ������������������  ,����������� ������������������  갯수표시

Page 212: OSS개발자 포럼 캠프

이벤트����������� ������������������  갯수만을����������� ������������������  강조하는����������� ������������������  View

BugSense����������� ������������������  -����������� ������������������  Events����������� ������������������  View

Page 213: OSS개발자 포럼 캠프

CRASH

버그를����������� ������������������  발생시킨����������� ������������������  사용자����������� ������������������  경로를����������� ������������������  ����������� ������������������  시각화해서����������� ������������������  보여줌

Event����������� ������������������  Path

Page 214: OSS개발자 포럼 캠프

BugSense����������� ������������������  -����������� ������������������  관계없는����������� ������������������  버전����������� ������������������  정보

App����������� ������������������  버전과����������� ������������������  OS����������� ������������������  버전����������� ������������������  둘의����������� ������������������  관계성을����������� ������������������  파악이����������� ������������������  

불가능한����������� ������������������  구조!!

App����������� ������������������  업데이트가����������� ������������������  문제인가?

OS����������� ������������������  버전만의����������� ������������������  문제인가?

이����������� ������������������  App����������� ������������������  버전에서는����������� ������������������  어떤����������� ������������������  OS����������� ������������������  버전이����������� ������������������  문제인가?

Page 215: OSS개발자 포럼 캠프

앱����������� ������������������  버전

OS버전

App����������� ������������������  버전����������� ������������������  대비����������� ������������������  OS버전의����������� ������������������  ����������� ������������������  버그����������� ������������������  발생량을����������� ������������������  보여줌

Page 216: OSS개발자 포럼 캠프

부족한����������� ������������������  통계자료����������� ������������������  한번에����������� ������������������  하나의����������� ������������������  통계만����������� ������������������  볼����������� ������������������  수����������� ������������������  있음...

ACRA����������� ������������������  

Page 217: OSS개발자 포럼 캠프

다양한 통계자료를 기간 별로 한눈에 파악 가능

Page 218: OSS개발자 포럼 캠프

Bugsense,����������� ������������������  Acra����������� ������������������  

Page 219: OSS개발자 포럼 캠프

UrQA

Page 220: OSS개발자 포럼 캠프

Front����������� ������������������  end(view)

Python

Android����������� ������������������  App����������� ������������������  

mysql

Back����������� ������������������  end

JSON

UrQA����������� ������������������  Architecture

Restful����������� ������������������  Service����������� ������������������  (django)

UrQA����������� ������������������  Server

Page 221: OSS개발자 포럼 캠프

사용자의����������� ������������������  폭주로����������� ������������������  ����������� ������������������  

서비스가����������� ������������������  죽었어요!!

Page 222: OSS개발자 포럼 캠프

Front����������� ������������������  end(view)

RabbitMQ

PythonAndroid����������� ������������������  App����������� ������������������  

mysqlXitrum����������� ������������������  (Json����������� ������������������  parser)

Message����������� ������������������  queue

To����������� ������������������  Be����������� ������������������  Architecture

Back����������� ������������������  end

Communicator����������� ������������������  (Json)

Page 223: OSS개발자 포럼 캠프

Part����������� ������������������  3.����������� ������������������  ����������� ������������������   MQ����������� ������������������  Hero의����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  구하기����������� ������������������  

Page 224: OSS개발자 포럼 캠프

MQ가����������� ������������������  다루는����������� ������������������  Data����������� ������������������  속성

����������� ������������������   One����������� ������������������  Way

����������� ������������������   Read����������� ������������������  Only

����������� ������������������   Write����������� ������������������  Only

Page 225: OSS개발자 포럼 캠프

과부하!!

Page 226: OSS개발자 포럼 캠프

Message Queue

<����������� ������������������  JMS(Java Message System)����������� ������������������  Publisher-Subscriber����������� ������������������  방식����������� ������������������  >

Page 227: OSS개발자 포럼 캠프

Why����������� ������������������  MQ?����������� ������������������  

!

����������� ������������������  ����������� ������������������  ����������� ������������������  비동기����������� ������������������  요청을����������� ������������������  Queuing하여����������� ������������������  ����������� ������������������  ����������� ������������������  

����������� ������������������  ����������� ������������������  Subscriber의����������� ������������������  Throughput에����������� ������������������  ����������� ������������������  

����������� ������������������  맞춰����������� ������������������  양을����������� ������������������  조절����������� ������������������  할����������� ������������������  수����������� ������������������  있다

Page 228: OSS개발자 포럼 캠프

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  

����������� ������������������  부하에����������� ������������������  따라����������� ������������������  쉽게����������� ������������������  확장����������� ������������������  할����������� ������������������  수����������� ������������������  있다

Why����������� ������������������  MQ?����������� ������������������  

Page 229: OSS개발자 포럼 캠프

Why����������� ������������������  MQ����������� ������������������  

!

이질적인����������� ������������������  포멧을����������� ������������������  가진����������� ������������������  ����������� ������������������  

Publisher-Subscriber의����������� ������������������  데이터를����������� ������������������  ����������� ������������������  

변환����������� ������������������  (Marshalling,����������� ������������������  Unmarshalling)����������� ������������������  해준다.����������� ������������������  

Page 230: OSS개발자 포럼 캠프

Why����������� ������������������  MQ?����������� ������������������  

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  

다양한����������� ������������������  언어,����������� ������������������  ����������� ������������������  

프레임워크를����������� ������������������  사용하여����������� ������������������  여러����������� ������������������  응용����������� ������������������  프로그램을����������� ������������������  

구축����������� ������������������  할����������� ������������������  수����������� ������������������  있다

Page 231: OSS개발자 포럼 캠프

Front����������� ������������������  end

RabbitMQ

Web����������� ������������������  (View)

Android����������� ������������������  App����������� ������������������  

mysqlXitrum����������� ������������������  (Json����������� ������������������  parser)

Message����������� ������������������  queue

To����������� ������������������  Be����������� ������������������  Architecture

Back����������� ������������������  end

Communicator����������� ������������������  (Json)

Page 232: OSS개발자 포럼 캠프
Page 233: OSS개발자 포럼 캠프

RabbitMQ����������� ������������������  Admin����������� ������������������  

Page 234: OSS개발자 포럼 캠프

Message����������� ������������������  flow

Page 235: OSS개발자 포럼 캠프

Worker

����������� ������������������  ����������� ������������������  ����������� ������������������  Publisher����������� ������������������  

Error!����������� ������������������  

Worker

����������� ������������������  메시지����������� ������������������  처리����������� ������������������  중에����������� ������������������  오류가����������� ������������������  발생한다면!!! 이����������� ������������������  메시지는����������� ������������������  복구����������� ������������������  될����������� ������������������  수가����������� ������������������  없게����������� ������������������  된다!!

Worker가����������� ������������������  메세지를����������� ������������������  씹으면..����������� ������������������  ☹

Page 236: OSS개발자 포럼 캠프

Worker

����������� ������������������  ����������� ������������������  ����������� ������������������  Publisher����������� ������������������  

Worker

!해결책은����������� ������������������  autoAck=false로����������� ������������������  하고����������� ������������������  

Worker가����������� ������������������  작업이����������� ������������������  끝난후에����������� ������������������  ack을����������� ������������������  전달하면����������� ������������������  된다. !

! QueueingConsumer consumer = new QueueingConsumer(channel);

boolean autoAck = false; channel.basicConsumer("hello", autoAck, consumer);

while (true) {  QueueingConsumer.Delivery delivery = consumer.nextDelivery();

// something work..

channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); }

Ack����������� ������������������  전송!

Page 237: OSS개발자 포럼 캠프

Worker

����������� ������������������  ����������� ������������������  ����������� ������������������  Publisher����������� ������������������  

Worker

Server가����������� ������������������  종료(다운)되더라도����������� ������������������  서버에����������� ������������������  보관되어����������� ������������������  있던����������� ������������������  메시지가����������� ������������������  소실되지����������� ������������������  않게����������� ������������������  하는����������� ������������������  방법은??

Server����������� ������������������  Down!!

MQ가����������� ������������������  죽으면..����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ☹

Page 238: OSS개발자 포럼 캠프

Worker

����������� ������������������  ����������� ������������������  ����������� ������������������  Publisher����������� ������������������  

Worker

Channel.queueDelcare 호출시 “durable” 속성을 true로 해주면 메시지가����������� ������������������  소실되지����������� ������������������  않게����������� ������������������  된다.

! boolean durable = true; channel.queueDeclare("hello", durable, false, false, null);

Server����������� ������������������  Down!!

Page 239: OSS개발자 포럼 캠프

Message����������� ������������������  Queue����������� ������������������  사용����������� ������������������  추이

activemq hometqqpidrabbitmq

<����������� ������������������  2014년����������� ������������������  1월����������� ������������������  ����������� ������������������  Google����������� ������������������  Trends����������� ������������������  자료����������� ������������������  >

Page 240: OSS개발자 포럼 캠프

Message����������� ������������������  Queue����������� ������������������  List

!• AMQP Homepage http://www.amqp.org/node/

!• ActiveMQ Homepage http://activemq.apache.org/

!• STOMP Protocol Specification http://

stomp.github.com/stomp-specification-1.2.html

!• HornetQ homepage http://www.jboss.org.hornetq !!• RabbitMQ support JMS in the future http://rabbitmq.

1065348.n5.nabble.com/RabbitMQ-support-JMS-in-the-future-td24361.html

• Message Queue Evaluation Notes http://wiki.secondlife.com/wiki/ !• Enabling the ActiveMQ Broker for AMQP http://activemq.apache.org/amqp.html

!• Open JMS Homepage http://openjms.sourceforge.net/

!• Apache Qpid Homepage http://qpid.apache.org/

!• RabbitMQ Homepage http://www.rabbitmq.com/

!• ZeroMQ Homepage http://www.zeromq.org/

Page 241: OSS개발자 포럼 캠프

Part����������� ������������������  3.����������� ������������������  Message����������� ������������������  Queue����������� ������������������  정리

• 부하에����������� ������������������  따라����������� ������������������  쉽게����������� ������������������  확장����������� ������������������  할����������� ������������������  수����������� ������������������  있다����������� ������������������  ����������� ������������������  • 비동기����������� ������������������  요청을����������� ������������������  Queuing,����������� ������������������  Subscriber의����������� ������������������  Throughput에����������� ������������������  맞춰����������� ������������������  양을����������� ������������������  조절����������� ������������������  할수����������� ������������������  있다

Page 242: OSS개발자 포럼 캠프

Part����������� ������������������  4.����������� ������������������  ����������� ������������������  

슈퍼����������� ������������������  영웅����������� ������������������  -����������� ������������������  Xitrum

Page 243: OSS개발자 포럼 캠프

RabbitMQ

Web����������� ������������������  (View)

Android����������� ������������������  App����������� ������������������  

mysqlXitrum����������� ������������������  (Json����������� ������������������  parser)

Message����������� ������������������  queue

To����������� ������������������  Be����������� ������������������  Architecture

Back����������� ������������������  end

Communicator����������� ������������������  (Json)

Front����������� ������������������  end

Page 244: OSS개발자 포럼 캠프

갑자기����������� ������������������  증가하는����������� ������������������  사용자Ideal

Page 245: OSS개발자 포럼 캠프

Django + python

MySQL

현재상황..

Page 246: OSS개발자 포럼 캠프

Load Balancer

REST REST REST

MariaMysql Mongo …

Scalability

변하는����������� ������������������  요구조건

앞으로����������� ������������������  가야할����������� ������������������  상황..

Page 247: OSS개발자 포럼 캠프

성능 향상이 필요한데..

Page 248: OSS개발자 포럼 캠프

네티?

http://www.techempower.com

Page 249: OSS개발자 포럼 캠프

초당 5만건???

Page 250: OSS개발자 포럼 캠프

비록 Hello World 테스트. 하지만..

Page 251: OSS개발자 포럼 캠프

Netty로 결정!!!

Netty

PLAY

SPRING

Djaing

Rails 1.7

2.8

8.3

20.1

100

Page 252: OSS개발자 포럼 캠프

어디서부터.....����������� ������������������  ����������� ������������������  시작하지?

Page 253: OSS개발자 포럼 캠프

Rails,����������� ������������������  Django

spring

Play����������� ������������������  framework

빠른개발

성능

Reference

학습문제

Page 254: OSS개발자 포럼 캠프

다수가����������� ������������������  추천하는����������� ������������������  SPRING����������� ������������������  결정!!

Page 255: OSS개발자 포럼 캠프

SPRING?

설정? 개발?

Eclipse?서블릿?

Page 256: OSS개발자 포럼 캠프

!자바,����������� ������������������  서블릿,스트럿츠,스프링,����������� ������������������  !하이버네이트,����������� ������������������  myBatis,����������� ������������������  !클래스 API문서����������� ������������������  ����������� ������������������  !!Eclipse����������� ������������������  설치하고…⋯����������� ������������������  Plugin����������� ������������������  깔고…⋯

그래����������� ������������������  공부하자!!

Page 257: OSS개발자 포럼 캠프

언제����������� ������������������  다����������� ������������������  해?����������� ������������������  -개발자가����������� ������������������  부족해요

서비스 나오는데 최소 한달…⋯

Page 258: OSS개발자 포럼 캠프

빠르고 가볍게 안될까?

Page 259: OSS개발자 포럼 캠프

성능도 고려하고

Page 260: OSS개발자 포럼 캠프

학습곡선이 적은.

Page 261: OSS개발자 포럼 캠프

PLAY Framework으로 해보자!!

Page 262: OSS개발자 포럼 캠프

좋은점

자바, 서블릿,스트럿츠,스프링,myBatis !안배워도 됨.

안 좋은점 !자바, 서블릿,스트럿츠,스프링,myBatis !나중에는 배워야 됨.

Page 263: OSS개발자 포럼 캠프

친숙한����������� ������������������  MVC

models����������� ������������������  은����������� ������������������  모델����������� ������������������  정의와����������� ������������������  관련한����������� ������������������  소스����������� ������������������  코드를����������� ������������������  포함하고,����������� ������������������  ����������� ������������������  controllers는����������� ������������������  비즈니스����������� ������������������  로직����������� ������������������  관련����������� ������������������  소스가����������� ������������������  위치한다.����������� ������������������  ����������� ������������������  views����������� ������������������  는����������� ������������������  HTML과����������� ������������������  플레이����������� ������������������  템플릿����������� ������������������  언어����������� ������������������  기반����������� ������������������  소스����������� ������������������  코드를����������� ������������������  포함한다.����������� ������������������  !

Page 264: OSS개발자 포럼 캠프

깔끔한����������� ������������������  ����������� ������������������  구조

Page 265: OSS개발자 포럼 캠프

Netty + Akka

Page 266: OSS개발자 포럼 캠프

빠른����������� ������������������  프로토����������� ������������������  타입핑.����������� ������������������  !짧은 개발주기!!가장 보편적 기술의 도입.����������� ������������������  !모바일과 웹을 동시에 지원 가능한 서비스 설계!!Scale����������� ������������������  out����������� ������������������  고려한 설계!!클라우드 고려한 설계

모두가 행복함..

Page 267: OSS개발자 포럼 캠프

나만 빼고….

Page 268: OSS개발자 포럼 캠프

과연����������� ������������������  내가?

Page 269: OSS개발자 포럼 캠프

PLAY가 맘에 들긴 하는데..

기본적인 구조는 play와 비슷하게����������� ������������������  !필요한 부분만 사용할수 없을까?����������� ������������������  

Page 270: OSS개발자 포럼 캠프

옮겨가기 쉽다

Page 271: OSS개발자 포럼 캠프

What����������� ������������������  Programming����������� ������������������  Languages����������� ������������������  Are����������� ������������������  Technology����������� ������������������  Startups����������� ������������������  Using?����������� ������������������  

http://iseld.org/blog/2013/12/13/what-programming-languages-are-technology-startups-using/

우리는 스타트업 이랍니다

Page 272: OSS개발자 포럼 캠프

자전거 네비게이션,����������� ������������������  방수백,����������� ������������������  헤드라이트����������� ������������������  !다른 기능은 필요없음..

집근처����������� ������������������  마트를����������� ������������������  가는데?

Page 273: OSS개발자 포럼 캠프

꼭����������� ������������������  필요한����������� ������������������  기능에.

Page 274: OSS개발자 포럼 캠프

추가기능은����������� ������������������  이정도만.

Session����������� ������������������  &����������� ������������������  Cookie����������� ������������������  암호화����������� ������������������  !쉬운 Route����������� ������������������  설정����������� ������������������  !기능별 배포가 가능한가?����������� ������������������  !여러 DB에 동시 작업이 가능한가?����������� ������������������  !멀티 뷰 대응����������� ������������������  !!!

Page 275: OSS개발자 포럼 캠프

Xitrum?http://ngocdaothanh.github.io/xitrum/

Page 276: OSS개발자 포럼 캠프

추가기능은����������� ������������������  이정도만.

Session����������� ������������������  &����������� ������������������  Cookie����������� ������������������  암호화 ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  !쉬운 Route����������� ������������������  설정����������� ������������������  !기능별 배포가 쉬운가?����������� ������������������  !여러 DB에 동시 작업이 가능한가?����������� ������������������  !멀티 뷰 대응����������� ������������������  !!!

Hazelcast����������� ������������������  (In����������� ������������������  Momory����������� ������������������  DataGrid����������� ������������������  )����������� ������������������  로����������� ������������������  되어있음

Page 277: OSS개발자 포럼 캠프

추가기능은����������� ������������������  이정도만.

Session����������� ������������������  &����������� ������������������  Cookie����������� ������������������  암호화����������� ������������������  !쉬운 Route����������� ������������������  설정����������� ������������������  !!!!기능별 배포가 쉬운가?����������� ������������������  !여러 DB에 동시 작업이 가능한가?����������� ������������������  !멀티 뷰 대응����������� ������������������  !!!

실행될����������� ������������������  Method����������� ������������������  앞에����������� ������������������  @anotation만����������� ������������������  달면����������� ������������������  됨.����������� ������������������  설정파일����������� ������������������  X

Page 278: OSS개발자 포럼 캠프

추가기능은����������� ������������������  이정도만.

Session����������� ������������������  &����������� ������������������  Cookie����������� ������������������  암호화����������� ������������������  !쉬운 Route����������� ������������������  설정����������� ������������������  !기능별 배포가 쉬운가?����������� ������������������  !!!!여러 DB에 동시 작업이 가능한가?����������� ������������������  !쉬운 scalability/throughput !멀티 뷰 대응����������� ������������������  !!!

하나의����������� ������������������  파일에����������� ������������������  Route,����������� ������������������  Control,����������� ������������������  Model,����������� ������������������  View����������� ������������������  전부����������� ������������������  가능����������� ������������������  모듈별로����������� ������������������  묶어서����������� ������������������  배포하면����������� ������������������  끝!!

Page 279: OSS개발자 포럼 캠프

추가기능은����������� ������������������  이정도만.

Session����������� ������������������  &����������� ������������������  Cookie����������� ������������������  암호화����������� ������������������  !쉬운 Route����������� ������������������  설정����������� ������������������  !기능별 배포가 쉬운가?����������� ������������������  !여러 DB에 동시 작업이 가능한가?����������� ������������������  !!!멀티 뷰 대응����������� ������������������  !!!

Multi����������� ������������������  DB,����������� ������������������  ORM����������� ������������������  지원

Page 280: OSS개발자 포럼 캠프

멀티 뷰����������� ������������������  대응����������� ������������������  !•����������� ������������������  respondView:����������� ������������������  responds����������� ������������������  view����������� ������������������  template����������� ������������������  with����������� ������������������  or����������� ������������������  without����������� ������������������  layout����������� ������������������  •����������� ������������������  respondInlineView:����������� ������������������  responds����������� ������������������  with����������� ������������������  or����������� ������������������  without����������� ������������������  layout����������� ������������������  •����������� ������������������  respondText("hello"):����������� ������������������  responds����������� ������������������  a����������� ������������������  string����������� ������������������  without����������� ������������������  layout����������� ������������������  •����������� ������������������  respondHtml("<html>...</html>"):����������� ������������������  same����������� ������������������  as����������� ������������������  above,����������� ������������������  with����������� ������������������  content����������� ������������������  type����������� ������������������  set����������� ������������������  to����������� ������������������  “text/html”����������� ������������������  ����������� ������������������  •����������� ������������������  respondJson(List(1,����������� ������������������  2,����������� ������������������  3)):����������� ������������������  converts����������� ������������������  Scala����������� ������������������  object����������� ������������������  to����������� ������������������  JSON����������� ������������������  object����������� ������������������  then����������� ������������������  responds����������� ������������������  •����������� ������������������  respondJs("myFunction([1,����������� ������������������  2,����������� ������������������  3])")����������� ������������������  •����������� ������������������  respondJsonP(List(1,����������� ������������������  2,����������� ������������������  3),����������� ������������������  "myFunction"):����������� ������������������  combination����������� ������������������  of����������� ������������������  the����������� ������������������  above����������� ������������������  two����������� ������������������  •����������� ������������������  respondJsonText("[1,����������� ������������������  2,����������� ������������������  3]")����������� ������������������  •����������� ������������������  respondJsonPText("[1,����������� ������������������  2,����������� ������������������  3]",����������� ������������������  "myFunction")����������� ������������������  •����������� ������������������  respondBinary:����������� ������������������  responds����������� ������������������  an����������� ������������������  array����������� ������������������  of����������� ������������������  bytes����������� ������������������  •����������� ������������������  respondFile:����������� ������������������  sends����������� ������������������  a����������� ������������������  file����������� ������������������  directly����������� ������������������  from����������� ������������������  disk,����������� ������������������  very����������� ������������������  fast����������� ������������������  because����������� ������������������  zero-copy����������� ������������������  (aka����������� ������������������  send-file)����������� ������������������  is����������� ������������������  used����������� ������������������  ����������� ������������������  •����������� ������������������  respondEventSource("data",����������� ������������������  "event")

꼭����������� ������������������  필요한����������� ������������������  기능만.

Page 281: OSS개발자 포럼 캠프

기왕이면����������� ������������������  API����������� ������������������  문서도����������� ������������������  !!swagger를 이용한����������� ������������������  쉬운 문서화

Page 282: OSS개발자 포럼 캠프

Request (Inbound)

Response (Outbound)

From����������� ������������������  Netty

Netty

To����������� ������������������  Netty

HandlerEnv

Akka

Page 283: OSS개발자 포럼 캠프

Request����������� ������������������  (Inbound)

Response����������� ������������������  (Outbound)

Auth

Parse

Uri

Akka

Resource

Json

XML

File

Resource

Cache

Composite

Page 284: OSS개발자 포럼 캠프

FlashSocketPolicy

HttpRequestDecoder

PublicFileServer

HttpResponseEncoder

XSendFile

BaseUrlRemover

PublicResourceServer

Dispatcher

ServerSsl

Request2Env

UriParser

MethodOverrider

XSendResource

Env2Response

ResponseCacher

Request (Inbound)

Response (Outbound)

HANDLER����������� ������������������  ARCHITECTURE BASED����������� ������������������  ON����������� ������������������  NETTY����������� ������������������  4

To make Xitrum HandlerEnv

To FullHttpResponse

Shortcut may happen (action is not called)

NoPipelining

BasicAuth

BadClientSilencer

ChunkedWrite

SetCORS

OPTIONSResponse

FixiOS6SafariPOST

Adobe Flash policy file can be served on the same port with HTTP

These 4 handlers are provided by Netty

Page 285: OSS개발자 포럼 캠프

SUPER RESTFul API

Page 286: OSS개발자 포럼 캠프

EXAMPLE

REST����������� ������������������  API를����������� ������������������  이용한����������� ������������������  Blog����������� ������������������  만들기-����������� ������������������  Xitrum../����������� ������������������  demos/action/Articles.scala����������� ������������������  

!Routes����������� ������������������  설정����������� ������������������  !@GET("articles")����������� ������������������  @GET("articles/:id<[0-9]+>")����������� ������������������  @GET("articles/new")����������� ������������������  @GET("articles/:id/edit")����������� ������������������  !@POST("articles")����������� ������������������  @PATCH("articles/:id")����������� ������������������  @DELETE("articles/:id")

Page 287: OSS개발자 포럼 캠프

MODEL

!!case����������� ������������������  class����������� ������������������  Article(id:����������� ������������������  Int����������� ������������������  =����������� ������������������  0,����������� ������������������  title:����������� ������������������  String����������� ������������������  =����������� ������������������  "",����������� ������������������  content:����������� ������������������  String����������� ������������������  =����������� ������������������  "")����������� ������������������  !object����������� ������������������  Article����������� ������������������  {����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������   ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  var����������� ������������������  storage����������� ������������������  =����������� ������������������  Map[Int,����������� ������������������  Article]()����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  var����������� ������������������  nextId����������� ������������������  ����������� ������������������  =����������� ������������������  1����������� ������������������  !

def����������� ������������������  findAll()����������� ������������������  =����������� ������������������  storage.values����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  전체검색����������� ������������������  def����������� ������������������  find(id:����������� ������������������  Int)����������� ������������������  =����������� ������������������  storage(id)����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ID로 검색����������� ������������������  def����������� ������������������  insert(article:����������� ������������������  Article)����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  저장����������� ������������������  def����������� ������������������  update(article:����������� ������������������  Article)����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  수정����������� ������������������  def����������� ������������������  delete(id:����������� ������������������  Int)����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  삭제����������� ������������������  

����������� ������������������   ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  }

Page 288: OSS개발자 포럼 캠프

ROUTE별 실행 명령!@GET("articles")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  ����������� ������������������  ����������� ������������������  전체조회����������� ������������������  Class����������� ������������������  Getarticles����������� ������������������  extends����������� ������������������  Api����������� ������������������  {����������� ������������������  ..����������� ������������������  val����������� ������������������  articles����������� ������������������  =����������� ������������������  Article.findAll()����������� ������������������  !!@GET("articles/:id<[0-9]+>")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  ID를 파라미터로 조회����������� ������������������  val����������� ������������������  id����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  =����������� ������������������  param[Int]("id")����������� ������������������  ����������� ������������������  -����������� ������������������  Param����������� ������������������  Keyword����������� ������������������  ����������� ������������������  ����������� ������������������  var����������� ������������������  article����������� ������������������  =����������� ������������������  Article.find(id)����������� ������������������  !@GET("articles/new")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  새로운 글 작성����������� ������������������  val����������� ������������������  article����������� ������������������  =����������� ������������������  new����������� ������������������  Article()����������� ������������������  !@POST("articles")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  저장����������� ������������������  ����������� ������������������  val����������� ������������������  title����������� ������������������  ����������� ������������������  ����������� ������������������  =����������� ������������������  param("title")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  val����������� ������������������  content����������� ������������������  =����������� ������������������  param("content")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  val����������� ������������������  article����������� ������������������  =����������� ������������������  Article(title����������� ������������������  =����������� ������������������  title,����������� ������������������  content����������� ������������������  =����������� ������������������  content)����������� ������������������  val����������� ������������������  id����������� ������������������  =����������� ������������������  Article.insert(article)

Page 289: OSS개발자 포럼 캠프

ROUTE별 실행 명령!@PATCH("articles/:id")����������� ������������������  -����������� ������������������  ����������� ������������������  ����������� ������������������  수정����������� ������������������  ����������� ������������������  val����������� ������������������  id����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  =����������� ������������������  param[Int]("id")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  val����������� ������������������  title����������� ������������������  ����������� ������������������  ����������� ������������������  =����������� ������������������  param("title")����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  val����������� ������������������  content����������� ������������������  =����������� ������������������  param("content")����������� ������������������  val����������� ������������������  articles����������� ������������������  =����������� ������������������  Article.updatel(article)����������� ������������������  !!@DELETE("articles/:id")����������� ������������������  -����������� ������������������  ����������� ������������������  ����������� ������������������  삭제����������� ������������������  val����������� ������������������  id����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  =����������� ������������������  param[Int]("id")����������� ������������������  ����������� ������������������  -����������� ������������������  Param����������� ������������������  Keyword����������� ������������������  ����������� ������������������  ����������� ������������������  var����������� ������������������  article����������� ������������������  =����������� ������������������  Article.delete(id)����������� ������������������  

Page 290: OSS개발자 포럼 캠프

실력키우기

Page 291: OSS개발자 포럼 캠프

스타트업

• 페이스북 그룹

• https://www.facebook.com/groups/iwantyouforstartups/

• 하루에 10+ 이상의 구인글

• 시간/연봉/복지 협상가능

• 원하는 스킬을 쌓을 수 있음

Page 292: OSS개발자 포럼 캠프

스타트업

• 검증되지 않음

• 내일 망하거나 월급이 밀릴수 있음

• 인원이 적어 일이 많을 수 있음

Page 293: OSS개발자 포럼 캠프

검증방법

• 인맥을 통한 확인

• 면접 혹은 전화를 통한 확인

• 스타트업은 사람들이 알고 찾아오는걸 좋아해요.

• 제품 테스트도 한번씩

Page 294: OSS개발자 포럼 캠프

검증 항목• 제품에 대한 매출액(실제 사용되고 있는지, 얼마나 쓰고 있는지가 중요, 금액은 중요하지 않음)

• 사용되고 있는 스킬셋(특정한 언어/프레임웤을 사용하게 된 이유) - 사람이 없어서(x), 내가 편해서(x)

• 내부 아키텍처에 대한 설명 요구 - 확장성을 고려하여 설계

• 업부분장 및 프로세스 확인 - 업무별 일정을 어떻게 관리하는지

• 주식/투자 유치 상황

• 앞으로의 비전

Page 295: OSS개발자 포럼 캠프

저는 부양가족이 있어서..

Page 296: OSS개발자 포럼 캠프

개인(팀) 프로젝트

• 모바일 개인 개발자가 전체 70%

• 한달 광고수익 300만원~1억

Page 297: OSS개발자 포럼 캠프

웹사이트를 만드는것도 좋아요

Page 298: OSS개발자 포럼 캠프

개인(팀) 프로젝트

• 팀웤 유지가 힘듬(돈/시간)

• 혼자서는 더더욱 힘듬

Page 299: OSS개발자 포럼 캠프

고려 사항

• 팀원이 몇명인지(혼자~10명)

• 가장 빠르게 만들 수 있는 방법이 무엇인지

• Spring에 익숙하다면 Play Framework를…

• 일워개장기 http://blog.rainygirl.com/?p=1266

Page 300: OSS개발자 포럼 캠프

자신이 별로 없네요..

Page 301: OSS개발자 포럼 캠프

커뮤니티에 가보세요• 온라인/오프라인 모임

• 다양한 관심들

• 기술 공유

• 새로운 기술들

Page 302: OSS개발자 포럼 캠프

커뮤니티에 가보세요• 얼마나 오래 커뮤니티 활동을 하였는가.

• 외국 회사에서는 실력보다는 커뮤니케이션을 중요하게 여기기 때문에 커뮤니티 같은 외부활동을 중요하게 여김

Page 303: OSS개발자 포럼 캠프

그냥 혼자가 좋아요

Page 304: OSS개발자 포럼 캠프

오픈소스 프로젝트

• sourceForge : 150,000

• popular : 5,000

Page 305: OSS개발자 포럼 캠프

국내 오픈소스

• OSS 개발자 포럼 : https://www.facebook.com/groups/567834989912160

• github.com

• 라이브러리도 오픈소스다

Page 306: OSS개발자 포럼 캠프

국내 오픈소스

• 1. 오픈소스 만들기 - 자신이 만들었거나 사용하고 있는 라이브러리 올리기

• 2. 기존 오픈소스 참여하기 - 메일링 리스트 등록

Page 307: OSS개발자 포럼 캠프

국내 오픈소스

• 메일링 리스트 등록

• 이슈를 받아보고 파악할 수 있음

• 오타 전문가는 되지 말자

Page 308: OSS개발자 포럼 캠프

Stackoverflow• http://stackoverflow.com/

Page 309: OSS개발자 포럼 캠프

Stackoverflow

• 회사에서 바라보는 외부활동 중 하나 - 자신의 지식을 얼마나 다른 사람에게 공유가 가능한지

• 상대방이 이해할 수 있는 언어로 표현해 주는지

• 커뮤니케이션!

Page 310: OSS개발자 포럼 캠프

전체����������� ������������������  정리

• 어떠한 개발자? • 대기업만 고집하지 말자 • 기본적인 지식은 알고 시작하자 • 영역별로 다른 View • Message Queue를 이용한 버퍼링 !• Load balancing (computing)!• 최소 가치 찾기!• 더 나은 미래를 위해선 OSS, 커뮤니티