Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

[Book] 오픈 소스로 미래를 연마하라

제목 그대로 오픈소스에 관한 책이고 이 책에서는 자유 소프트웨어와 오픈소스 소프트웨어를 모두 포괄하는 FOSS(Free and Open Source Software)라고 부르고 있다. 오픈소스로 책을 검색하면 꽤 많은 책이 나오는데 오픈소스 프로젝트 외에도 오픈소스에 기여하는 방법에 대한 책도 많이 있다.

1983년 리처드 M. 스톨먼은 소프트웨어 사용자들이 더 이상 자유롭게 소프트웨어를 살펴보고 수정하고 공유할 수 없다는 사실에 실망했고 GNU 프로젝트를 시작했다.

이런 책의 대부분이 GitHub의 사용법이나 오픈소스 생태계의 도구들을 설명하는 실용서라서 처음 오픈소스 생태계를 배울 때 도움 되지만 더 큰 그림은 못 보여주고 있다고 생각한다. 리차드 스톨만이 자유 소프트웨어를 얘기하면서 지금의 대세가 된 오픈소스의 분위기까지 담긴 역사와 철학 등이 있고 단순히 어떤 도구를 쓰느냐 이상의 발전 과정에 담긴 많은 내용이 있다고 생각한다.

오픈소스 생태계에 익숙해지기 위해 결국 배워야 하는 것은 '사람과 사람이 만나는 태도'에 관한 내용입니다.

실용서가 많은 데 비해서 이런 내용을 담고 있던 책이 없어서 아쉬웠기에 이번 책이 나왔을때 반가웠다. 실제로 작년 컨트리뷰톤에 참가하면서 오픈소스를 좀 설명해 주려고 했을 때 내가 선택한 책은 성당과 시장오픈 소스 : 오픈 소스 혁명의 목소리였는데 "성당과 시장"의 원서는 1997년에 나왔고 "오픈 소스 혁명의 목소리"는 1999년에 나왔다.

많은 사람이 알고 있는 내용과 달리 FOSS에서는 소프트웨어만 중요한 게 아니라 사람도 중요하다.

그만큼 오픈소스에 대해서 포괄적으로 설명하는 책이 적었다고 생각하는데 이 책은 그런 부분을 다뤄주고 있다. 책에서 라이센스와 기여하는 방법, 프로젝트나 이슈를 선택하는 방법도 나와 있지만 전체적으로 특정 플랫폼이나 도구를 특정 짓지 않으면서도 오픈소스에 어떻게 기여하고 왜 생태계가 그렇게 구성되어 있으며 어떤 태도와 기대를 하고 참여해야 하는지를 잘 설명하고 있다고 생각한다. 그런 면에서 특정 서비스나 플랫폼의 사용법을 배우진 못해도 더 긴 안목으로 써먹을 수 있는 지식을 배울 수 있는 책이다.

무언가를 기여하려면 FOSS 프로젝트에 공통으로 내재한 사회적 구조와 철학을 반드시 이해해야 한다.

소프트웨어를 오픈 소스로 만드는 것은 단지 소스 코드 이용 가능성이 아니라, 라이선스 그리고 해당 라이선스의 지시 사항들이다.

1장에서는 자유 소프트웨어와 오픈소스의 철학과 기원을 설명해서 어떤 차이가 있는지 이해할 수 있게 돕고 자연히 따라오는 라이선스에 관해 설명해서 FOSS의 기본을 이해할 수 있도록 돕는다.

자유 소프트웨어와 오픈 소스의 차이점은 철학과 동기에 있다. 자유 소프트웨어 지지자들의 노력에는 강한 도덕적 목적이 있다. ... 오픈 소스는 그 동기를 좀 더 실용적인 문제에서 찾는다. 오픈 소스 지지자들은 소프트웨어 소스를 공개적으로 이용할 수 있다면 소프트웨어를 이용하는 사업, 과학, 예술, 다른 모든 시도가 좀 더 잘 돌아갈 수 있으리라 생각한다.

2장에서는 FOSS에서 배울 수 있는 점을 설명해서 FOSS 기여를 왜 해야 하는지를 설명하고 있다. 안전한 환경에서 새로운 기술을 배우고 연습할 수 있으며 의사소통 기술을 발전시킬 수 있다고 하고 있다.

FOSS는 끊임없이 움직이고 발전하고 혁신하기 때문에 많은 업계의 현재 모범 사례가 FOSS 개발에서 비롯됐거나 완성됐다. 버전 관리, 기능 브랜치, 단위/통합 테스트, 지속적 통합/배포, 디자인 패턴 등이 그 예다.

