oss개발자 포럼 캠프

Post on 20-Jun-2015

1.405 Views

Category:

Engineering

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

그럴듯해 보이는 목차

• SW 개발자의 종류

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

• 성장하기

SW 개발자의 종류

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

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

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

SW 개발자의 종류

• 이런 얘기를 할꺼에요

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

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

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

• 이런 얘기는 안해요

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

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

• 이런 얘기 할꺼에요

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

성장하기

!

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

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

하필이면 개발자를..?

우리는 누구?

• 학생?

• 개발자?

• 기획자?

• 아들? 딸?

• 잠재적 군인?

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

정말 개발을 좋아하는 삶

어쩔수 없이 돈때문에..

이유야 어쨌든 개발자는

돈을 법니다.

왜?

• 먹고 살아야 하고

• 결혼도 하고

• 차도 사고

• 부모님 용돈도 드리고

• 여행도 가고

• 학자금도 값고..ㅠㅠ

대기업 느님

나머지는?

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

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

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

- 그리스 격언

한국 IT 80%를 차지하는 SI

SI에 가면 뭐해요?

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

• 밴드도 하고

• 스쿠버도 하고

• 인라인도 타고

• 검도도 하고

• 바이크도 타고

그러다 보니…

• 2009 년 30살의 나이로 졸업

동시에 서브프라임

서브 프라임?

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

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

하청업체?

그건 아청이고…

그럼 하청은?

아 그렇군!!!

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

구조

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

내가 생각했던 직장인 !

특히 금융권

프로젝트 투입

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

다시 프로젝트 투입

가능할까?

• 집 -> 회사 1시간 30분

• 1시~2시 퇴근

• 9시 정시 출근

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

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

충격적인 비밀을 들음

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

• 애 얼굴을 자주 못봄

• 돈이 많이 필요함

• 이게 평생 될꺼임.

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

입사할 수는 있으나.

• 오지 말라고 함

• 거기서 거기

이 바닥을 뜨자!!!

꺼져 이노무 회사!!!

살암인, 잡콜이야

대세는 웹, 모바일

갈곳이 없음..Java 못함

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

다 필요없고..

• 연봉/복지 안따짐

• 정시 퇴근만 하면 됨.

• 경력 세탁은 내가 할꺼임

처음으로.. !

집에 6시 30분에 도착..

회사를 옮겼더니

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

Now..• 제 직책은.

• 두 아들의 아빠

• 10시에 어린이집

• 장보기

• 4시에 어린이집

• 백수

Now..

• 오픈 프론티어 멤버

• URQA- 오픈소스 커미터

• Fullstack 개발자

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

만족하며 살고 있음.

애초에 대기업을 가지?

대기업을 갑시다!!!

엄청 많음!!! !

!

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

실제 수행업무가 중요!!

1000 ft View

• 군대 문화

• 술, 회식

• 정치

외국 회사로!!

훨신 더 많아!!!

채용 프로세스• 서류 면접

• 전화 면접

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

• 최소 3회 - 7 회

• 최소 5시간 - 12시간

프리랜서Free + Lancer

프리랜서 = 용병

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

사회 현상의 흐름을 파악

항상 새로운 것

• 새로운 업무 환경

• 새로운 사람들

• 새로운 업무

돈?

• 초급: 20대 후반

• 중급: 30대 초반

• 고급: 30대 후반

돈?

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

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

돈?

• 단, 퇴직금 제외

• 복지도 제외

경력?

경력?

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

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

• 찾지 않아도 찾아온다.

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

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

안정된 고용환경

업무 환경

업무 환경• 이직이 쉬움

안좋은점

일자리

계약직

전문성

다 잘해야함.. !

노래, 춤은 기본 !

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

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

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

• 전화응대도 잘해야 하고

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

• 치킨도 잘 튀겨야….

방법론

원래는 이렇게..

실제는…

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

일정

상황이 이러다 보니..

집에 못감..

일정이 이러다 보니..

!

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

필요한 기술들..

• 면접: 기본 3차 ~ 7차

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

못감..

좋은 회사의 기준은

먹고 살만한 월급 !

최신 장비 !

기술 습득 !

이라고 보통 생각함 !

방법? !

회사를 차리던가..

회사를 차리든. !

회사에 입사를 하든. !

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

Python. -Language

Framework?

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

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. 납땜에서 영업까지

1인 기업

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

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

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

• 게임 - C#, C++

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

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

프레임워크

• Ruby - Rails, Sinatra

• Python - Django, Flask

• Java - Spring, Spark

• C# - .Net, Micro

왜?

영역이 다르다

• DB - Backend - Frontend - UX - 고객

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

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

고객

• Design

• Speed

• UI/UX

• Pay

UI/UX(기획자)

• UI/UX

• Cost

• Cash Cow

Front-end

• Fast Script

• Layout

• Dynamic

Back-end

• High Availability

• High Tech

• Simple/Complex

• High Performance

