Outsider's Dev Story

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

play.node 2017에서 발표한 "Node.js API 서버 성능 개선기"

Play.node 2017에서 발표를 했다. play.node 1회인 2012년에 발표한 뒤에는 운영진으로 참가했었고 운영진을 하면서 발표하는 건 보통 어려운 게 아니라는 걸 알게 되고는 이번에는 발표하기로 결정하고 운영진에서는 물러났다.

그동안 회사에서나 스터디에서 가끔 발표를 하다 보니 못 느끼고 있었는데 막상 발표하려고 했더니 공개적인 자리에서 발표하는 건 1년 만이라는 걸 깨달았다. 너무 오랜만이란 걸 알고 나니 약간 긴장은 됐지만, 발표가 처음은 아니라 그럭저럭 진행했다. 평소에는 훨씬 더 발표에 얘기할 내용이랑 시간 체크를 확실히 하는 편이지만 이번에는 발표 자료 준비에 큰 노력을 해서인지 피곤함에 발표 연습을 많이 못해서(실제로 자료도 당일 완성되었다.) 2분 먼저 시작했음에도 7분이나 초과하고 말았다. ㅠ 웬만해서는 발표시간을 맞추는 편인데... ㅠㅠ

발표해야겠다고 결정했을 때부터 하고 싶은 내용은 결정되어 있었다. Node.js 6.x와 8.x에 대해서 비교하고 싶었고 그 성능개선 과정에 관해서 얘기하고 싶었다. 관련해서 작년에 고생했던 Heap Dump 분석도 같이 얘기하면 괜찮을 것 같았다.

하지만 리얼월드 프로덕트는 항상 발표에 좋게 나오는 것은 아니므로 준비를 하면서 고생을 많이 했다. 테스트 환경이라 서버를 구성하면서도 큰 노력을 들였지만, 그 이후에도 한 번 실행하면 40분씩 걸리는 테스트를 돌려놓고 기다린 다음에 결과가 의도와 다르면 원인을 찾고 수정을 하고 다시 돌리고 다시 돌리고... 다시 돌리고... 지루함과 어려움의 연속이었지만 성능을 향상했다는 것이 목적이 아니라 성능 향상을 위한 결과 분석을 어떻게 하느냐는 게 발표의 목적이었기 때문에 발표를 위한 자료는 어느 정도 준비되었다.

처음에는 Node.js 6.x와 8.x의 결과가 나와서 이제 거의 다 해결된 것처럼 느껴졌지만 설명하기 좋은 CPU 프로파일링 결과 분석과 Heap Dump 의 내용까지도 정리하기까지는 시간이 꽤 걸렸다. 내 코드의 아주 명확한 병목이나 잘못된 부분이 나왔다면 발표는 좀 더 쉬웠겠지만, 코드가 괜찮다고(?) 안심해야 하는 건지 발표준비에 대한 걱정을 해야 하는 건지 심란한 시간을 보내면서 준비를 했다.

발표자료의 꾸미기에 좀 더 힘을 쓰는 편이긴 한데 이번에는 테스트하고 자료를 준비하느라고 꾸미기는 좀 생략한 게 좀 아쉬웠다. 생각보다 너무 많은 사람이 와서 약간의 긴장을 가지고 시작했고 보통 발표가 그렇듯이 평가가 어떤지는 몰라서 걱정에 휩싸였지만, 친분이 있어서 그런지 다들 좋은 피드백을 주셔서 좀 맘이 편안해졌다.

2017/11/10 00:42 2017/11/10 00:42

기술 뉴스 #89 : 17-11-01

