개발일지 (3월 회고)

2023. 4. 2. 09:58Developer History

 

 

 

복학 후기

이번학기에는 15학점을 신청했다. 전반적으로 과제로드가 비교적 적은 수업들을 듣거나, 성적에 대한 부담을 내려놓은 수업이 많아서 그런지 아직까지는 힘든 과제가 많이 없고 이런저런 지식들을 배우는 재미가 있다. 데이터 통신 수업은 생각보다 많이 low level을 다루지만 굉장히 재미있고, Chat GPT가 나오고 나서부터 수업 시간이 굉장히 알차졌다. 교수님께서 애매하게 설명하고 넘어가셨다는 느낌이 드는 부분이나, 내가 딴생각 하다가 놓친 부분을 굉장히 빠르게 해결할 수 있어서, 수업이 끝나고 나왔을 때 새롭게 이해하게 되는 부분들이 많아졌다.

 

데이터 통신 과제로 간단한 소켓 프로그래밍을 구현하는 예제가 나왔는데, 이걸 C, C++, Go, Kotlin으로 각각 구현해봤다. (GPT의 도움을 많이 받았다.) 특히 다른 High Level 언어들로 구성된 코드들을 C로 구현하는 것은 근본적으로 운영체제가 어떻게 동작하는지를 이해하는데 많은 도움을 준다. (이를테면 Go에서는 net.Listen 한 줄이면 서버가 알아서 Listen을 하지만, C로 구현하려면 TCP 타입의 소켓을 생성하고 Bind 하고, Listen 하는 과정을 거쳐야 하고, 경우에 따라 REUSE_ADDR 같은 옵션을 추가해주어야 한다.) 이런저런 언어들을 비교하다가 GPT 삼천포로 빠져서 inode와 파일시스템에 대해 1시간가량의 문답법을 수행하기도 했다. 개인적으로는 과제를 잘하고 시험을 잘 쳐서 좋은 학점을 받는 것도 중요하지만, 이렇게 내가 모르는 것을 문답을 통해 알아내고, 내가 기존에 알고 있었던 지식의 노드들에 새로운 지식을 끼워 맞추기 위해 머릿속을 여기저기 헤집으며 연결하는 것이 더 중요하다고 생각한다.

 

하드웨어 시스템 설계에서는 딥러닝을 위해 GPU에서 Matrix 연산을 하는 행렬 곱셈 가속기를 만든다. Verilog나 Amaranth와 같은 익숙하지 않은 언어와 라이브러리를 사용하는 것이 쉽진 않지만, 똑똑한 동기들에게 많은 도움을 받으며 몰랐던 것들을 배워가고 있다. 공부를 하다가 Verilog가 always문을 사용해서 clk 시그널에 맞춰 sync logic을 수행하는 방식과 React가 Hook을 처리하는 방식이 똑같다는 걸 발견해서 신기했다.

 

대영과제는 솔직히 그냥 GPT로 한다.. (이글을 교수님이 보시진 않겠지)

 

 

경제 공부

너무 정신없이 새로운 패턴에 적응하느라 경제 공부를 깊게 하지 못했다. 3월 초반에는 체력적으로 좀 무리가 왔었던 것 같기도 하다. 보통 경제공부 하는 시간은 아침에 학교 가는 지하철이거나 회사 가는 지하철인데 너무 졸려서 그냥 서서 잤다. 대신 FOMC나 주요 인사 발언들은 꼭꼭 챙겨보려고 노력했다. 그래도 나름 주간 에세이는 밀리지 않고 작성한 것 같다.

 

최근에는 은행 이슈가 터져서 논란이 많았는데, 이를 프래질과 블랙 스완의 관점에서 살펴보려고 노력했다. SVB의 수익창출 방식이 갖는 구조적인 프래질을 탐지하는데 시간을 좀 썼던 것 같고, 어느 은행이나 업종의 분위기가 확 바뀌면, 이러한 프래질이 수면으로 드러나게 된다는 사실도 깨달았다. 이를테면 우리나라도 반도체 업황이 호황에서 불황으로 갑작스레 바뀌는 시점에 어떠한 형태의 프래질이 드러나서 외환위기의 출발점이 되었다. 

 

