2 발표자 소개 박치완 서울대학교 컴퓨터공학부 데이터 마이닝 연구실 대용량 데이터 처리에 관심이 많은 학생 Apache Flink Committer (since Jun. 2015) 대용량 그래프 데이터 처리, 스트림 데이터 처리, 기계 학습 분야에 관심 있으시면 http://datalab.snu.ac.kr
10 The Open Source Definition 1. Free Redistribution 2. Source Code 3. Derived Works 4. Integrity of The Author’s Source Code 5. No Discrimination Against Person or Groups 6. No Discrimination Against Fields of Endeavor 7. Distribution of License 8. License Must Not Be Specific to a Product 9. License Must Not Restrict Other Software 10.License Must Be Technology-Neutral
11 The Open Source Definition 1. 자유로운 재배포 2. 소스 코드 3. 파생 저작물 4. 저작자의 소스 코드 원형 유지 5. 개인 및 단체에 대한 차별 금지 6. 사용 분야에 대한 차별 금지 7. 사용 허가의 배포 8. 특정 제품에만 유효한 사용 허가의 금지 9. 다른 소프트웨어를 제한하는 사용 허가의 금지 10.사용 허가의 기술 중립성 http://korea.gnu.org/documents/copyleft/osd-korean.html
19 현업에서 주로 다루는 기술 • C, C++ 이외의 다양한 언어 (Python, Java, PHP, …) • 스마트폰 어플 개발 환경 (Android, iOS, Tizen, …) • 웹 프레임워크 (Django, Spring, Play, …) • 프론트엔드 관련 패키지 (jQuery, React.js, Jindo, …) • 객체 관계 매핑 (Hibernate, SQLAlchemy, …) • 빌드 및 배포 자동화 (Maven, Gradle, SBT, Fabric, …) • 버전 관리 시스템 (Git, Mercurial, Subversion, …) • …
22 이론 중심의 교육과정 • 많은 학부 교과과정이 이론을 잘 학습하는 것에 무 게를 두고 있어서, 전체적인 커리큘럼이 이론 중심! • 실습은 각 과목별로 진행하는 텀 프로젝트나 졸업 프로젝트가 전부 (작성한 코드에 대한 피드백이 전혀 없는 것은 덤) 물론, 이론을 잘 학습하는 것은 매우 매우 중요합니다!
27 오픈 소스 프로젝트에 참여하면… • 학교에서 배운 이론을 실제로 적용해 볼 수 있음 • 다양한 사람들과 협업하는 경험을 얻을 수 있음 • 고수가 작성한 코드를 읽어볼 수 있음 • 다른 사람이 내 코드를 리뷰해 줌 (나도 다른 사람의 코드를 읽으며 리뷰할 수 있음) • 학교에서 아무도 신경 쓰지 않는 것의 중요함을 알게 됨 (문서화, 테스트 케이스 등) • …
28 사례 1 • 자료 구조 수업에서 Hash table에 대해서 배움 • Java는 HashMap이라는 Hash table 구현을 제공하지만, 때때로 직접 만들어 써야할 때도 있음 • 빠른 속도가 필요한 경우 • Garbage collection의 영향에서 벗어나고 싶은 경우 • Flink도 Hash table을 직접 구현한 MutableHashTable 을 만들어서 씀 • 그런데 여기에 버그가 있었음 Background
30 유닛 테스트 • 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차 • 모든 함수와 메서드에 대한 테스트 케이스를 작성하는 절차 • 꼼꼼히 테스트 케이스를 만들어두면 • 리팩토링이 쉬움 • 디버깅이 쉬움 • 빌드/테스트 자동화 툴과 함께 적용되면 더욱 좋음 https://ko.wikipedia.org/wiki/유닛_테스트
33 사례 2 Background • Flink는 분석할 데이터를 CSV 파일에서 불러오는 기능을 제공 • 미리 제공되는 Tuple 객체는 지원을 했으나, 일반적인 Java 객체(POJO)는 지원하지 않았음 • Java 객체 정보는 Java Reflection API를 통해 가져올 수 있다는 사실을 공부하고, 패치 작성
36 • Flink에는 FlinkML이라는 기계 학습 라이브러리가 있음 • FlinkML에 두 벡터의 거리 계산을 위한 구현이 없었음 • 두 벡터의 거리 계산은 선형대수 수업에서 배움 • 구현도 인터넷에 참조할 수 있는 것이 많이 있음 • 쉬운 작업이니 패치 제출 사례 2 Background
41 기여를 통해 얻어 갈 수 있는 것 (요약) • 다른 사람이 작성한 코드를 읽는 능력 • 기여에 필요한 새로운 지식 • 커뮤니티의 높은 기준을 바탕으로 한 내가 작성한 코드에 대 한 꼼꼼한 리뷰 (영어 실력은 덤) • 버전 관리 시스템의 고급 기능 (cherry-pick, rebase, …) • 문서화와 테스트 케이스 작성 요령 • …
58 D2 CAMPUS FEST • 오픈 소스 소프트웨어 경진 대회 • 나의 프로젝트를 오픈 소스로! • 50만원에서 300만원의 상금 • 네이버 채용 특전 • 스터디 장소 및 서버 제공 • DEVIEW 2016 초대권 • D2 CAMPUS SEMINAR 발표 지원 • 프로젝트 홍보 지원 • …
60 Google Summer of Code • 2005년부터 시작된 Google의 오픈 소스 기여 지원 프로그램 • 만 18세 이상의 학생이 여름 방학 동안 기여 활동 진행 • 기여하는 오픈 소스 커뮤니티에서 1명이 멘토로 참여 • 기여 활동 결과를 평가하고, 통과되면 $5500 (약 650만원) 지급
62 오픈 프론티어 • NIPA에서 주관하는 오픈 소스 개발자 지원 프로그램 • 풀 타임, 파트 타임 기여자로 나누어 매달 장려금 지급 • 개발에 필요한 장비 구매 비용 지원 • 다양한 현업 개발자 분에게 멘토링을 받을 수 있도록 필요 경비 지원 • 24시간 개방 되어 있는 개발 공간 제공 (누리꿈스퀘어) • 세미나, 소모임 등을 할 수 있도록 공간 (토즈) 대여 비용 지원 • 가상 개발 환경 비용 지원 • …
63 Summary • 오픈 소스 = 수정할 자유가 있는 소프트웨어 • 오픈 소스 프로젝트 기여를 통해 많은 것을 얻을 수 있음 • 내 코드에 대한 리뷰 • 이론의 실제 적용 • 적용하려면 탄탄한 이론적 배경이 필요! • 기여에 필요한 다양한 지식 • 다양한 사람들과의 협업 경험 • 시도하기만 하면, 기여하는 것은 크게 어렵지 않음 • 다양한 지원 프로그램도 있음!
66 Appendix. 도움이 되는 자료 (cont.) • 에릭 레이먼드, “성당과 시장” • http://www.hanbit.co.kr/ebook/look.html?isbn=9788968486562 • 송우일, “꾸준히, 자유롭게, 즐겁게: 한국 오픈 소스 개발자 들 이야기” • http://osdi.insightbook.co.kr/ • 허준회, “만화로 나누는 오픈소스 이야기” • http://www.joone.net/