웹개발 관련

  • 그런 REST API로 괜찮은가 : Deview에서 발표된 발표자료로 API를 개발할 때 REST API라는 용어를 많이 사용하는데 로이 필딩이 만든 REST API라는 개념이 실제로 어떤가를 아주 잘 설명하고 있다. 이응준 님의 발표는 믿고 보는 편인데 여기서도 Spec에 나온 REST API의 정의와 실제 현실에서 구현하고 있는 REST API의 차이점을 제대로 보여주고 Spec에 맞게 구현하려면 어떻게 해야 하는 지도 나와 있어서 우리가 REST API라고 불러야 할지에 대한 질문을 던져주고 있다.(한국어)
  • TLTR; Redux : Redux의 사용법과 구조를 정리한 글인데 아주 간결한 설명으로 모든 사용방법이 다 나와 있다. 간단한 코드로 Redux가 동작하는 방식을 설명하고 React 컴포넌트와 연결해서 사용하는 방법과 Redux를 비동기로 사용하는 방법까지 나와 있다. Redux를 아직 잘 모르는데 제대로 쓸 때 이 글을 다시 보면 Redux를 이해하는 데 도움이 많이 될 것 같다.(영어)
  • (번역) CSS에 대한 깊은 이해: 폰트 매트릭스, line-height와 vertical-align : Deep dive CSS: font metrics, line-height and vertical-align의 번역 글로 CSS로 line-hight와 vertical-align을 제대로 다루는 것이 왜 어려운지를 설명하기 위해서 CSS가 각 폰트에서 line-height를 결정하는 기준과 vertical-align의 기준을 잡는 원리를 아주 상세하게 설명하고 있다. 이 글만 읽어도 얼마나 복잡한지를 알 수 있을 정도고 다 읽고도 실제로 사용할 때 제대로 쓸 수 있을지 걱정되긴 하지만 항상 디자이너와 협업해서 CSS에서 간격을 맞출 때 고생하는 부분이라서 두고두고 보기에 좋은 글이다.(한국어)
  • Saying Goodbye to Firebug : 2005년부터 파이어폭스의 개발자도구로 만들어진 Firebug가 이제 Firefox Quantum 릴리스를 앞두고 종료를 선언했다. 이글에는 그간 Firebug의 12년의 히스토리가 담겨있다. 지금은 안 쓰지만 예전에는 Firebug가 없으면 웹 개발을 못할 정도로 잘 쓰고 있었고 지금의 개발자도구에 Firebug가 준 영향이 크다고 생각하기 때문에 종료가 맞는다고 생각하면서도 애잔하게 느껴진다.(영어)
  • sonar: Linting the web forward : 웹사이트를 검사해서 접근성, 성능, PWA, 보안등을 검사하는 도구를 Microsoft에서 공개했다. Sonar는 온라인으로 이용할 수도 있고 npm으로 설치해서 커맨드라인으로도 사용할 수 있다.(영어)
  • Mozilla brings Microsoft, Google, the W3C, Samsung together to create cross-browser documentation on MDN : MDN 문서화에 Mozilla뿐만 아니라 Microsoft, Google, W3c, 삼성도 참여하기로 했다.(영어)

그 밖의 프로그래밍 관련

  • 책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 : 특정 사람의 음성을 딥러닝으로 학습시켜서 임의의 텍스트를 읽게 하는 내용이다. 딥러닝을 잘 몰라서 발표내용을 다 이해는 못 했지만 데모 페이지에서 음성을 들어보면 완벽하진 않아도 꽤 흥미롭고 해당 소스가 공개되어 있어서 실제로 사용해 볼 수 있다.(한국어)
  • DOCKER PLATFORM AND MOBY PROJECT ADD KUBERNETES : Docker가 Swarm뿐 아니라 Kubernetes도 네이티브로 지원하게 되었다.(영어)
  • AWS VPC with Terraform Modules : Terraform의 모듈을 이용해서 VPC를 정의하는 방법을 설명한 글이다. VPC 자체가 꽤 복잡해서 VPC에 대해서 자세히 알지 못하면 글이 좀 어려울 수도 있는데 이 글을 통해서 모듈에서 사용할만한 많은 인터폴레이션 팁이나 모듈의 관리 부분이 잘 정리되어 있다.(한국어)
  • VIM AFTER 15 YEARS : Vim을 사용할 때 유용한 플러그인 및 tmux와 함께 터미널에서 사용하면서 유용한 사용방법을 꽤 자세하게 설명하고 있다. Vim을 헤비하게 사용하는 편은 아니고 플러그인 등을 너무 잘 갖춰놓으면 다른 곳에서 개발하기가 어려우므로 적당히만 쓰는 편이지만 이 글을 보니 하나하나 적용해보면서 나에게 맞는 플러그인을 찾아볼까 하는 생각이 들었다. 글이 길지만, 기본 사용법 외에 플러그인 위주로 좋은 사용방법을 알기 좋은 글이다.(영어)
  • Node.js Best Practices : Node.js로 코드를 작성할 때 좋은 사용사례를 모아놓은 저장소이다. 이런 부분을 많이 찾아놨다면 엄청 새로운 내용이 있는 것은 아니지만 구조를 어떻게 나누고 오류를 어떻게 처리할지를 알기 쉽게 잘 정리해 놓았다.(영어)
  • Introducing the Graphcool Framework : Graphcool에서 GraphQL 백엔드를 쉽게 작성해서 배포할 수 있는 프레임워크를 공개했다.(영어)

