Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

기술 뉴스 #88 : 17-10-15

웹개발 관련

  • Lessons from migrating a large codebase to React 16 : Discord에서 React로 만들어진 코드를 React 16 기반으로 변경한 과정을 설명한 글이다. 먼저 codemod를 이용해서 코드를 수정하고 수동으로 빠진 부분을 수정하는 방식으로 적용했다. Discord에서는 React.PropTypes, React.createClass의 사용과 React 내부 API를 직접 사용하는 부분이 주요 문제가 되었다고 한다.(영어)
  • React v16 무엇이 바뀌었나 : React.js의 새 메이저 버전인 v16의 바뀐 점을 정리한 글이다. 내부적으로는 React Fiber가 도입해서 성능 개선을 한 게 중요한 차이이고 render()에서 배열을 반환할 수 있고 에러 핸들링이 추가된 게 주목할 부분이라고 생각한다.(한국어)
  • JavaScript's Promise Leaks Memory : JavaScript의 Promise에 구조적인 메모리 누출 문제를 지적한 글이다. Promise/A+ 스펙을 따른 것이므로 구현체에 누출이 있는 것은 당연하다고 보통 얘기하는데 여기에 동의하지 않는다는 논지의 글이다. 예제 코드를 돌리면 현재 Node.js와 Chrome에서 모두 문제가 생기는데 Bluebird 같은 구현체나 다른 언어나 라이브러리의 구현체는 실제로 이런 문제가 있지 않으므로 이 부분이 차후 문제가 될 수 있다는 얘기를 하고 있다. 네이티브 Promise에 메모리 누수가 있는지도 모르고 있었다.(영어)
  • Asynchronous stack traces: why await beats .then() : JavaScript에서 비동기를 쓸 때 Promise를 이용한 .then() 체인이 있고 await를 이용해서 Promise를 사용할 수 있다. 후자가 가독성이 훨씬 좋지만, 그 이상으로 스택트레이스를 유지하기 위해 전자의 경우 JS 엔진이 스택 정보를 저장하고 있어서 메모리를 차지하지만 await는 실제 함수의 실행이 멈춰있으므로 별도로 유지할 필요가 없다고 한다.(영어)

그 밖의 프로그래밍 관련

  • 파이썬의 개발 "환경"(env) 도구들 : Python 개발환경을 구축할 때 사용하는 pyenv, virtualenv, virtualenvwrapper 등의 도구가 어떤 역사 속에서 만들어졌고 각 도구의 용도가 어떻게 다른지 비교하면서 정리한 글이다. Python에 이런 도구들이 많이 있어서 원하는 것을 찾기 힘들었는데 이 글을 통해서 이해할 수 있고 마지막에 용도별로 어떤 도구를 쓰는지 추천가지 해주고 있다.(한국어)
  • Mitigating replication lag and reducing read load with freno : GitHub에서 MySQL을 master-replica 형태로 사용하면서 리플리카와의 데이터 불일치를 해결하기 위해서 큰 작업을 나누어서 처리하고 쓰로틀러를 도입해서 사용했다. 이는 Ruby로 만들어져 있었는데 이후 시스템이 커지면서 Perl 쓰로틀러를 만들었지만 두 구현체간의 퀄리티 차이도 존재했고 시스템이 더 커지면서 freno라는 별도의 쓰로틀러 서비스를 만들었다. 이 시스템으로 전체 시스템의 쓰로틀링을 안정적으로 제공하면서 각 리플리카의 지연시간의 매트릭을 수집해서 각 시스템이 이를 확인하면서 데이터를 처리할 수 있게 되었다. 이전에는 데이터 불일치를 해결하기 위해서 일정시간 이내에 데이터가 작성되었다면 master에 확인해서 데이터불일치 여부를 검사했는데 freno를 이용하면서는 replica의 지연시간을 알 수 있으므로 master에 읽기 요청을 하는 시간을 많이 줄일 수 있게 되었다. 각 문제의 해결 과정과 최종 솔루션인 freno의 도입효과까지 아주 잘 정리되어 있다.(영어)
  • Stretching Spokes : GitHub에서 git 저장소의 리플리카를 만드는 데 사용하는 Spokes를 설명한 글이다. 이전에는 DRBD를 쓰고 있었는데 레이턴시에 민감해서 가까운 곳에 둘 수밖에 없었지만, Spokes를 이용해서 완전히 다른 지역에도 리플리카를 만들 수 있게 되었고 이를 구현하기 위해 git 참조 업데이트의 트랜잭션을 구현하고 Spokes 체크섬으로 리플리카가 이뤄지는 과정이 보장되도록 구현한 접근방법을 설명한 글이다.(영어)
  • JUnit 5 소개 : 최근에 나온 JUnit 5가 4와 달라진 점을 바탕으로 구조를 설명하고 Junit 5를 구성해서 사용하는 방법을 설명한다.(한국어)
  • GitHub 프로젝트의 의존성 정보를 알려주는 기능 추가 : GitHub에서 자체적으로 프로젝트가 사용하는 의존성 정보를 정리해서 보여주고 해당 프로젝트를 사용 중인 저장소를 보여줍니다. 최근에 GitHub과 연동해서 의존성 라이브러리를 관리할 수 있는 서비스들라는 글을 올렸는데 GitHub에서 자체적으로 각 라이브러리의 보안 이슈를 알려주는 "Security alerts" 기능도 오픈할 것이라고 한다.(한국어)
  • Vim 배우는 법: 4주 계획 : How To Learn Vim: A Four Week Plan의 번역 글로 vimtutor로 연습한 뒤에 플러그인을 설치 않은 Vim으로 연습해보면서 익히는 4주간의 단계별 과정이 잘 나와 있다.(한국어)
  • 타입과 타입 시스템 : 연재를 시작하며 : 프로그래밍 언어에서 항상 논의되는 타입과 관련된 연재의 시작 글로 이 글에서는 타입/타입 시스템의 기본 개념을 설명하고 있다. 아직 첫 글만 올라왔는데 자세히 알지 못하는 영역이라 이후 내용이 기대되어 목록에 추가해 놓았다.(한국어)

