Outsider's Dev Story

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

기술 뉴스 #130 : 19-07-15

웹개발

  • Google's robots.txt Parser is Now Open Source : Google이 robots.txt 파서를 오픈소스로 공개했다. 이 파서는 C++로 작성되었고 다루기 쉽지 않은 robots.txt의 다양한 문제를 해결한 Google의 경험이 녹아 들어있다.(영어)
  • #1 React + Storybook + Puppeteer + Jest 개발환경 구축하기 : React와 Storybook 구성을 설명한 뒤에 여기서 Jest 테스트를 설정하고 결과 HTML을 이전 테스트와 비교해서 달라졌을 경우 테스트가 깨지도록 하고 여기에 Puppeteer로 스크린샷을 찍어서 달라진 부분을 눈으로 쉽게 확인할 수 있도록 설정하는 과정을 설명하고 있다.(한국어)

그 밖의 개발 관련

  • Seriously, stop using RSA : 예외 없이 어는 RSA를 쓰면 안 된다고 설명하는 글이다. 대부분 개발자가 RSA가 안전하다고 생각하지만(나도 그런 줄 알고 있었다) 그렇지 않고 암호 쪽은 몰라서 완전히 이해하지 못했지만, RSA에 지정하는 파라미터를 잘못 사용하기가 너무 쉽고 공격 취약점도 존재하며 TLS 1.3에서도 RSA를 사용하지 않는다고 한다. ECC나 Diffie-Hellman 기반을 사용하거나 Curve25519를 추천하는데 Curve25519는 libsodium이라는 좋은 구현체도 있으니 이를 쓰라고 하고 있다.(영어)
  • 소프트웨어 환멸감 : 요즘은 엔지니어링에서 효율을 추구하고 제대로 만들려는 노력이 거의 없어서 환멸감이 들 정도라는 내용의 글이다. 하드웨어가 좋아지면서 소프트웨어는 오히려 너무 느려져서 웹사이트조차도 제대로 보여주지 못하고 OS나 애플리케이션의 용량은 불필요하게 너무 크고 개발 의존성은 꼬여있고 빌드 시간도 너무 오래 걸리는데 아무도 관심 없다고 얘기하고 있다. 가끔 불평할 때도 있지만 개발하면서 이런 부분은 당연히 넘어갔던 것 같아서 반성해보게 만드는 글이다.(한국어)
  • 멀티모듈 설계 이야기 with Spring, Gradle : 배달의 민족에서 멀티 모듈 프로젝트로 개발을 하면서 공통 모듈에 너무 많은 로직이 들어가고 서로 의존성이 섞여서 관리가 어려워진 문제를 해결하기 위해 각 모듈의 개방/폐쇄 원칙을 지켜서 각 모듈이 자신의 할 일만 하고 서로의 관심사를 분리할 수 있도록 구성한 과정을 설명하고 있다.(한국어)
  • 문서 엔지니어링과 API 문서화 : 라인에서 API 문서화를 고민하는 도큐먼트 엔지니어가 사내 API 및 REST API의 문서화를 어떻게 할지를 고민해서 YAML과 Markdown으로 데이터와 문서를 분리해서 작업한 내용을 정리한 글이다. 대부분의 회사는 문서화 도구를 자체적으로 만들어서 문서화하기가 쉽지 않긴 하지만 오픈소스 도구들도 비슷한 접근을 하므로 이 글에서 대부분의 API 문서화 도구가 어떤 접근을 하고 있는지 이해할 수 있다.(한국어)
  • 여러 개의 JDK를 설치하고 선택해서 사용하기 : JDK의 버전이 다양해 짐에 따라 개발할 때도 여러 버전이 필요한 경우가 많아지는데 여러 버전의 JDK를 설치하고 관리할 수 있는 도구의 사용법을 설명하고 차이점을 설명하는 글이다.(한국어)