3장에서는 실제 기여하기 위한 준비 과정을 포괄적으로 설명하고 있다.

  1. 기여하고 싶다는 걸 깨닫는다.
  2. 프로젝트를 찾는다.
  3. 할 일을 찾는다.
  4. 환경을 구성한다.
  5. 기여 작업을 한다.
  6. 기여를 제출한다.
  7. 피드백을 받고 코드 개선을 반복한다.
  8. 기여가 받아들여진다!
  9. 1번부터 다시 시작한다.

위의 과정으로 기여를 한다고 설명하고 4장부터 6장까지는 실제로 기여하기 위해 프로젝트를 어떻게 찾아야 하고 기여를 하는 방법과 고려해야 할 점 등을 설명한다. 앞에서 말했듯이 특정 서비스를 위주로 설명한다기보다는 기여 과정 자체를 이해하고 접근할 수 있도록 해서 특정 서비스가 아니어도 할 수 있게 설명한다.

핵심 기여자가 아닌 사람들이 그 일을 할 수 있다면 핵심 기여자들은 좀 더 세세한 검토에 필요한 시간을 확보할 수 있다.

여러분의 기여가 좋고 가치 있다고 생각하더라도 프로젝트 담당자가 받아들이지 않을 수도 있다. 그렇더라도 사적으로 여기지 말라.

FOSS에서 가장 중요한 측면은 코드가 아니라 사람이기 때문이다. FOSS 기여에서는 단순히 코드, 디자인, 문서 작업이 아니라 참여와 커뮤니티가 중요하다.

뒷부분에서는 FOSS의 핵심 중 하나인 소통을 다루고 있다. 실제로 기여를 하면 Pull Reqeust를 올리는 것은 시작에 불과하고 이후에 왜 이 코드 변경이 필요한지를 설득하고 논의하는 길고 긴 시간이 필요한데 그 부분을 많이 다뤄주는 점이 좋았다. FOSS 커뮤니티가 어떤 식으로 소통을 하고 어떻게 대응해야 하는지 잘 설명해 준다.

커뮤니티 멤버들은 우호적이지 않고 사람을 판단하고 환영하지 않는다. "이봐, 받아들여. 우리도 힘들게 했으니 당신도 그렇게 해야 해"라는 태도가 만연해 있다. 커뮤니티 멤버들은 반대되는 의견이나 불완전한 기여를 보면 공격적이 되고 모욕을 준다. FOSS에서 살아남는 유일한 방법은 철면피가 되거나 '자기 이익만 생각하는' 것이다. 이것이 FOSS에 대한 평판이다.

특히, 이 책에서 좋았던 점은 "오픈소스에 참여하면 좋다"고 장점만 부각하지 않는다는 점이다. 실제로 무례한 사람이나 우호적이지 않은 프로젝트들이 존재하고 그런 부분이 상처가 되거나 커뮤니티를 벗어나게 되는 원인이 되기도 하는데 이런 부분도 가감 없이 다뤄주고 있으며 떠나고 싶을 때 어떻게 하는 게 좋은지까지 설명해 준다.

나도 이런 철학이나 기원에 대해서 이해하는 과정을 중요하게 생각하는 터라 오픈소스에 관심이 있을 때 추천해 줄 만한 좋은 서적이 생긴 것 같다.

2020/01/10 00:35 2020/01/10 00:35

기술 뉴스 #141 : 20-01-02