볼만한 링크

  • 경영자와 직원이 서로를 바보로 만드는 조직: 발단은 리더가 심은 두려움 : 회사에서 리더가 직원들에게 두려움을 심어줌으로써 리더는 상황에서 고립되고 판단을 제대로 못 하게 되고 직원도 그런 얘기를 점점 안 하게 되는 악순환이 되는 과정을 설명한 칼럼이다. 이렇게 진행되는 걸 현실에서 너무 많이 보고 들어서인지 잘 정리된 글에 공감을 많이 했다.(한국어)
  • 강남 출근길에 판교/정자역에 내릴 사람 예측하기 : 지하철에서 앉아서 가기 위해 내릴 사람을 예측하려고 사람들의 특징을 분류한 뒤 데이터를 분석한 결과를 정리한 글이다. 아주 장난스러우면서도 내용을 보면 상당히 치밀하게 데이터를 구축하고 분석해서 비교해볼 결과에 웃음이 나면서 흥미롭게 볼 수 있는 발표자료다.(한국어)
  • WeWork, 1년 후 : Shakr에서 WeWork에 입주하고 1년이 지난 시점에서 내부의 사진을 포함해서 그동안의 경험을 공유한 글이다. 라운지까지는 가봤지만, 내부는 못 봤었고 실제 사용 경험이 어떨지도 궁금했는데(가격은 꽤 비싸다고 들어서) 전체적으로 만족한다는 부분에서 더 흥미가 갔다.(한국어)

IT 업계 뉴스

프로젝트

  • GraphQL::SchemaComparator : GraphQL 스키마 2개를 비교해서 차이점을 출력해 주는 Ruby 라이브러리
  • Matcha : Go 언어로 iOS/Android 앱을 만드는 패키지.
  • ZeroNet : Bitcoin 암호화와 BitTorrent 네트워크로 분산 웹사이트를 운영할 수 있는 프로그램. 웹사이트에 접속하려면 ZeroNet 프로그램이 실행되어 있어야 한다.
  • Quick : Swift/Objective-C BDD 테스트 프레임워크.
  • OpenRCT2 : 롤러코스터 타이쿤 2의 오픈소스 버전.
  • security.txt : 사이트의 보안 관련 정보를 담는 security.txt에 대한 웹사이트로 현재 RFC의 드래프트 상태라고 한다.

버전 업데이트

2017/10/15 16:47 2017/10/15 16:47