인프라 관련

  • Intro Guide to Dockerfile Best Practices : Dockerfile을 작성할 때 빌드 시간과 이미지 크기를 줄이고 유지보수하기 좋게 만드는 팁을 정리한 글이다.(영어)
  • AWS EBS(Elastic Block Storage) 비용 최적화 : AWS에서 스토리지로 이용할 수 있는 EBS의 성능을 잘 활용하면서 비용도 최적화하기 위해서 EBS의 중요 지표인 IOPS를 설명하고 EBS 스토리지 유형에 따라 IOPS를 어느 정도 이용할 수 있는지 설명하고 있다. EBS를 쓸 때 이해해야 할 중요한 개념을 잘 설명하고 있고 실제 운영할 때 이 지표를 CloudWatch에서 확인해서 적절한 스토리지 타입을 선택하도록 안내하고 있다.(한국어)
  • Kustomize - The right way to do templating in Kubernetes : kubectl v1.14에 포함된 kustomize를 이용해서 Kubernetes YAML 설정 파일을 템플릿화해서 사용하는 방법과 환경과 필요에 따라 환경변수, 시크릿, 이미지 변경 등을 어떻게 하는지 설명하고 있다.(영어)
  • Building your own kubernetes CRDs : Kubernetes에서 자신만의 리소스를 만들 수 있는 CRD를 직접 만드는 방법을 설명하는 글이다. Git 웹 훅을 등록해서 받는 CRD를 만들기 위해 kubebuilder로 프로젝트를 생성하고 Go 언어로 CRD를 만드는 방법을 설명하고 전체 예제 코드를 제공하고 있다.(영어)
  • Traefik cluster as Ingress Controller for Kubernetes : Kubernetes에서 Traefik을 Ingress 컨트롤러로 사용하기 위해서 Traefik 클러스터를 구성하는 방법을 설명하고 있다. 이 글에서는 KV 스토어로 Consul을 사용하고 있다.(영어)
  • KAFKA와 그 친구들 : Kafka가 왜 모니터링이 어려운지 설명하고 모니터링에 사용할 수 있는 도구를 소개하는 발표자료다.(한국어)

볼만한 링크

  • Cloudflare outage caused by bad software deploy : 지난 2일 밤 10시 42분 경(KST 기준) Cloudflare에 장애가 나면서 Cloudflare 서비스를 사용하는 대부분의 서비스가 502 페이지를 보면서 장애가 났다. Notion, Medium 등 대부분의 서비스에서 같은 장애가 났는데 방화벽 규칙을 새로 적용하면서 CPU를 100% 사용하게 되는 잘못된 정규 표현식이 포함되면서 이 장애가 발생했다. 이 장애는 해당 규칙을 롤백하면서 30분 정도만에 장애가 해결되었다. 좀 더 자세히 설명된 Details of the Cloudflare outage on July 2, 2019를 보면 배포에 많은 보호장치가 있지만 WAF 규칙은 공격을 빠르게 막기 위해서 이러한 보호장치를 사용하고 있지 않았고 정규 표현식에 포함된 백트래킹 때문에 CPU를 100%까지 사용하는 문제가 발생했다고 한다.(영어)
  • Zoom Zero Day: 4+ Million Webcams & maybe an RCE? Just get them to visit your website! : Zoom에서 미팅 링크를 다른 사람한테 보내면 클릭만으로 간단히 미팅에 들어오는 것을 보고 이게 어떻게 가능한지 추적하다가 Zoom 앱이 로컬에 19421 포트로 웹서버를 띄워두고 localhost:19421로 보낸 요청을 웹서버가 받아서 앱을 실행하고 사용자가 미팅에 들어갈 수 있게 하고 있다고 한다. 이 웹서버는 Zoom 앱이 안 켜고 있을 때도 백그라운드로 켜져 있고 심지어 앱을 지워도 다시 설치하는 등의 일을 하는데, 이 웹서버를 이용해서 계속 앱이 켜지게 하는 DoS 공격을 하거나 사용자의 허락도 없이 카메라를 켠 채로 미팅에 강제로 들어오게 하는 공격도 가능하다고 한다. 이를 Zoom 팀에 보고하고 90일이 지나서 그 내용을 공개했지만, 아직 취약점이 완전히 해결되지 않았다.(영어)
  • 애플, 새로운 폰트 'New York' 공개 : Apple에서 San Francisco 폰트에 이어 New York 폰트를 공개했고 iOS 13에 적용될 예정이다.(한국어)

IT 업계 뉴스

  • DEEPMIND RESEARCH ON LADDER : DeepMind의 스타크래프트 2 에이전트인 AlphaStar가 AI 연구의 일환으로 배틀넷에서 익명으로 게임을 할 것이라고 한다.(영어)