사업을 시작하거나, 인간을 이해하는 관점에서 경제 공부는 개인적으로 많은 이점을 준다. 기술과 인문학과 심리학, 그리고 각종 지리학 사회학 정치학등이 교차로에서 만나는 지점이라고 생각한다. 에세이를 정리하면서 개인적으로 느끼는 것은 이러한 수많은 학문들이 특정 분파가 아닌 하나의 원자 단위의 형태로 내 머릿속을 통과한다는 느낌을 자주 받는다는 것이다. 이를테면 SVB은행 사태를 정리하면서 스타트업의 러닝타임과 연준이 고려해야 하는 여러 복잡함, 시장의 의도와 월가 사람들의 생각들, 그리고 모바일로 예금을 찾는 시대가 되면서 더 발생하기 쉬운 뱅크런과 같은 일련의 상호작용들이 "이건 어떤 학문이야" 할 것 없이 그냥 그림으로 보이는 것 같고, 나는 그냥 그걸 글로 옮기는 역할을 하고 있다는 생각이 든다. 이런 내용을 "생각의 탄생"이라는 책에서 읽은 것 같아서 에세이 쓰고 나서 이 책을 한 번 더 읽었다.

 

 

독서

바쁘다 아프다 하면서도 그래도 21권의 책을 읽었다. 읽은 책은 bookreader_sckim이라는 인스타 계정에 정리해두고 있는데, 예전에는 그냥 귀찮아서 책 표지만 올리다가 요새는 내가 책을 읽으면서 인상깊었던 부분들이나, 이 책의 핵심이라고 생각하는 몇 구절들을 같이 Reference 하고 있다. 자기 전에 한 번씩 읽거나 일주일을 회고하면서 한 주간 읽었던 책들의 구절들을 찾아 읽으면서 "나 이 책 읽고 뭐가 바뀌었지?" 하는 생각들을 하는데 독서의 질을 한 250% 정도 늘려주는 것 같다. 아쉽게도 이번달은 "안티프래질"이나 "생각의 탄생"과 같이 내 인생의 전환점이 될 만한 책을 만나지는 못했지만, 훌륭한 책들은 꽤나 많이 만났다. (피파에서 메시를 뽑지는 못했지만 그래도 라모스 정도 뽑은 느낌이다)

 

 

프런트엔드

최근에 에디터 쪽 수정할 일이 생겨서 회사에서는 Puppeteer를 사용해서 이미지와 PDF를 생성하는 것과 함께 이 에디터를 만지는 데 가장 많은 시간을 사용했다. contenteditable을 사용한 후 selection / range API를 요리조리 다루는 것이 꽤나 재밌었고, MutationObserver의 callback이 Macrotask Queue가 아니라 Microtask Queue로 들어간다는 사실을 처음 알게 되었다. (사실 그전에는 MicroTask Queue에는 promise의 callback만 들어가는 줄 알았다). content editable로 들어가는 수식들에는 event handler를 붙여야 하고, 뒤로 가기 / 붙여 넣기 / 잘라내기 등의 기능을 구현하기 위해 Stack을 다시 만들어야 했다. Stack은 아직 이런저런 이슈들이 있어서 적절한 방법을 찾는 중이지만 조만간 방법을 찾아낼 것 같다.

 

미루고 미뤘던 React Suspense의 Implementation에 대한 블로그 글을 완성했다. 생각보다 Suspense 시리즈를 기다려주시는 분들이 있어서 뭔가 힘이 났던 것 같다. 다음 시리즈는 뭘로 해야 할까 하는 고민이 있는데 최근에 매료된 부분은 프런트엔드 쪽보다는 Go / Kotlin 쪽이나 운영체제 쪽이어서 언제가 될지는 잘 모르겠다.

 

Suspense 블로그 글을 작성하기 전에 회사에서 팀원들에게 Suspense에 대해 설명할 기회가 있었는데 질의응답 같은 걸 하다가 Lane Model에 대한 이야기가 몇 차례 나왔고, 나도 정확히 이해하지 못하고 있는 것 같다는 생각이 좀 들어서 React를 만든 사람인 dan abramov에게 직접 트윗을 보냈다. (궁금한 거 물어보래서 물어봤다) 아래와 같이 답변이 왔고, 왜 진작 이렇게 공부하지 않았지 하는 생각도 들었다. (개인적으로 React Source Code는 양이 방대하기도 하지만, 변경사항도 매우 매우 많아서 조금 공부 안 하면 내가 공부한 코드가 레거시가 된다.) 이런 식으로 몇 번 질의응답을 하다 보니 (GPT한테 물어본 것도 많았다) Lane Model, Work, Fiber, Task의 차이에 대해 어렴풋이나마 더 잘 이해하게 된 것 같다.

 

 

 

 