Database

• Shard

• Replication

• Data

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

뭐 먹고 살지 고민중… !

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

웹 페이지도 만들고 !

앱도 하나 만들어야징!!

대박 날것 같음!!

당연한 얘기지만.

• 컴퓨터 부터 구입…

• 혹은 집에 있는 컴퓨터.

• 또는 학교

당연한 얘기지만.

• 언어를 배워야함

code school

code academy

code.org

lynda.com

일단 게시판부터…

• HTML로 만들고

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

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

데이터 베이스

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

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

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

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

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

그럴듯하게 페이지를 만듬

문제는..

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

• 호스팅을 알아봄

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

요청도 들어옴

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

• 채팅 할수 있게 해주세요

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

• 모바일도 추가해 주세요

로그인 연동시키자 openID, auth

• 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.

사이트가 자꾸 죽어요

이유?

튜닝

Load Balance

Load Balance

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

모바일을 대응하기 위해• 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를 통해서 처리한다.

REST!!!

Sinatra

Flask

Django + python

MySQL

현재상황..

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

또한번의 튜닝

Load Balancer

REST REST REST

MariaMysql Mongo …

Scalability

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

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

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

필요한 툴들이슈 트래커

trello.com

unfuddle.com

pivotal tracker

사람도 확보했고..

Worker

Queue

URQA - 실습편

• URQA - Android Crash report

• 350개 개인/업체 사용중

URQA Committers

무료 어플리케이션

개인69%

회사31%

유료 어플리케이션

개인75%

회사25%

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

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

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

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

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

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

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

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����������� ������������������  마켓����������� ������������������  앱����������� ������������������  개수����������� ������������������  

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

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

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

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

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

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

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

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

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

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

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

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

!

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

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

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

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

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

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

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

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

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

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

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

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

VALUE

FEATURE

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

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

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

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

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

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

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

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

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

CRASH

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

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

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

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

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

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

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

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

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

OS버전

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

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

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

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

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

UrQA

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

Python

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

mysql

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

JSON

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

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

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

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

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

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

RabbitMQ

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

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

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

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

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

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

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

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

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

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

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

과부하!!

Message Queue

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

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

!

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

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

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

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

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

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

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

!

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

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

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

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

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

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

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

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

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

RabbitMQ

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

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

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

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

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

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

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

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

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

Worker

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

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

Worker

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

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

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����������� ������������������  전송!

Worker

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

Worker

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

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

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

Worker

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

Worker

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

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

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

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

activemq hometqqpidrabbitmq

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

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/

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

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

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

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

RabbitMQ

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

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

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

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

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

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

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

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

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

Django + python

MySQL

현재상황..

Load Balancer

REST REST REST

MariaMysql Mongo …

Scalability

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

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

성능 향상이 필요한데..

네티?

http://www.techempower.com

초당 5만건???

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

Netty로 결정!!!

Netty

PLAY

SPRING

Djaing

Rails 1.7

2.8

8.3

20.1

100

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

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

spring

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

빠른개발

성능

Reference

학습문제

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

SPRING?

설정? 개발?

Eclipse?서블릿?

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

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

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

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

빠르고 가볍게 안될까?

성능도 고려하고

학습곡선이 적은.

PLAY Framework으로 해보자!!

좋은점

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

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

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

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

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

Netty + Akka

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

모두가 행복함..

나만 빼고….

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

PLAY가 맘에 들긴 하는데..

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

옮겨가기 쉽다

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

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

우리는 스타트업 이랍니다

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

멀티 뷰����������� ������������������  대응����������� ������������������  !•����������� ������������������  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")

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

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

Request (Inbound)

Response (Outbound)

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

Netty

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

HandlerEnv

Akka

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

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

Auth

Parse

Uri

Akka

Resource

Json

XML

File

Resource

Cache

Composite

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

SUPER RESTFul API

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")

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)����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  삭제����������� ������������������  

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

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)

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)����������� ������������������  

실력키우기

스타트업

• 페이스북 그룹

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

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

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

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

스타트업

• 검증되지 않음

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

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

검증방법

• 인맥을 통한 확인

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

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

• 제품 테스트도 한번씩

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

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

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

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

• 주식/투자 유치 상황

• 앞으로의 비전

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

개인(팀) 프로젝트

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

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

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

개인(팀) 프로젝트

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

• 혼자서는 더더욱 힘듬

고려 사항

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

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

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

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

자신이 별로 없네요..

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

• 다양한 관심들

• 기술 공유

• 새로운 기술들

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

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

그냥 혼자가 좋아요

오픈소스 프로젝트

• sourceForge : 150,000

• popular : 5,000

국내 오픈소스

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

• github.com

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

국내 오픈소스

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

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

국내 오픈소스

• 메일링 리스트 등록

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

• 오타 전문가는 되지 말자

Stackoverflow• http://stackoverflow.com/

Stackoverflow

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

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

• 커뮤니케이션!

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

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

top related