프로젝트

  • Hermes : React Native에서 앱 실행을 빠르게 하고 용량도 줄일 수 있도록 최적화된 JavaScript 엔진을 Facebook에서 공개했다.
  • Git.WTF : Git에서 겪을 수 있는 문제와 해결책을 모아서 정리해 놓는 사이트.
  • Puppeteer recorder : 웹사이트 조작을 녹화해서 Puppeteer 코드로 만들어 주는 크롬 익스텐션.
  • Kui Shell : CLI 명령어를 받아서 웹뷰로 시각화를 해주는 클라우드 네이티브 개발 도구.
  • GeekNews : 해커뉴스 형식으로 기술/스타트업 뉴스를 공유하고 댓글을 남기거나 투표할 수 있는 사이트.
  • Speakeasy : 일회성 패스코드 등 2팩터 인증을 구현할 수 있는 Node.js 라이브러리.
  • Fusuma : Markdown과 MDX로 장표를 만들 수 있는 Node.js 도구.
  • Google Network : 원하는 곳을 클릭하면 데이터를 어디서 받아오는지 시각화해서 보여주면서 구글 네트워크가 퍼블릭 인터넷보다 얼마나 빠른지 보여주는 웹사이트.


버전 업데이트

2019/07/15 23:36 2019/07/15 23:36

기술 뉴스 #129 : 19-07-01

웹개발 관련

  • The cost of JavaScript in 2019 : V8에서 JavaScript의 처리 성능을 높이는 방법에 관해 설명한 글이다. JavaScript 파일이 50 ~ 100KB가 넘으면 작은 번들로 나누는 것이 다운로드도 빠르고 CPU와 메모리 비용도 줄일 수 있고 JavaScript 파일의 실행 시간을 줄이고 인라인 스크립트는 메인 스레드가 담당하기 때문에 너무 많이 사용하지 말라고 하고 있다. 왜 이러한 부분이 실제로 빠른지도 설명하고 있는데 V8에 메인 스레드 외에 워커 스레드로 JavaScript의 실행을 나누어서 처리하기 때문에 이를 활용하면 파싱/컴파일 시간을 줄일 수 있다고 한다.(영어)
  • Every Layout : CSS로 웹사이트의 레이아웃을 구성할 때 종류별로 어떤 문제가 있고 해결방법이 무엇인지를 자세하게 설명하는 글이다. 현재는 아래로 쌓는 Stack과 가운데 큰 영역이 있는 Cover 레이아웃, 사이드바 레이아웃을 볼 수 있고 다른 레이아웃은 아직 열리지 않은 상태이다. CSS를 전문적으로 하지 않다 보니 상황에 급급하게 해결할 때가 많은데 여러 조건을 고려해서 해결책을 제시하고 있다는 점에서 유용해 보인다.(영어)
  • THE SECRET OF GOOD ELECTRON APPS : Electron 앱을 만들 때 메모리도 적게 쓰고 속도를 빠르게 하기 위해서 main 프로세스와 renderer 프로세스 뒤에 Node 프로세스를 띄워서 처리하는 방식을 설명하고 그 예제 소스를 공유한 글이다. 개발 과정에서는 Node 백엔드 프로세스를 별도의 창에 띄워서 개발자 도구로 쉽게 디버깅할 수 있다.(영어)

그 밖의 개발 관련

  • Stop Writing Code Comments : 코드에 남긴 코멘트는 좋지 않은 코드라는 신호이므로 코멘트가 있으면 코드를 더 명확하게 수정해야지 코멘트를 남기지 말아야 한다는 글이다. 코멘트는 보통 코드가 명확하지 않아서 설명하는 것이므로 실패를 덮는 경우가 많고 코드에 이미 표현한 것을 다시 코멘트로 남기거나 너무 긴 함수를 작성해서 코멘트로 설명하는 것도 추상화의 실패를 의미하므로 차라리 함수로 쪼개는 게 낫다고 얘기하는데 나도 코멘트를 좋아하지 않는 편이라 동감하는 내용이다. 현실 코드는 더 복잡하긴 하겠지만 예시도 잘 나와 있어서 이해하기 좋고 마지막으로 정규표현식에 대한 설명이나 경고 등 코멘트를 남겨도 괜찮을 때도 설명하고 있다.(영어)
  • 엔터프라이즈에서의 오픈 소스 : 기업에서 오픈소스를 어떻게 도입하고 사용하면서 오픈소스 커뮤니티를 다시 어떻게 돕고 있는지 등 회사에서 오픈소스를 사용하는 전략을 AWS에서 30여 페이지의 무료 이북으로 만들어서 배포했다.(한국어)
  • Announcing the Visual Studio Code Installer for Java : Visual Studio Code에서 Java 개발을 할 수 있게 환경을 구성해 주는 인스톨러를 Microsoft에서 공개했다.(한국어)
  • Announcing Envoy Mobile : Envoy Proxy의 기능을 iOS(Swift)와 Android(Kotlin)에서 사용할 수 있는 Envoy Mobile 라이브러리의 프리뷰 버전이 공개되었다. 직접 사용해 보지는 못했지만, 글에 따르면 크로스 플랫폼에서 protobuf 코드 생성을 통해 네트워크를 추상화해서 사용하면서 캐싱이나 스트리밍, Envoy 정책 등을 이용할 수 있다고 한다.(영어)

