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

오픈소스 메인테이너로 성장하기(feat.TOAST UI)

hanjung
December 29, 2020

오픈소스 메인테이너로 성장하기(feat.TOAST UI)

2020 NHN FORWARD

hanjung

December 29, 2020
Tweet

More Decks by hanjung

Other Decks in Programming

Transcript

  1. © 2020 NHN FORWARD. All rights reserved. 오픈 소스 메인테이너로

    성장하기(feat. TOAST UI) NHN FE개발랩 한정
  2. 우선, 제가 하고 있는 는 자바스크립트 기반 UI 오픈 소스

    브랜드 5개의 어플리케이션 13개의 컴포넌트 NHN FE 개발랩 메인테이닝 MIT 라이선스 5개 어플리케이션 기준 GitHub 스타 총 29,636개, npm 다운로드수 4,507,082회(19.01~20.10)
  3. 그 중에, 저는 FE Weekly, Monthly, FE Guide 등 여러

    오픈 소스 활동 TOAST UI Grid 4.x 개발 nhn/tui.grid TOAST UI Chart 3.x 및 4.x 메인테이닝 nhn/tui.chart
  4. 왜 다들 마음 한편에 오픈 소스를 하려는 마음을 가질까? (모두가

    이런 선한 마음으로 시작하는 건 아닐 것이다.)
  5. 이 발표에서 이야기 하고 싶은 것 기업 입장이 아닌 개인

    입장에서 실질적으로 좋았던 점 메인테이너로써 오픈 소스를 운영하는 입장에서 배울 수 있던 점 어떻게 시작할 수 있을까?
  6. 오픈 소스 활동은 무엇이 있을까? 프로그래밍 오픈 소스 활동 디자인

    번역 테스트 작성 문서 편집 커뮤니티 관리 보안 검토 홍보 마케팅 UI UX 접근성 그래픽
  7. 1. 전반적인 분야에 참여할 수 있다 프로그래밍 오픈 소스 활동

    디자인 번역 테스트 작성 문서 편집 커뮤니티 관리 보안 검토 홍보 마케팅 UI UX 접근성 그래픽
  8. 디자인 전반적인 분야에 의견을 낼 수 있다 프로그래밍 오픈 소스

    활동 디자인 번역 테스트 작성 보안 검토 UI UX 접근성 그래픽 문서 편집 커뮤니티 관리 홍보 마케팅
  9. 문서 편집, 번역 또한 한다 프로그래밍 오픈 소스 활동 디자인

    번역 테스트 작성 보안 검토 UI UX 접근성 그래픽 문서 편집 커뮤니티 관리 홍보 마케팅
  10. 커뮤니티 관리, 홍보, 마케팅도 할 수 있다 프로그래밍 오픈 소스

    활동 테스트 작성 커뮤니티 관리 보안 검토 홍보 마케팅 디자인 UI UX 접근성 그래픽 번역 문서 편집
  11. 다양한 경험, 서비스에 대한 애착 프로그래밍 오픈소스 활동 디자인 번역

    테스트 작성 커뮤니티 관리 보안 검토 홍보 마케팅 UI UX 접근성 그래픽 문서 편집
  12. 2. 범용적인 기능에 대해 많은 고민을 할 수 있다 범용적인

    기능? 코드? 여러 분야나 용도로 널리 쓰는. 또는 그런 것
  13. 최대한 많은 서비스에서 쉽게 사용될 수 있도록 쉽게 커스터마이징 되는

    확장하기 쉬운 불필요한 기능 없이 작고 가벼운 직관적인 API와 매개변수, 반환 값 아무 프로젝트에 쉽게 적용할 수 있는 가장 일반적인 사용성 부족하지도, 과하지도 않은 기능 이해하기 쉽고 쉽게 기여 가능한
  14. 3. 커뮤니케이션 연습 소프트 스킬(Soft Skill)이란, 기업 조직 내에서 커뮤니케이션,

    협상, 팀워크, 리더십 등을 활성화할 수 있는 능력을 뜻함 소프트 스킬 출처: https://terms.naver.com/entry.nhn?docId=15073&cid=43659&categoryId=43659
  15. 오픈 소스 메인테이너들은 당신에게 빚지지 않았다 (Evan Czaplicki, Elm 프로그래밍

    언어 설계자) The Hard Parts of Open Source 참고: https://www.youtube.com/watch?v=o_4EX4dPppA
  16. 어떻게 질문하는게 좋을까 ✔ 정중하게 감사를 표하며 ✔ 명료하고 구체적인

    사례와 함께 ✔ 템플릿이 있다면 최대한 충실하게
  17. 어떻게 질문하는게 좋을까 ✔ 정중하게 감사를 표하며 ✔ 명료하고 구체적인

    사례와 함께 ✔ 템플릿이 있다면 최대한 충실하게 ✔ 독촉하지 않으면서(비동기로 이뤄지는 대화에 익숙해지자)
  18. 4. ! 성과가 외부로 드러난다 ! 큰 노력 없이 포트폴리오가

    만들어진다 내 코드를 보는 사람들이 생긴다 공유에 익숙해진다
  19. 많은 개발자들의 코드를 살펴보며 범용적인 코드를 작성하는 연습을 할 수

    있는, 개발 뿐만 아니라 다양한 경험을 하며 많은 것을 배울 수 있는,
  20. 적절한 의사소통의 자세에 대해 연습할 수 있는, 많은 개발자들의 코드를

    살펴보며 범용적인 코드를 작성하는 연습을 할 수 있는, 개발 뿐만 아니라 다양한 경험을 하며 많은 것을 배울 수 있는,
  21. 추가적인 노력없이 내 성과를 온전히 드러낼 수 있는, 적절한 의사소통의

    자세에 대해 연습할 수 있는, 많은 개발자들의 코드를 살펴보며 범용적인 코드를 작성하는 연습을 할 수 있는, 개발 뿐만 아니라 다양한 경험을 하며 많은 것을 배울 수 있는,
  22. 오픈 소스 활동을 통해 성장했다 추가적인 노력없이 내 성과를 온전히

    드러낼 수 있는, 적절한 의사소통의 자세에 대해 연습할 수 있는, 많은 개발자들의 코드를 살펴보며 범용적인 코드를 작성하는 연습을 할 수 있는, 개발 뿐만 아니라 다양한 경험을 하며 많은 것을 배울 수 있는,
  23. 만들어진 프로젝트에 참여하자 § 내 소유가 아니다 § 책임이 덜하다

    § 여러 관심있는 프로젝트에 동시에 참여할 수 있다 § 커뮤니티가 활발한 곳에 참여할 수 있다 § 도움을 받을 수 있는 확률이 높아진다 § 토론이 더 활발하게 일어나고 더 많은 것을 듣고 배울 수 있다 장점
  24. 만들어진 프로젝트에 참여하자 § 내 소유가 아니다 § 커뮤니티에 적응하는데

    시간이 오래 걸릴 수 있다 § 그들만의 암묵적인 룰 들을 이해하는데 시간이 더 걸릴 수 있다 § 커뮤니티가 활발 하다면 그 문제를 해결할 사람도 많다는 것 § PR을 노리는 수많은 사람들이 존재. 기여하기 힘들 수 있다 단점 (누군가 선점했지만 몇 달 동안 PR 소식이 없는 경우도 있다.) ষ૑ח rӒېs੄ ੄޷ੋо !
  25. 1. 개인적으로는 이미 잘 알고 있는, 사용해 본 적이 있는

    분야부터 시작하는 것을 추천 § 어떤 프로젝트를 시작하는지는 개인의 자유 § 하지만 기여 가능 여부는 개인의 자유가 아니다 만들어진 프로젝트에 참여하자 프로젝트 선정
  26. 1. 개인적으로는 이미 잘 알고 있는, 사용해 본 적이 있는

    분야부터 시작하는 것을 추천 § 어떤 프로젝트를 시작하는지는 개인의 자유 § 하지만 기여 가능 여부는 개인의 자유가 아니다 2. 파일 살펴보기 § 프로젝트 루트 경로에 있는 문서 파일들은 한번씩 살펴봐야 한다. 이런 파일들을 읽어보면서 기여 가능 여부를 판단한다. § README.md: 프로젝트 소개, 정보, 간단한 예제 등이 나열 됨 § LICENSE(COPYING): 'OSI에서 승인한 라이선스인가?’를 살펴봐야 함 § CONTRIBUTING: 기여에 충족될 수 있는 여러가지 조건들이 나열 됨 § CoC(Code of Conducting): 환영 받지 못하는 행동, 신고할 수 있는 방법 등이 적혀 있다 만들어진 프로젝트에 참여하자 프로젝트 선정
  27. 하지만, 모든 프로젝트가 기여에 호의적이지는 않다 (Rich Hickey, Clojure 프로그래밍

    언어 설계자) “Open Source is Not About You” 참고: https://gist.github.com/richhickey/1563cddea1002958f96e7ba9519972d9
  28. merge 된 PR, 활발하게 토론되고 있는 issue를 살펴보자 커뮤니티의 분위기를

    파악하라 (뭘 해야 할지 모르겠으면 “CONTRIBUTING.md”부터 보자)
  29. 이슈를 올리거나 PR을 올린다면 ✔ 같은 이슈, 기능 요청 이슈나

    진행되고 있는 스레드가 있는지 찾기 존재한다면 관심을 표현하기 " # $ 닫혔다면 댓글을 남기거나 reopen 하지 말고 새로운 이슈 열기
  30. 존재한다면 관심을 표현하기 ! " # 닫혔다면 댓글을 남기거나 reopen

    하지 말고 새로운 이슈 열기 이슈를 올리거나 PR을 올린다면 ✔ 최대한 구체적으로 정중하게 작성하기 ✔ 같은 이슈, 기능 요청 이슈나 진행되고 있는 스레드가 있는지 찾기
  31. 템플릿에 충실하게 § 버그라면 재현에 대한 정보를 구체적으로 § 스크린샷

    § 발생 환경(브라우저, 모바일, 버전) § 가능하다면 Online IDE(ex> codesandbox)로 § 기능 제안은 해당 기능이 왜 필요한지 § 너무 서비스에 종속적인 기능이 아닌지 § 현재 동작과 기대되는 동작 § 기대되는 동작이 나의 고정관념에서 나온 동작은 아닌지 리서치 해보기
  32. 적절하게 작성하기 상황에 따라 정보의 종류는 다르겠지만 상황을 이해하는데 필요한

    정보를 반복적인 의사소통 없이 이해하도록 전달하는 것이 좋다 명확한 환경 간략한 설명 구체적인 재현 방법
  33. 존재한다면 관심을 표현하기 ! " # 닫혔다면 댓글을 남기거나 reopen

    하지 말고 새로운 이슈 열기 이슈를 올리거나 PR을 올린다면 ✔ 최대한 구체적으로 정중하게 작성하기 ✔ 기여 하기 전 메인테이너에게 의견 물어보기 “내가 이 이슈에 대한 개발을 해도 될까요?” 물어보기 익숙하지 않은 프로젝트라면 메인테이너와 충분히 의견을 나누고 시작하기 ✔ 같은 이슈, 기능 요청 이슈나 진행되고 있는 스레드가 있는지 찾기
  34. 존재한다면 관심을 표현하기 ! " # 닫혔다면 댓글을 남기거나 reopen

    하지 말고 새로운 이슈 열기 이슈를 올리거나 PR을 올린다면 ✔ 최대한 구체적으로 정중하게 작성하기 ✔ 기여 하기 전 메인테이너에게 의견 물어보기 “내가 이 이슈에 대한 개발을 해도 될까요?” 물어보기 익숙하지 않은 프로젝트라면 메인테이너와 충분히 의견을 나누고 시작하기 ✔ 같은 이슈, 기능 요청 이슈나 진행되고 있는 스레드가 있는지 찾기 ✔ 코드 리뷰 전 필요한 작업 모두 마무리 했는지 확인 한번 더 하기 코드 스타일, 문서 작성, 테스트 작성, 다른 동작에 영향이 있는지 등등 확인하기%
  35. 이슈를 올리거나 PR을 올린다면 ✔ 최대한 구체적으로 정중하게 작성하기 ✔

    내 용건이 끝나도 맘대로 issue 닫지 않기 ✔ 기여 하기 전 메인테이너에게 의견 물어보기 “내가 이 이슈에 대한 개발을 해도 될까요?” 물어보기 익숙하지 않은 프로젝트라면 메인테이너와 충분히 의견을 나누고 시작하기 ✔ 같은 이슈, 기능 요청 이슈나 진행되고 있는 스레드가 있는지 찾기 ✔ 코드 리뷰 전 필요한 작업 모두 마무리 했는지 확인 한번 더 하기 코드 스타일, 문서 작성, 테스트 작성, 다른 동작에 영향이 있는지 등등 확인하기" 존재한다면 관심을 표현하기 # $ % 닫혔다면 댓글을 남기거나 reopen 하지 말고 새로운 이슈 열기
  36. 이슈를 올리거나 PR을 올린다면 ✔ 최대한 구체적으로 정중하게 작성하기 ✔

    내 용건이 끝나도 맘대로 issue 닫지 않기 ✔ 기여 하기 전 메인테이너에게 의견 물어보기 “내가 이 이슈에 대한 개발을 해도 될까요?” 물어보기 익숙하지 않은 프로젝트라면 메인테이너와 충분히 의견을 나누고 시작하기 ✔ 같은 이슈, 기능 요청 이슈나 진행되고 있는 스레드가 있는지 찾기 ✔ 코드 리뷰 전 필요한 작업 모두 마무리 했는지 확인 한번 더 하기 코드 스타일, 문서 작성, 테스트 작성, 다른 동작에 영향이 있는지 등등 확인하기" 존재한다면 관심을 표현하기 # $ % 닫혔다면 댓글을 남기거나 reopen 하지 말고 새로운 이슈 열기
  37. 회사에서 개발한 프로젝트를 공개해도 좋다 작은 프로젝트, 모듈부터 시작하자 새로운

    무언가를 만들려는 것보다 기존의 것을 개선해서 시작하자 공유가 자연스러운 조직 문화를 만들어진다
  38. 반드시 필요한 몇 가지 작업들 오픈 된 Source (스타일 정리)

    README CONTRIBUTING 파일 Code Of Conduct 가이드 문서 커뮤니티 (이슈를어디에 모을것인가) LICENSE 파일 !
  39. 사용자를 모으기 위한 노력들 소셜 미디어 홍보(facebook, twitter, reddit, hacker

    news 등..) 로드 맵, 지속적인 업데이트 등 꾸준한 공유가 필요
  40. 이슈나 PR에 답변할 때는 ✔ 최대한 빠르게 ✔ 어려움에 공감하면서

    ✔ 구체적인 리뷰와 명확한 기준을 제시하면서 프로젝트를 이해할 수 있도록
  41. 이슈나 PR에 답변할 때는 ✔ 최대한 빠르게 ✔ 어려움에 공감하면서

    ✔ 구체적인 리뷰와 명확한 기준을 제시하면서 프로젝트를 이해할 수 있도록 ✔ 비방이나 구체적이지 않은 질문에 많은 노력을 들이지 말고
  42. 오픈 소스는 나와 기술 생태계 모두에게 도움이 되는 훌륭한 활동이다

    마지막으로 미루지 말고 쉬운 것부터 지금 시작해보는 건 어떨까?