qanda
-
개발일지 (2월 회고)Developer History 2023. 3. 1. 09:39
Business 비즈니스 목표를 달성하고 비선형적인 "J커브형 성장"을 이루어내려면 안티프래질에서 이야기하는 "하방 압력은 작으면서 상방 압력은 비선형적으로 큰" 시도들이 자주 일어나야 한다고 생각했다. 다들 바쁜 상황에서 누군가를 말로 설득하는 것만으로는 실제 구체적인 행동으로 이어지기 어렵다는 것을 배웠고, 최근 도덕경에서 "개념화, 논리화의 위험성"에 대해 지적한 것이 생각나서 사내에서 작은 사이드 프로젝트를 직접 한번 진행해 보게 되었다. 3주 정도 진행한 프로젝트를 진행하면서 개인적으로 느끼는 바가 많았다. 크게 두가지 부분에서 중요한 통찰을 얻었는데, 아무리 작은 서비스더라도 혼자서 모든 부분을 다 챙길 수는 없다는 것(할 수 있지만 시간이 부족한 것이 아니라 못하는 것이었다)과, 내가 생각하..
-
Modern Frontend Infrastructure OverviewDevOps/Architecture 2023. 2. 12. 10:53
Overview 2022년, 모던 프론트엔드 개발 생태계를 주도하고 있는 React와 Next는 각각 새로운 Major 버전(React 18, Next13)을 Release 했습니다. React18에서는 Server Component와 Streaming HTML이라는 개념이 등장했고, 이를 FrameWork Level에서 지원하기 위해 Next13에서는 (아직은 Beta 버전인) App Directory라는 개념을 선보였습니다. 이 기능이 출시되자마자 이를 바로 작은 프로젝트에 적용해 보시면서 Pros / Cons를 이야기해 주시는 사내 시니어 프론트엔드 개발자분의 이야기를 듣다가. "어 그러면 기존의 React Application Component 일부분이 Server Component로 대체되면 기..
-
공평한 교육과 양극화의 모순Philosophy & Thinking 2023. 1. 30. 20:30
The reason I acquired Twitter is because it is important to the future of civilization to have a common digital town square, where a wide range of beliefs can be debated in a healthy manner, withoug resorting to violence. There is currently greate danger that social media will splinter into far right wing and far left wing echo chambers that generate more hate and divide our society. - Elon musk..
-
Concept of React SchedulerFrontend 2023. 1. 14. 20:22
Overview 이전 포스팅에서 React Sync Mode(Concurrent Mode가 아닌 것, Legacy Mode)가 어떻게 동작하는지에 대해 Source Code Level에서 간략하게 살펴보았습니다. 이번 포스팅부터는 해당 내용을 기반으로 해서 Concurrent Mode가 어떻게 동작하는지에 대해서 한 단계씩 살펴보려고 합니다. Fiber, workInProgress Node, workLoopSync와 같은 용어들을 이해하고 있다는 전제로 전개되므로 이전 포스팅을 먼저 읽어보시는 것을 추천합니다. Concurrent Mode의 핵심은 Task를 수행하는 도중에 더 높은 우선순위를 지니고 있는 Task가 들어오면, 지금 처리 중인 Task를 "일시중단(Pause)"하고, 우선순위가 더 높은 ..
-
React Mount System Deep Dive (Sync Mode)Frontend 2023. 1. 8. 15:29
Overview 이전 글들 (Conceptual Model of React Suspense, Algebraic Effects of React Suspense, Suspense SSR Architecture in React 18)에 이어 Suspense의 동작 원리에 대해 Source Code Level에서 다루는 포스팅을 준비하고 있었습니다. 하지만 막상 Code Level에서 이를 분석하려고 하니 너무나 방대한 React의 개념들과 용어들(Fiber, Scheduler, Task, Lane, performUnitOfWork, Double Buffering)을 능숙하게 이해하고 있음을 전제하여야 했고, 이 모든 내용을 하나의 포스팅에 담기는 어려울 것 같다는 결론을 내렸습니다. 따라서 React18에서 ..
-
개발일지 (11월 & 12월 회고)Developer History 2022. 12. 18. 10:58
After Class 중간고사 / 기말고사가 끝나고, 이렇게 복무 만료 이후의 첫 학기가 잘 마무리되었다. 아직 성적은 나오지 않았지만, 던진 과목은 없어서 계속해서 장학금을 받지 않을까 생각이 된다. 굉장히 고된 3달 반여를 보낸 것 같지만, 남은 두 학기도 우선은 계속 이렇게 진행할 수 있을 것 같다. 학기 내내 들었던 생각은 나의 "앎"에 대한 기준, 그러니까 무언가를 "이해했다"라고 생각하는 기준이 동기들에 비해 그렇게 높지 않다는 것이었다. 어쩌면 이 사실을 깊게 깨달은 것이 이번학기의 가장 큰 소득일 수도 있겠다. 생각해보면 늘 내가 생각하는 무언가를 "이해했다"고 생각하는 기준은 완벽에 가깝진 않았던 것 같다. 전반적으로 꼼꼼함이 부족하다고 해야 하나, 동시에 많은 일들을 하는 것을 즐기지만..
-
Node.js + Puppeteer Memory Leak HandlingFrontend 2022. 11. 20. 14:51
Overview 콴다 팀에서는 수학 문제를 이미지가 아닌 Latex String의 형태로 저장합니다. 용량 측면에서도 그렇지만, 문제의 "유사도"를 측정하거나, 문제의 컨텐츠를 기반으로 사용자에게 알맞은 문제를 추천하는 데에 있어서는 이미지보다 스트링의 형태가 더 효율적이기 때문입니다. 하지만 결국 이 컨텐츠를 사용하는 학생들의 입장에서는 이 스트링이 올바르게 렌더 된 수식이 필요하기 때문에 이를 렌더 해주는 작업이 필요합니다. 이 수식을 라이브러리를 사용해서 user-side에서 사용자의 화면에 그대로 그려주는 방법도 있겠지만, 이는 클라이언트 사이드의 많은 리소스를 소모하게 됩니다. 게다가 웹뷰가 아닌 Native 환경에서는 수식을 렌더 하기 위해 엄청난 양의 폰트를 로드해야 하는데, 이는 결국 애플..
-
gRPC 그리고 HTTP/2gRPC 2022. 9. 4. 15:38
Overview gRPC는 HTTP/2의 long-lived Connection을 기반으로 작동합니다. (이로 인해 HTTP/1을 사용해 통신하는 Web에서 gRPC를 사용해서 개발하기 위해서는 fallback으로 REST를 사용하거나 중간에서 HTTP/1 요청을 받아 HTTP/2로 넘겨주는 Proxy가 필요합니다.) 이를 이해하고 사용하기 위해서는 HTTP/1과 HTTP/2가 어떻게 다른지, 그리고 왜 gRPC가 HTTP/1이 아닌 HTTP/2를 기반으로 작동하는지에 대해 이해해야 합니다. 이번 포스팅에서는 이에 대해 살펴보도록 하겠습니다. 이 포스팅은 gRPC가 무엇인지에 대한 간략한 내용을 이해하고 있다는 가정 하에서 작성되었습니다. gRPC에 대한 자세한 내용은 아래 공식 문서를 참고해 주세요. ..