볼만한 링크

  • 스타벅스 연결러 앱 공개 & 개발 후기 : 예전에 개발기 올리시던 걸 읽은 기억이 있는데 최근에 스타벅스에서 WiFi에 연결할 때 개인정보 동의하는 부분을 자동화한 스타웍스 앱을 공개하고 그 개발 후기를 올린 글이다. 그동안 개발이 멈춘 사정과(사이드 프로젝트를 하는 사람으로서 공감 가는...) ES6와 한글 코딩을 도입한 점, 그리고 기프트웨어로 공개한 관점 등이 꽤 재미있다. 이분은 흥미로운 접근을 많이 하셔서 작업하시는 내용을 공유해 주시는 부분이 재미있다.(한국어)
  • 알파고는 스스로 신의 경지에 올랐다 : 딥마인드가 공개한 네이처 논문을 기반으로 알파고 Fan, Lee, Master, Zero가 어떻게 다르고 이 발표를 어떻게 봐야 하는지 설명한 글이다. 딥러닝 쪽은 잘 몰라서 직접 원문을 읽고 이해하기가 어려운 편이라서 이렇게 깊은 수준으로 해설을 해주는 글은 어느 정도 사전 지식을 쌓는 데 크게 도움이 된다.(한국어)
  • 더 이상 배우려 하지 않는 개발자 : Expert Beginner의 등장 : How Developers Stop Learning: Rise of the Expert Beginner의 번역 글로 기술을 배울 때 Novice, Advanced Beginner, Competent, Proficient, Expert로 발전하게 되는데 Advanced Beginner에서 Competent 단계를 넘어서기가 쉽지 않으므로 이 과정에서 Competent로 가지 않고 Expert Beginner 즉, 자신이 전문가라고 착각하는 상황에 빠지게 되는 개발자들을 설명한 글이다. 이렇게 분석적으로 생각해 본 적은 없어서 처음에는 맥락이 어색하게 느껴졌지만 곰곰이 생각해 보면 소프트웨어 업계에 이런 개발자가 은근히 많이 있고 나도 많이 경험해 봤다는 걸 깨닫게 되었다. 이런 상황에 빠지지 않으려고 오픈소스나 커뮤니티 속에 있는 거긴 하지만 상황을 아주 잘 분석해 놓은 글이라 생각해 볼 여지가 많다.(한국어)
  • 실리콘 밸리의 잘나가는 5개 기업과 인터뷰를 봤는데 다 붙고만 썰 : 실리콘 밸리에 있는 Airbnb, Google, Facebook, LinkedIn, SalesForce에 면접을 보고 다 붙은 과정을 설명하고 있다. 제목을 처음 봤을 때는 가볍게 봤는데 2~3달 준비하면서 문제풀이나 시스템 디자인을 공부하고 각 전화면접이나 온사이트 면접에 대한 준비 자세와 과정이 나와 있어서 정말 많이 준비해서 저런 결과가 나오는 거구나 싶었다. 번역도 재밌게 되어 있어서 편안하게 읽을 수 있다.(한국어)

IT 업계 뉴스

  • Key Reinstallation Attacks : KRACKs로 알려진 WPA2 취약점 공격이 발견되었다. 같은 네트워크 안에 있는 공격자가 이 취약점을 이용하면 안전하다고 여겨지던 민감한 정보를 공격자가 탈취할 수 있다. 이 취약점은 업데이트로 해결할 수 있으며 HTTPS를 이용하는 경우는 안전한 것으로 알려졌습니다.(영어)
  • MongoDB prices its IPO at $24 per share : MongoDB가 나스닥에 상장했다.(영어)

프로젝트

  • PROBOT : GitHub에 연동해서 이슈를 닫거나 댓글을 다는 등 작업 흐름을 자동화할 수 있는 봇.
  • Chatfuel : 코딩 없이 Facebook 봇을 만들 수 있는 서비스.
  • Froala Design Blocks : Bootstrap 4에 기반을 둔 170여 개의 디자인 블록을 모아놓은 프로젝트.
  • minideb : Bitnami에서 만든 Debian 계열로 경량화된 Docker 이미지.
  • Napa.js : V8 위에서 멀티스레드를 구현한 JavaScript 런타임으로 Microsoft에서 오픈소스로 공개했다.
  • VimAwesome : Vim의 인기 플러그인을 볼 수 있는 웹사이트.

버전 업데이트

2017/11/01 04:16 2017/11/01 04:16