Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Hitchhikers Guide to Open Source

Avatar for Lee Dongjin Lee Dongjin
August 18, 2018

The Hitchhikers Guide to Open Source

2018년 8월, 부산 IO 발표.

Presented in Busan IO in August 2018.

Slides: Korean. Presentation: Korean.

Avatar for Lee Dongjin

Lee Dongjin

August 18, 2018
Tweet

More Decks by Lee Dongjin

Other Decks in Technology

Transcript

  1. 이 발표는... • "저도 오픈소스 프로젝트에 참여해보고 싶은데 어떻게 시작해야

    할 지 모르겠어요." • "코드를 받긴 했는데 하나도 못 알아 보겠어요. 처음부터 절벽이에요." • … 이런 분들께 조금이나마 힌트를 드리고자 함. • 그래봤자 쪼렙에 듣보잡이라 별 도움은 안 되겠지만
  2. 자기소개 • Committer, Apache Software Foundation • Contributor ◦ Apache

    Spark ◦ Apache Kafka ◦ 기타 등등… • 실상은 그냥 쪼렙, 듣보잡 • 전혀 대단한 사람이 아닙니다.
  3. 오늘 이야기할 내용은... 1. 프로젝트 선택 ◦ 오픈소스 프로젝트라고 해서

    다 같은 오픈소스가 아니다. ◦ 초심자가 접근할 수 있는 프로젝트, 기여할 수 있는 프로젝트는 따로 있다. 2. 사전 지식 ◦ 어떤 프로젝트건 미리 알아 둘 것이 있다. 3. 함께 하기 ◦ 함께 하는 것이 대부분의 경우 좋다. 4. 기타 tip
  4. 프로젝트 선택 • 오픈소스라고 해서 다 같은 오픈소스가 아니다! •

    프로젝트를 분류하는 방법은 굉장히 많음. ◦ 언어? ◦ 라이센스? ◦ 기능? • 하지만 초심자 입장에서 중요한 것이라면… ◦ 접근하기 쉬운가? ◦ 기여(contribute)할 만한 여지가 있는가?
  5. 프로젝트 선택: 초심자를 위한 기준점들 1. 누가 이끌고 있는가? ◦

    기업(들) 혹은 전담 프로젝트 팀 vs. 개인 혹은 작은 팀. 2. 얼마나 성숙한 프로젝트인가? ◦ Active development vs. Maintenance. 3. 배경 지식을 얼마나 요구하는가? ◦ 병렬 처리? 기계 학습? 블록체인? 4. 가장 중요한 것: 얼마나 끌리는가?
  6. 프로젝트 선택: 결론 • 너무 거대하거나 성숙한 프로젝트는 피해라. ◦

    1도 못 알아보거나, 기여할 것이 없거나. • 배경 지식을 보유한 프로젝트를 골라라. • 관심이 가는 분야의 프로젝트를 골라라. ◦ 어떤 점에서는 ‘덕질’ ◦ 재미가 없으면 오래 못 함.
  7. 프로젝트 선택: 제 경우는요... • Hadoop 덕후로 시작 (2010). a.

    누가 이끌고 있는가? - Yahoo, Apache 재단을 중심으로 한 많은 기업들 (X) b. 얼마나 성숙한 프로젝트인가? - Active Development는 이미 끝. Maintenance Mode. (X) c. 배경 지식을 얼마나 요구하는가? - 병렬 처리에 대한 배경 지식 필요. (O) d. 얼마나 끌리는가? - 매우 많이. (O) • 안티패턴의 전형. a. 개고생… b. 착한 초심자는 따라하지 마세요.
  8. 프로젝트 선택: 초심자에게 추천 • "자주 써서 익숙한 것 중

    상대적으로 작은 프로젝트" ◦ Spring, Tomcat, Hadoop … 이런 거 말고. • 구체적으로는 ... ◦ Web API binding: Flickr, Tumblr, ... ◦ Unit Testing Library: s3mock, zookeeper-unit, ... ◦ 거의 모든 경우 초심자에게 추천할 만 함. ◦ 크기가 작고, 배경 지식이 많이 필요하지 않으며, 거의 항상 자잘한 뭔가가 필요함.
  9. 사전 지식 • 어떤 프로젝트건 미리 알아 둘 것이 있다!

    ◦ 언어 ◦ 툴 ◦ 이론적 배경 지식
  10. 사전 지식: 언어 • 달인일 필요는 없음. 하지만 너무 몰라서는

    곤란. ◦ 언어 그 자체: Python 2 vs 3? Java Reflection? Java 8 Lambda? ◦ 필수 라이브러리: Java Guava? Scala Scalaz? ◦ Unit Test: junit? hamcrest? Assertj? • 그냥 간단한 예제 하나 돌려 보는 것만으로도 충분. ◦ 나머지는 그냥 활동 하면서 자연스럽게 배울 수 있음.
  11. 사전 지식: 툴 • Git(hub) ◦ 어느 언어로 어떤 프로젝트를

    진행하든 무조건 쓰게 됨. ◦ 무조건 잘 알아야 함. • 기타 프로젝트 운영을 위해 필요한 툴들 ◦ 빌드: Maven? Gradle? sbt? ◦ 문서화: Javadoc? Sphinx? ◦ Code Formatting: Checkstyle? Scalafmt?
  12. 사전 지식: 이론적 배경 지식 • 배경 지식 없으면 아무

    것도 안 된다! ◦ OS 이론을 모르는 사람이 Linux를 들여다 볼 수는 없음. ◦ 병렬 처리 이론을 모르는 사람이 Hadoop이나 Spark를 들여다 볼 수는 없음. ◦ Zookeeper가 뭔지 모르는 사람이 Kafka를 들여다 볼 수는 없음. ◦ Dependency Injection이 뭔지 모르는 사람이 Spring을 들여다 볼 수는 없음. • 그래도 하고 싶으면? 공부해야지 뭐… ◦ 공식 Documentation ◦ Engineering Blog - ex) Databricks, Cloudera, Uber, ... ◦ 책(!) ◦ 논문(!!)
  13. 함께 하기: 사전지식 쌓기 • 대부분의 경우 혼자서 하는 것보다

    함께 하는 것이 낫다. ◦ 질문: 스터디 그룹 같은 게 필요한가요? ▪ 있으면 좋지만 굳이 필요하지는 않음. ▪ 그냥 관심사가 비슷한 사람들끼리 느슨하게 연결되어 있는 것만으로 충분. ▪ ex) Spark 사용자 모임, Kafka 사용자 모임, etc ... • 자료 읽기 먼저, 코드 분석은 나중에. ◦ Documentation은 모든 프로젝트의 기본. ◦ "관심이 가는 분야의 프로젝트를 골라라." (실제로 한 말)
  14. 함께 하기: 코드 분석 • 소스코드 분석하기 ◦ Bottom Up

    vs. Top Down ◦ 서로 장단점이 있음. ◦ 사람마다 스타일이 다름. • 스터디 그룹 요령 ◦ 두 스타일을 섞어서 하되, 약간 더 레벨이 높은 사람을 한 명 끼워서 팀을 만든다. ▪ 서로를 보완해 주면서 누군가가 리드를 할 수 있음. ◦ 돌려 가면서 발표하는 식의 스터디는 안 하는 게 나을지도…? ▪ 참고 1: 바쁜 직장인을 위한 스터디 비결 ▪ 참고 2: 스터디 모임 방법 몇 가지
  15. 기타 tip • 쫄지 마세요. (Don’t Panic!) • ‘초보자가 할

    일’은 언제나 있다! ◦ Newbie Issue, Dependency 관리, Testing, Documentation, Example, ... • Mailing List, Blog, Community ◦ 일단 익숙해져야 뭐라도 한다! • 영어, 영어, 영어 ◦ 슬프지만 현실.