인프라 관련

  • [번역] 쿠버네티스 네트워킹 이해하기#1: Pods : 쿠버네스트에서 Pod은 서로 간에 통신을 할 수 있는데 여러 호스트 간에 이러한 통신 문제를 해결하기 위해서 쿠버네티스가 오버레이 네트워크를 어떻게 구성해서 사용하는가를 설명하는 글이다. 기본적으로 Docker를 사용할 때 구성되는 네트워크부터 여러 노드 간에 어떤 문제가 있어서 오버레이 네트워크가 필요한지가 나와 있다. 2편, 3편도 있다.(한국어)
  • Lambda@Edge와 CF Invalidation : AWS의 CloudFront 엣지 서버에서 실행되는 Lambda@Edge를 이용해서 들어오는 이미지를 on-the-fly로 리사이징해서 사용자에게 제공하고 지워진 이미지는 더는 제공하지 않도록 S3에서 이미지가 지워졌을 때 이벤트를 Lambda와 연결해서 CDN의 캐시를 제거하는 작업을 설명하고 있다.(한국어)
  • Kubernetes의 Elasticsearch : Elastic에서 Elasticsearch와 kibana를 Kubernetes 클러스터에서 쉽게 배포해서 사용/관리할 수 있도록 Elastic Cloud on Kubernetes(ECK)를 공개했다.(한국어)
  • Kubernetes Context in iTerm2’s Status Bar : Kubernetes에서 현재 사용 중인 컨텍스트를 iTerm2의 상태 바에 표시해서 주는 방법을 설명하고 있다.(영어)

볼만한 링크

  • WHAT I LEARNED CO-FOUNDING DRIBBBLE : 디자인 공유 사이트인 Dribbble을 공동 창업자인 Dan Cederholm이 Dribbble을 창업하고 10년 동안 운영한 뒤 물러나기로 하면서 그동안 배운 20가지를 정리해서 쓴 글이다. 공동 창업자를 신중하게 고르고 티셔츠로 초기 사용자를 모으면서 처음 100명의 사용자의 피드백이 왜 중요했는지 등이 나와 있다. Dribbble이 좋아하는 서비스라서 그런지 그동안의 발전 과정 등도 보여서 재미있게 읽었다. "Designing for designers is… difficult."라는 말이 재미있다.(영어)
  • A Day in the Life of a Core Maintainer : Gatsby 메인테이너가 하루를 어떻게 보내는지를 설명한 글이다. 글의 내용만 보면 풀타임 오픈소스 개발자로 보이는데 오픈소스 프로젝트에서 생산성 있는 작업이 무엇인지 설명하고 아침에 일어나서 이슈와 PR을 리뷰하면서 하루를 시작하고 간단한 일을 위주로 처리하다가 많은 사람에게 의미 있는 영향을 줄 수 있는 작업 위주로 집중해서 작업하면서 방해받지 않도록 슬랙 등의 알림을 끈다고 한다. 약간 긴 글이고 풀타임 메인테이너라 약간 다를 수는 있지만 오픈소스 메인테이너들이 프로젝트 개발을 어떻게 하는지 엿볼 수 있다.(영어)
  • 페이스북 암호화폐 Libra 백서 (번역) : 페이스북에서 공개한 암호화폐 Libra의 백서를 번역한 글이다.(한국어)

IT 업계 뉴스

프로젝트

  • Sublette : 이흥섭님이 만든 컬러 스킴으로 iTerm2, Hyper, Jetbrain, VS code 등에 설정해서 사용할 수 있다.
  • Eva Design System : 커스텀 가능한 디자인 컴포넌트 시스템으로 UI 컴포넌트와 아이콘 셋이 포함되어 있고 Sketch 파일과 Angular, React 컴포넌트 코드까지 함께 제공하고 있다.
  • OpenAPI Generator : OpenAPI 2/3 버전 문서에서 클라이언트 라이브러리, 서버 스텁, 문서를 생성해 주는 도구.
  • Just : Microsoft에서 만든 JavaScript Task 라이브러리.
  • ktop : 터미널에서 Kubernetes의 Pod과 CPU, 메모리를 볼 수 있는 대시보드.

버전 업데이트

2019/07/01 23:45 2019/07/01 23:45