21. • 오픈소스 문화를 활성화해 기업들의 참여를
이끄는 목적.
• GPL은 파생물 역시 항상 동일한 라이센스
GPL을 준수해야 하므로, 즉 소스가 외부에 공
개 되어야 하므로, 기업의 참여가 제한됨
• 오픈소스를 변경하더라도, 다른 라이센스로
또는 상업용으로 쓰는 것을 가능케 함.
1998년 - OSI(Open Source Initiative)
28. 주요 License 비교
GPL LGPL MIT BSD Apache
저작권 보호 기능 O O O O O
상용 SW 사용 가능 O O O O O
기능 확장 공개 의무 O O X X X
타인에게 특허권 제공 X X X X O
독점 프로그램에서 사용 가능 여부 X O O O O
라이선스 전파 여부 O O X X X
29. 주요 License 비교
GPL LGPL MIT BSD Apache
저작권 보호 기능 O O O O O
상용 SW 사용 가능 O O O O O
기능 확장 공개 의무 O O X X X
타인에게 특허권 제공 X X X X O
독점 프로그램에서 사용 가능 여부 X O O O O
라이선스 전파 여부 O O X X X
30. 주요 License 특허권 제공여부
GPL LGPL MIT BSD Apache
저작권 보호 기능 O O O O O
상용 SW 사용 가능 O O O O O
기능 확장 공개 의무 O O X X X
타인에게 특허권 제공 X X X X O
독점 프로그램에서 사용 가능 여부 X O O O O
라이선스 전파 여부 O O X X X
31. 2008년 Open Source License 통계
GPL
LGPL
BSD
MIT
기타
GPL (60%)
LGPL (7%)
BSD (6%)
MIT (2%)
32. 2015년 Open Source License 통계
https://www.blackducksoftware.com/resources/data/top-20-open-source-licenses (2015)
41. 3.0 이전 3.0 이후
저장 위치 Dalvik외부 native Heap Dalvik 내부
GC 동작 전체 App이 멈춤 부분적으로 진행(partially)
Bitmap의 GC GC의 대상이 아님 GC의 대상
다른 App의 영향 메모리 누수가 발생하면 다
른 App도 함께 죽음
다른 앱에 영향이 없음
3.0 기준으로 다룬 OS
42. 구글에서
메모리 누수 현상이 자주 발생해서 메모리 관리 체계를 변경
합니다.
Honeycomb이전 Honeycomb이후
이미지 파일
이전에는 Native영역에서 이미지 파일을 관리했다면, 이후에는 Dalvik내부에서
관리를 하는 구조로 변경되었습니다.
Q : 이미지파일의 저장위치가 핵심인가요?
A : 이미지가 메모리 누수의 50~70%를 차지하기 때문에
77. BDD vs TDD
• BDD 는 Acceptance Test 집중
• TDD 는 Unit Test에 집중
• Acceptance Test는 고객의 의도에 맞는지
를 테스트하는 것
• Unit Test는 실제 기술적인 요구조건을 테
스트하는 것이라고 보면 되겠다.
80. Calabash Installation
Ant 설치
Install Ant (1.9)
http://ant.apache.org/ 다운로드
경로설정 for mac
cd ~ - sudo vi .bash_profile - PATH = “ant가 설치된 경로:${PATH}” export PATH
- . .bash_profile - echo $PATH해서 현재의 ant경로가 나오는지 확인
경로설정 for window7
내컴퓨터 - 속성 - 고급 시스템 설정 - 고급 - 환경변수
-Path에 ant설치한 경로 덧붙이기
81. Installation`
Android SDK
경로설정 for mac
아래의 그림과 같이 sdk가 설치된 경로를 ANDROID_HOME으로 지정 -
. .bash_profile
경로설정 for window7
환경변수 - ANDROID_HOME환경변수에 SDK설치 경로 넣기
82. Installation
Ruby 설치(http://rubyinstaller.org)
경로설정 for mac
2.0.0설치 권장 - 설치 후 ruby –v쳐서 버전이 제대로 나오는지 확인
경로설정 for window7
Ruby1.9.3버전만 설치할 것 - 설치 후 Path에 등록 - ruby –v해서 버전이
제대로 나오는지 확인 - 설치 후 Devkit
설치(http://rubyinstaller.org/downloads/) - 데브킷이 설치된 곳으로 이동 -
ruby dk.rb init - ruby dk.rb install
83. Installation
calabash 설치(sudo gem install calabash-android)
Mac에서 다음과 같은 에러가 나는 경우
http://developer.apple.com/ 에 가서 os버전에 맞는 command line tools을
다운로드 받는다.
85. Features폴더안 my_first.feature보기
SimpleLogin project를 import해서 run해보기
터미널에서 Project경로/bin에 가서 calabash-android gen타이핑 features폴더
생성확인
cd features - vi my_first.features확인
Project경로/bin으로 다시가서 calabash-android run SimpleLogin.apk 실행
86. 1위는 Appium
(android, io, windows phone)
http://www.imaso.co.kr/?p=6176
http://www.imaso.co.kr/?p=6188
102. Node.js Paypal
[출처] https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal/
Double the requests per second vs. the Java application. This is even more interesting b
ecause our initial performance results were using a single core for the node.js applicatio
n compared to five cores in Java. We expect to increase this divide further.
35% decrease in the average response time for the same page. This resulted in the pag
es being served 200ms faster— something users will definitely notice.
114. Node.js 의 엔진 libuv
• libuv is a multi-platform support library with a focus on
asynchronous I/O.
• It was primarily developed for use by Node.js, but it's also
used by Luvit, Julia, pyuv, and others.
151. 힌트
• 일정한 응답시간을 SLA로 보장하는 서비스라면, Node 서비스가 올라간 인스
턴스의 자원을 적게 쓰게 만들어라 (60%)
• CPU 사용량이 높은 (복잡한 계산이 들어가 있는) 서비스는 Node가 비적합.
• 높은 스펙의 인스턴스에 여러 노드를 서비스를 놓는것 보다는, 낮은 스펙의 여
러개의 인스턴스를 늘려서 사용하는 것이 훨씬 유리.
• 다른 paas 보다, 비용적으로는 heroku 짱! (traffic 비용, io 비용 없음)
165. Go와 Java Thread 성능 차이
Thread(Java) Goroutine
개수 100000 100000
처리 속
도
5.902s 226.750829ms
CPU
Memory
Hello 10만개 출력하기
http://www.slideshare.net/seungkyupark/go-langgoroutine-channel-
56542876
172. mongoDB의 특징
- document data model
- 스키마가 없다 (삽입시 생성된다..)
- json / bson
- 애드혹 쿼리 및 세컨더리 인덱스 지원
- 복제 / 샤딩 지원
- 하나의 마스터가 존재 cf. Casandra
- 일부 원자적 연산 지원 (트랜잭션 X)
183. 데이터 베이스 분할..
• 수평 분할(horizontal partitioning = Sharding) 은 하나의 테이
블의 각 행을 다른 테이블에 분산시키는 것이다. 예를 들어 방
대한 고객 데이터 테이블을 성별에 따라 ‘남녀’로 나누어 Custo
merMen과 CustomerWomen 두 개의 테이블로 분할한다. 테이
블은 2개로 분할되지만, 모든 고객을 나타내기 위해 양자를 결
합한 뷰를 생성하면 된다.
176
184. 데이터 베이스 분할..
• 수직 분할(vertical partitioning)은 테이블의 일부 열을 빼내는
형태로 분할한다. 관계의 정규화는 본질적으로 수직 분할에 관
련된 과정이다.
• 사용 빈도가 높은 데이터에만 액세스할 경우 성능이 향상된다.
예를 들어, 뉴스를 서비스할 때, 고객들은 최근의 데이터를 가장
많이 조회할 것이다. 이 경우 1개월 전의 데이터를 다른 테이블
에 두면, 훨씬 효율적으로 검색할 수 있을 것이다.
177
194. Redis란?
• Remote Dictionary Server의 줄임말
• Key-Value Cache and Store
• Persistence을 지원하는 In-Memory Dataset
- 다양한 자료구조 지원(List, Hash, Set, Sorted Set, bitmaps and hyperloglogs)
• ANSI C로 작성
• Open Source(BSD licensed)
• Single Thread
• Transactions, Pub/Sub, Lua scripting 등 지원
195. Redis Memcached MongoDB
In-memory ✔ ✔
Persistent ✔ ✔
Key-value store ✔ ✔
Supports more than strings ✔ ✔
Multithreaded ✔ ✔
Supports larger-than-memory datase
t ✔
As fast as Memory Memory Disk
다른 NoSQL 비교
224. ZooKeeper가 감지하는 이벤트
• Watcher가 감지하는 znode의 ‘변경’ event
는 4가지 종류가 있습니다.
- NODE_CREATED : 노드가 생성 됨을 감지.
- NODE_DELETED : 노드가 삭제 됨을 감지.
- NODE_DATA_CHANGED : 노드의 데이터가 변경 됨을 감지.
- NODE_CHILDREN_CHANGED : 자식 노드가 변경 됨을 감지.
225. ZooKeeper의 단점?
• 일회성 Trigger..
• 해당 Watcher가 삭제되면, 다시 Watcher
를 만들고 걸어줘야 한다..
• 프로그래밍 스타일이.. 번거롭게 된다.
228. 관련 샘플 코드
• Mongodb zookeeper 핸들링 코드
https://github.com/swmaestro6th-
crashreport/nodejs-mongodb-zookeeper
• Mongodb etcd High 핸들링 코드
https://github.com/swmaestro6th-
crashreport/nodejs-etcd-mongodb
232. 리얼타임 분산 객체의 대가.
http://download.dre.vanderbilt.edu/
233. - 오픈소스SW의 탄생부터 현재까지의 역사를 한눈에 보여주는 박물관
- 오픈소스SW의 개발과 진화과정을 추적하고 공개하는 사이트
- 품질을 평가할 수 있는 다양한 지표들을 제공
참고 자료 OpenHub.NET
234. 참조
• 자료 받는 곳
• http://www.slideshare.net/arload
• Android O
• https://news.realm.io/kr/news/android-o-pre
view-and-new-features/
• Java script 트랜드
• http://d2.naver.com/helloworld/7229119