Outsider's Dev Story

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

기술 뉴스 #142 : 20-01-15

웹개발 관련

  • Building an offline first web app with RxDB & Hasura : PouchDB를 사용하는 RxDB로 클라이언트에 데이터를 저장하고 Postgres 데이터베이스에 연결된 Hasura를 이용한 GraphQL로 서버와 동기화해서 React로 만든 todo 앱을 오프라인 퍼스트 웹앱으로 구성하는 방법을 설명하는 글이다. 단계별로 어떻게 구성하는지를 예시 코드와 함께 제공하고 있다.(영어)
  • HTML attributes to improve your users' two factor authentication experience : HTML <input> 요소로 2단계 인증의 사용자 경험을 높이는 방법을 설명한다. inputmodepattern으로 숫자 키보드로 바로 입력하게 하고 autocomplete="one-time-code" 속성으로 iOS 기기에서 SMS로 받은 코드를 자동입력할 수 있게 하는 팁 등이 나와 있다.(영어)
  • How CORS (Cross-Origin Resource Sharing) Works? : 웹 프론트엔드에서 다른 도메인에 API 요청하려면 필수적인 CORS의 동작을 설명하고 있다. 간단한 글이지만 CORS이 왜 필요하고 어떤 식으로 동작하는지 나와 있다.(영어)

그 밖의 개발 관련

  • 파이썬(Python) 2.7 공식 지원 종료 : 프로그래밍 언어 파이썬 2.7이 올해 릴리스를 마지막으로 지원 종료가 되고 3 버전만 유지하게 되는데 2 버전의 역사와 종료 과정을 정리한 글이다.(한국어)
  • 프로그래밍 언어 루비 2.7 릴리스 및 주요 변경 사항 : 지난 크리스마스에 릴리스 된 Ruby 2.7 버전에서 달라진 점을 정리한 글이다.(한국어)
  • 알아두면 유익한 2019 개발이야기 : subicura님이 작년에 개발하면서 회사에서 사용한 기술 스택을 정리하고 각 기술에서 느낀 점을 정리한 글이다. TypeScript, Styled Component, Next.js, Headless CMS, GraphQL, Hasura, Apollo, Terraform까지 요즘 관심 가질 만한 수많은 기술을 subicura님이 깔끔하게 정리해 주셔서 각 기술의 특징을 쉽게 파악할 수 있다.(한국어)
  • 공식문서 만으로 iOS 개발 배우기 : iOS 개발할 때 인터넷의 많은 강좌나 글 대신 Apple에서 제공하는 공식 문서화 튜토리얼로 배우기 위해 Swift, XCode, Navigation 참고해야 할 공식 문서를 추천하고 어떤 내용과 순서로 배우면 되는지 알려주는 글이다. 자료가 넘쳐나는 시대라서 글 마지막에 나오듯이 "특히 초심자일수록, 가급적 그런 자료들은 공식문서를 이해하는 보조자료로 사용하시라고 말씀드리고 싶어요."라는 말에 동의한다.(한국어)
  • Monitoring Node.js: Watch Your Event Loop Lag! : Node.js 애플리케이션의 성능을 개선하기 위해서 이벤트 루프 동작 방식에서 이벤트를 스케쥴링하고 실행할 때까지의 시간을 계산하는 event loop lag을 어떻게 탐지하는지를 설명하고 있다. 비동기로 실행되지만 논 블록킹 코드는 아니라서 메인 스레드의 event loop lag에 영향을 주는 bcryptjs 예시로 lag이 어떻게 달라지는지 보여주고 네이티브 애드온으로 개발된 bcrypt에서 lag을 개선하는 과정을 보여주고 있다.(영어)

인프라 관련

  • 도커 컨테이너는 가상머신인가요? 프로세스인가요? : Docker 컨테이너가 가상머신인지 프로세스인지를 설명하기 위해서 PID를 추적해 보면서 동작 방식을 설명하는 글이다. 이 글을 통해서 Docker가 PID를 어떻게 사용하고 있고 이는 호스트 머신에서는 어떤 게 구분되어 있는지 프로세스임에도 왜 가상머신처럼 보이는지도 이해할 수 있다.(한국어)
  • Deploy your side-projects at scale for basically nothing - Google Cloud Run : 개인 사이드 프로젝트를 운영하기 위해 DigitalOcean, GKE 등을 썼지만 만족 못 하다가 완전히 관리되고 싸고 확장성 있으면서 언어도 원하는 대로 사용할 수 있는 솔루션을 찾다가 이를 모두 만족하는 Google Cloud Run을 쓰기로 했다고 하면서 간단한 Node.js를 배포하는 방법을 설명한다.(영어)
  • 아마존 ECR, 도커 이미지 취약점 스캔 기능 추가 : AWS의 도커 이미지 레지스트리인 ECR에 새로 추가된 취약점 스캔 기능의 사용법을 설명하고 있다. CoreOS Clair의 CVE 데이터베이스로 검사해서 도커 이미지에 취약점이 있는지 알려주고 이미지당 하루에 1번 실행이 가능하다고 한다.(한국어)

볼만한 링크

  • 위대한 제품의 특성 : 제품 담당자를 면접할 때 자주 믿는 질문인데 그 질문에 대한 답을 직접 정리한 글이다. 위대한 제품은 기본 기능이 제대로 동작해야 하고 성능이 사용자의 기대치를 뛰어넘고 기대하지 않았던 부분까지 배려하여 사용자들이 다른 사람들에게 제품에 대해 자발적으로 말하게 하면서 사용자의 행동/태도를 바꾼다고 정리하고 있다.(한국어)

IT 업계 뉴스

프로젝트

  • QA Wolf : Puppeteer와 Jest로 브라우저 테스트 환경을 쉽게 구성할 수 있는 프로젝트.
  • Snowpack : 별도의 번들러 없이 웹앱을 빌드하게 해주는 도구. IE11은 지원하지 않는다.
  • BLAKE3 : 안전하고 빠른 암호화 해시 함수.
  • Plash : 웹사이트를 macOS의 바탕화면으로 만드는 macOS 앱.

버전 업데이트

2020/01/15 03:43 2020/01/15 03:43

[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