웹개발 관련

  • The State of JavaScript 2019 : 매년 발표되는 JavaScript 개발자의 설문 조사를 통해서 생태계의 현황을 정리한 글로 올해는 2만여 명의 JavaScript 개발자가 설문에 참여했다. 지역별 연봉, 프레임워크, 테스트 도구, 백엔드, 모바일 등 다양한 영역에서 어떤 도구를 주로 사용하고 있는지를 보여주고 있다.(영어)
  • http-decision-diagram : HTTP의 상태 코드를 결정하는 다이어그램이다. 200대부터 500대 코드까지 HTTP 요청 상황의 true/false로 따라가서 적절한 상태 코드를 찾을 수 있는데 HTTP 상태 코드를 이해하는 데도 도움이 될 것 같다.(영어)
  • JavaScript & Node.js Testing Best Practices : 테스트 관련 황금율과 기초 테스트 구성에 대한 설명을 한 뒤 백엔드/프론트엔드의 테스트 방법을 설명하고 테스트 품질측정과 CI에 대해서 정리해 놓은 글의 한국어 번역 글이다. 관련 사례와 예제 코드까지 잘 정리되어 있다.(한국어)
  • 웹 개발자의 지옥, 이메일 폼 개발하기 : 다양한 이메일 서비스와 클라이언트 때문에 이메일 폼을 개발하는 건 정말 어려운데 이런 부분이 왜 어렵고 작업할 때 어떤 부분을 유의해서 작업했는지를 정리한 글이다. 이메일 받을 때는 별거 아닌 것처럼 느껴질 수 있지만 이메일을 직접 만들어서 보내보면 얼마나 많은 삽질이 필요한지 느끼며 이 글이 도움이 될 것이다.(한국어)
  • World Wide Web Consortium (W3C) brings a new language to the Web as WebAssembly becomes a W3C Recommendation : WebAssembly가 W3C 권고안이 되었다.(영어)

그 밖의 개발 관련

  • How To Prefix Your Commit Message With a Ticket Number Automatically : prepare-commit-msg 훅을 이용해서 Git의 브랜치 이름에서 자동으로 티켓번호를 커밋 메시지 앞에 자동으로 붙여주는 방법을 설명하고 있다.(영어)
  • How Positive was Your Year with TensorFlow.js and Twilio : Twilio에서 Tensorflow.js를 이용해서 API로 가져온 SMS 메시지가 긍정적인지 부정적인지를 분석해서 보여주는 간단한 Node.js 애플리케이션을 작성하는 방법을 보여주고 있다.(영어)
  • iOS 13에서 다크 모드 지원하기 (Supporting Dark Mode) : iOS 13에서 추가된 다크모드를 iOS 앱에서 지원하면서 앱의 원하는 색상을 지원하려면 어떻게 해야 하는지를 설명한 글로 제어할 수 있는 API를 소개하고 다크모드를 지원하지 않는 경우 라이트 모드로 고정하는 방법까지 소개하고 있다.(한국어)
  • Applescript로 간단한 카톡 자동 대화하기 : 카카오톡의 봇하고 얘기하는 이벤트를 자동화하기 위해서 Applescript를 이용해서 미리 정의된 대화의 메시지를 보내도록 자동화한 과정이 나와 있다. 창을 선택할 수 없어서 완전 자동화까지 되지는 않았지만 Applescript로 어떻게 자동화 할 수 있는지 나와 있다.(한국어)

인프라 관련

  • 만들면서 이해하는 도커(Docker) 이미지의 구조 : Docker 이미지의 구조를 설명하는 글이다. 보통 레이어로 되어 있다는 것은 알려져 있지만, 실제 Pull을 받을 때 레이어의 구조와 이 레이어 위에서 컨테이너로 실행할 때 어떻게 달라지는지 왜 컨테이너를 내리면 변경사항이 사라지는지 등을 실제로 레이어를 직접 만들고 조작해 보면서 이해할 수 있게 설명하고 있다. 뒤에서는 OverlayFS를 사용해 보면서 동작 방식을 이해할 수 있게 보여주고 있는데 Docker 이미지가 어떻게 동작하는지 깊게 이해할 수 있는 좋은 글이다.(한국어)
  • k3s로 간단하게 Kubernetes 환경 구축하기 : AWS Lightsail에 인스턴스를 띄워서 경량 Kubernetes인 k3s로 Kubernetes 환경을 구성해서 로컬에서 접속하는 과정을 설명하는 글이다.(한국어)

볼만한 링크

  • 상품 상세페이지 개선해 성과내기 : 스타일쉐어에서 네이버 최저가검색 등으로 유입되는 상품 상세페이지의 디자인을 개선하고 목표했던 지표에서 20% 이상 높인 과정을 소개하고 있다. 각 디자인 개선을 어떤 의도로 했는지를 설명하고 이전 디자인과 비교해서 쉽게 읽을 수 있다.(한국어)

IT 업계 뉴스

프로젝트

  • Scully : Angular로 정적 웹사이트 생성 도구로 React나 Vue에서는 할 수 있었지만 이제 Angular로도 정적 웹사이트를 만들 수 있게 되었다.
  • Hippy : Tencent에서 만든 크로스 플랫폼 프레임워크로 웹 기술을 이용해서 Web, iOS, Android 3개의 플랫폼의 앱을 만들 수 있다.

버전 업데이트

2020/01/02 03:52 2020/01/02 03:52