백엔드 공부

gRPC를 조금 더 자세히 알고 싶어서 이런저런 시도들을 해봤다. 사내에 있는 인프라들을 내가 A to Z로 구축해 보는 시도의 연장선이기도 하다. yeoulapis라는 레포를 만들어서 proto를 관리하고 cloudbuild trigger를 추가해서 proto가 업데이트되면 kotlin stub과 go stub이 생성될 수 있도록 하는 구조를 만들었다. 확실히 그냥 만들어진 걸 쓸 때보다 이걸 직접 구축해 보면 지식이 구체화되고 더 깊게 공부할 수 있게 되는 것 같다.

 

이렇게 해서 1분기에 목표로 했던 혼자서 API First Approach를 하기 위한 준비와 이를 마이크로서비스 클러스터 아키텍처에 적용하고 모니터링할 수 있는 전반적인 구조를 다 그려보게 되었다. 확실히 1년 전과 비교하면 양자영역에서 계속 에너지를 축적하다가 계단을 하나 오른 느낌이다. 이거 하느라고 AI / Frontend 쪽에 많은 집중을 하지는 못했지만 다양한 분야의 어느 정도의 깊이 있는 경험은 결국 소프트웨어 엔지니어링의 기본기를 닦아줄 것이므로 후회되는 선택은 아니었던 것 같다.

 

언어에 대해서는 최근 Go / Kotlin이라는 언어 자체에 대한 호기심(+ 사내 여러 백엔드 서비스들의 기반 언어) + 하시설 및 데이터 통신을 위한 어쩔 수 없는 C / C++ / Python + 그리고 프런트 엔드 개발자로서의 정체성을 지키기 위한 Typescript(생각보다 나는 타입스크립트를 잘 모른다. 그냥 쓰던 대로 쓰는 수동적인 사람) + 슬슬 자료구조나 알고리즘을 까먹고 있는데? 에 대한 니즈로 인해 PS를 이 5~6가지 언어를 사용해서 풀어보고 있다. 아직 서툴긴 하지만 GPT생기고 나서 서로 다른 언어들을 굉장히 빠르고 쉽게 배울 수 있게 되어 좋다.

 

아래에서 또 언급하겠지만 최근 여러 사이드 프로젝트들을 하기 시작했는데 코틀린 서버 하나, Go 서버 하나로 서버를 운영하기로 했다. Kotlin + Spring / Go + Fiber 구조로 간단한 것들을 만들어 볼 예정이다.

 

 

사이드 프로젝트

의도한 것은 아니었지만 동기의 소개 + 건너 건너 아는 사람들의 초대로 인해 최근 많은 사람들을 만나고 많은 다양한 프로젝트들에 참여하고 ideation을 하면서 다니고 있다. 어느 정도의 네트워킹이 좋은 점은 당장 뭔가를 같이 하지는 않더라도, 행동력이 빠르고 아이디어가 넘쳐나며, 다양한 경험들을 한 사람들의 이야기를 많이 접할 수 있다는 것이다. 나심 니콜라스 탈레브도 저서 안티프래질에서 이야기했듯, 적당한 파티는 개인의 성장에 있어 안티프래질 한 장점을 갖는다.

 

2개의 Github Organization을 새로 만들었고 3개의 크고 작은 사이드 프로젝트들을 하고 있다. Go / Kotlin / Typescript들에 대해서 평소 회사 업무에서는 하지 못했던 시도들을 하면서 괜찮은 방식들은 팀에 소개도 하려 하고 있고, 다양한 도메인에서 나오는 수많은 아이디어들을 잘 가공해서 교육을 효과적으로 만드는데 도움이 될 수 있는 방안들을 찾아보려 한다.

반응형

'Developer History' 카테고리의 다른 글

개발일지 (4월 회고)  (1) 2023.04.29
개발일지 (2월 회고)  (0) 2023.03.01
개발 일지 (1월 회고)  (2) 2023.01.29
개발일지 (11월 & 12월 회고)  (0) 2022.12.18
개발일지 (10월 회고)  (0) 2022.11.06