Metaverse AI girl로서 살아가는 25살의 삶을 마무리하며
새해 회고는 어떠한 의미가 있냐고 물어볼 수 있다. 물론 연말연시의 회고와 목표 설정은 매우 수동적인 행위인데, 한 해라는 어떤 관념적인 단위의 시간 설정에 따라 마무리를 짓는다는 것은 나의 문제와 상황에 따라 주도적으로 시간을 끊어가는 것이 아니기 때문이다. 하지만 이를 뭐라고 말하기도 어려운 것은 한 해가 지난다는 측면에서 모두가 회고를 하기 때문에 회고를 해야하고 새로운 목표를 세워야 한다는 사회적 압박에 따라 어떻게든 회고를 하고 새로운 목표 설정을 하게 되기 때문이다. 그래서 꼭 나쁜 것은 아니다.
벡터 공간 위의 모든 점들은 기저의 선형 결합으로 표현할 수 있다. 예를 들어 3차원 공간에서의 기저는 3개의 서로 직교하는 벡터로 구성된다.벡터 공간의 모든 점은 기저 벡터의 선형 결합이기 때문에 임의의 벡터 공간에 대하여 모든 점을 표현할 수 있다. 그러나 그 기저를 서로 직교하지 않는 집합으로 선택하더라도 점을 단 하나의 표현형으로 나타낼 수 있다. 선택한 기저에 따라 같은 점의 좌표값이 달라질 수 있는데 서로 다른 기저를 사용하면 동일한 점을 나타는데 필요한 좌표의 값이 바뀔 수 있다. 좌표의 크기가 커질 수도 있고 작아질 수도 있으며, 값이 양수에서 음수로 바뀔 수도 있다. 현재의 벡터 공간보다 한 차원이 더 큰 벡터 공간 상의 점은 정사영을 통해 더 높은 차원의 점을 낮은 차원의 공간으로 투영하여 근사된 점으로 표현된다.
이와 같이 같은 현상을 어떤 사람이 파악했는지에 따라 그 내용이 달라질 수 있고, 다양한 현상을 어떻게 경험했는지에 따라서 그 해석과 대처하는 방향이 달라질 수 있다. 중요한 것은 내가 밟고 있는 기저가 어디인지를 계속 회고하는 것이 중요하다. 속도는 중요하지 않을 수 있어도 내가 가고자 하는 방향을 파악하는 것은 매우 중요한 행위이기 때문이다. 올해 회고를 작성하는데 정말 많은 시간이 걸렸고 심지어 회고글을 써야 하는지에 대한 회의와 고민이 있었지만 이는 내가 자주 회고글을 작성하지 않았다는 방증이다. 바빠서 그렇다라는 핑계는 좋지 않다. 나에 대해 돌아보는 회고의 행위는 순간순간 꾸준히 있어야 방향을 계속 수정할 수 있다.
Reflection in Action(RIA) : 액션 중간 중간, 심지어 액션을 하면서 하는 회고. (경기 중에 하는 회고) RIA는 불확실성이 높고, 지적 작업일수록 더 효과적이고, 개인과 팀의 전문성, 퍼포먼스 향상에 도움 됨 흔히 하는 회고 방식: Reflection on Action. 전문가들은 reflection in action 을 잘함.
지난 2022년 회고에 따르면 첫 회사에 입사하게 되어 Go 언어를 주력 언어로 사용하게 되었다고 말했다. Python으로 주어진 프로젝트를 Go 언어로 포팅했는데, 이 때 GitHub Copilot이 처음 등장하게 되어 IDE 상에서 프롬프트를 활용하여 Go 언어의 여러 키워드들에 대해 학습하고 먼저 돌려보고 주어진 지식을 학습하고 다시 리팩토링하는 과정을 거쳤다고 설명한 바 있다. 주로 사용했던 스택은 PostgreSQL + gorilla였다. 모놀리식하게 Osmis 블록체인 실시간 익스플로러 서비스를 하나 런칭했고 최대 시간당 ~5만건의 트래픽을 받아냈던 전력이 있다. 2022년의 나는 단순한 모놀리식 단위의 백엔드와 이를 서빙할 수 있는 EC2 환경에서의 경험이 전부였다. VPC와 Subnet 설정도 다소 낯설어 했었다.
2023년에서는 회사에서 가상자산 수탁관리 서비스 백엔드를 개발하게 되었고, 이 때 금융 당국의 복잡한 보안 및 기타 요구사항을 맞추어줘야 하는 어려움이 있었다. ISMS 조건을 충족할 수 있도록 4단계에 걸친 인증/인가 시스템을 구현하기 위하여 다양한 마이크로서비스 단위 모듈을 개발하였다.
그리고 중앙 한 개의 서버에서 해당 모듈을 gRPC 단위로 호출하도록 개발했다. 특히 모든 단위에서의 테스트 코드를 구현하여 커버리지를 100%에 가깝게 맞추도록 노력하였고, DDD의 Application 서비스 개념을 이용하여 다양한 API 규격 (RESTful HTTP, JSON-RPC 등) 에서도 동일한 인자값을 바탕으로 값 객체를 호출할 수 있도록 구현하였다. 비교적 무거운 gorilla 스택을 사용하기 보다는 net/http 내지 go-chi 를 이용하여 lightweight 하게 개발함으로서 메인 서비스를 만들기로 결정했다. 밑바닥부터 HTTP 서비스 모듈을 내가 직접 구현해보면서 프레임워크에 종속적이지 않은 개발 경험을 가져가보고 싶었기 때문이다.
AWS 클라우드를 사용하고 있는 상태에서 가상자산 수탁 시스템에 접근하기 위한 폐쇄망 개발 환경을 조성해야 했다. ISMS 인증을 위해 폐쇄망에서 AWS 환경을 조성하는 것이 필요했다. 프로젝트 투입 이전에 1월 초순 넥스트스텝의 인프라공방 수업 수강을 통하여 망 구성에 대한 내용을 학습했다. 개발 환경에 필요한 프라이빗 서브넷과 VPC, bastion 서버를 띄우는 것부터 시작해서, 사내외 보안 담당 업체와 협조하면서 폐쇄망과 보안망 사이의 IPSec을 구성했다.
처음에는 AWS ISMS-P를 통해 취약점을 조사하니 150개가 있었는데, 이를 해결하기 위해 AWS Config와 Security Hub, 그리고 CloudTrail을 이용해서 필요한 기준을 일일이 확인했다. 심지어 나는 프론트엔드도 담당했기 때문에 IAM 별로 2FA를 설정하고 Amplify에서의 접근 가능한 IP 대역대 조정도 수행했다. 해당 프로젝트는 내가 믿고 의지하는 시니어 동료 1명과 같이 밤을 지새며 만들었다. 무엇보다도 금융권 보안은 정말 빡빡하고, 냉방도 제대로 되지 않은 폐쇄망 공간에 들어가서 작업하는 것이 끔찍하다고 여겨졌다. 가장 기억에 남는 것은 로깅을 남겨야 하는 필수 사항과 그 보관 조건에 대해서 신경써야 한다는 것이다. 어떠한 로그 조건은 2년 이상 보관하고 있어야 하기 때문에 S3 Glacier 단위로 저장해야 한다. 어떠한 로그 조건은 개인정보에 마스킹을 하고 있어야 했다. 이러한 조건을 만족할 수 있는 정책 단위를 긴밀하게 보안팀과 소통해서 결정하고 구현한 뒤 외부 심사위원에게 설득했었다. 최종적으로는 회사가 ISMS 인증을 취득함으로서 아름답게 프로젝트가 마무리 되었다.
이 외에도 회사에서 커스터디 프로젝트를 진행하는데 별도의 TF가 있기는 하지만 주요한 결정 내용에 대해 팀 전체로 전파가 잘 되지 않는 것이 보였다. 팀장 분이 이메일을 통해 주에 2회씩 진행상황을 공유하고, 때로는 전체적으로 소통이 잘 이루어지지 않는다고 보일 때 이메일을 C레벨까지 escalate 해서 이메일을 보내 문제를 Raise하는 모습을 보였다. 이는 새로운 회사에서도 합류 초반에 이메일을 통해 나의 업무 상황을 공유하는 전략의 기초가 되었다.
블록체인 업계는 지난 몇 년 동안 다른 업계에 비해 데이터 엔지니어링의 수준이 놀랍도록 떨어져 있었다. web3 옹호론자들은 블록체인 데이터가 오픈되어 있다고 주장하지만 실제로는 특정 서비스 프로바이더가 아니면 접근하기 매우 어려운 형태였다.
그래서 소위 "오픈 데이터" 를 ETL 전문적으로 하던 곳이 돈을 어느 정도 버는 구조였다 (스노우플레이크에 엑싯하기도 하고) 이미 AI/ML 계열에서는 밥먹듯이 사용하는 parquet 파일 타입 같은 것도 거의 사용하지 않고 그냥 노드에서 주기적으로 http polling해서 Raw JSON 형태로 적재하는 형태가 대부분이었다. 나는 이것이 블록체인 업계의 문제라고 생각했고 내가 스스로 검증하고 소비자에게 투명하게 제공할 수 있는 데이터 파이프라인을 만들어서 제공하는 것이 꿈이었다.
따라서 회사에서 내가 가장 만들고 싶었던 프로젝트는 Dune Analytics 내지 Etherscan이였다. 커스터디 업무가 끝나고 나서 진행했던 프로젝트는 바로 Sonar Mars였다. 하루에 수십 만건의 트랜잭션이 글로벌 단위에서 떨어지는 이더리움 블록체인, 그리고 다양한 블록체인 메인넷에 있는 데이터를 어떻게 해야 정합성이 맞으면서도 준실시간성에 맞게 데이터를 긁어와서 살펴볼 수 있을까를 고민했다. 2022년에 런칭했던 Osmosis 익스플로러는 Postgres의 능력치를 최대한 사용한다는 점에서 의미가 있었지만 JSON 전처리와 후처리 로직이 무겁게 돌아간다는 점에서 구조 한계가 명확하였다.
Ethereum Node들이 Golang의 leveldb를 벗어나서 Rust 노드 단에서 mdbx와 같은 더 나은 key value storage를 사용하고 이를 직접 적재해서 보여주려는 시도 도 있다. 나도 처음에는 Ethereum의 인터널 스토리지를 파싱해서 보여주는 형태의 라이브러리를 Rust로 구현하려고 시도했지만, EVM에 대한 깊은 이해가 필요하다는 것을 깨닫고 가성비 측면에서 불리하다고 생각했다. 내가 만약 계속 블록체인 업계, 특히 이더리움 진영에서 활동할 것이라면 EVM에 대한 깊은 이해는 의미가 있지만 다양한 업계에서 폭넓게 활동하고 싶다면 불리한 학습이라고 생각했다.
ChatGPT가 알려준 대안은 AWS Glue를 이용하여 서빙해보라는 것이었다. 마침 올해부터 Paradigm에서 Rust polars 스택을 이용한 데이터의 수집과 적재를 위한 오픈소스 라이브러리 Cryo와 데이터셋을 구축하고 있었다. 따라서 나는 해당 데이터셋을 포크하여 커스텀하게 확장해서 필요한 인프라를 구축했다. 5초에 한번씩 블록이 생길 때마다 lightweight node가 유동적으로 떠서 Parquet 형태로 트랜잭션 데이터를 파싱해서 S3 Bucket에 업로드하고 죽는 형태의 Docker Container를 만들어 Pod 단위로 서빙했다.
이 프로젝트를 진행할 때는 아직 쿠버네티스 사용이 익숙하지 않을 때라서 ECS/AWS Lambda 기반으로 작업하고 오케스트레이션하는 컨테이너도 별도로 ECS로 띄웠다. Parquet 형태로 적재된 트랜잭션 Raw 데이터는 내가 사전에 정의한 PySpark 스크립트에 따라 후처리되어 S3 Bucket에 신규 저장된다. 이후 AWS Athena 또는 자체 Hive 노드를 통하여 배치성 프로그램이 정해진 시간마다 호출하여 RDB에 적재하는 형태로 구현하였다.
위의 데이터 파이프라인이 정상적으로 동작하지 않을 경우를 대비하여 Second Plan을 만들었는데, 이는 Ethereum Data 서비스를 제공하는 여러 타사 서비스를 API Key를 Rotation하면서 RDB에 적재하는 형태로 만들었다는 것이다. 데이터 파이프라인 역시 최종적으로는 배치성 프로그램이 정해진 시간마다 호출하여 RDB에 저장하듯, 그 데이터 소스를 타사 서비스에서도 같이 적용하는 것이다. 이 때 API Limit을 최대한 우회하여 비용 소모를 줄이고자 노력했고, 고루틴의 강력한 병렬 프로그래밍을 통하여 구현할 수 있었다.
Go Channel을 이용해 Worker Group을 구현하고, API별로 설정되어 있는 Rate Limit 하한에서 동작하도록 개발했다. 이를 통해 Ethereum 메인넷에서 Opensea 상위 최대 2만 개 이상의 NFT와 가상자산에 대한 데이터를 수집하는 배치 서버를 구현하고 서비스 단위에서 적용할 수 있었다. 재미있는 것은 나는 이러한 구현법을 ChatGPT와 대화하면서 찾았다는 것이다. 그리고 나와 커스터디 업무를 함께하던 시니어 엔지니어 2명와 대표를 설득해서 별도의 팀으로 꾸려서 위의 파이프라인 구현을 진행하였다.
아쉽게도 나는 ChatGPT와 대화하면서 비용 추산까지 같이 진행했다는 것이다. 따라서 한 달 비용을 거의 1천만원까지 태워먹은 적이 있었다. 이는 내가 비용 추산을 잘못한 것이었다. 클라우드에 의존하게 되면 비용 효율화가 매우 중요하다는 것을 깨달았다. 후일 새로운 회사에서 어떤 직장 동료가 알려주기를, 데이터 파이프라인은 이제 누구나 띄울 수 있지만 비용 효율화가 싸움이라고 했다. 서비스를 구현함에 있어 원가 비용에 극단적으로 집착해야 한다는 것을 주니어 입장에서 뼈저리게 배운 교훈이 되었다.
MBTI에서 극단적인 E 성향을 보이는 나는 다른 사람들 앞에서 발표하는 것을 좋아한다. 따라서 기술 발표를 준비하면서 필요한 문서와 논문을 찾아보고 이를 다른 사람들에게 친절하게 내용을 엮어서 정리하고 소개하는 것을 즐긴다. 기술 발표를 준비하다보면 나 스스로 암묵지로 알고 있던 내용을 정리해야 하고, 벤치마크나 프로파일링도 직접 수행하면서 내가 알고 있던 내용을 검증해야 한다. 발표 이후에는 잘못되거나 수정한 내용을 피드백 받을 수 있고, 이를 적극적으로 수용해서 다음 발표 때 수정 또는 정정하여 새롭게 공유하기도 한다.
나는 2023년 한 해 동안 GDG Golang Korea 운영진으로 활동하면서 총 5곳의 행사에서 발표를 했다. 발표의 컨셉은 “You Had Me At Go” 시리즈였다. Go 언어를 이용해서 재미있어 보이는 라이브러리를 소개하고 직접 토이 프로젝트를 만들어 청중에게 소개하는 방식이다.
Go To Busan에서는 Hey SNARKs, You Had Me At Go 라는 주제로 블록체인 업계에서 주목받는 영지식 증명의 proving scheme인 SNARKs의 Go 언어 프론트엔드 구현 라이브러리인 Gnarks에 대해 소개하고 간단한 코사인 유사도를 비교하는 circuit을 작성했다.
GopherCon Korea 2023와 Go To Songdo에서는 탈중앙화된 트위터로 인기를 끌었던 Bluesky의 백본 프로토콜인 AT Protocol에 대해서 소개하고, 해당 프로토콜에 직접 호출할 수 있는 간단한 Golang 애플리케이션을 net/http 부터 생짜로 만들어서 AWS Lambda에 호출하는 워크샵을 진행했다.
특히 GopherCon Korea 2023에서는 보도자료를 직접 만들어 인터넷 언론 및 주요 일간지 기자 +300명에게 보도자료를 뿌려 행사 기사를 ZDNet에 편찬하기도 하고, 메인 MC를 맡아 약 600명이 참석한 한국 최초의 Go 언어 행사를 성공적으로 주최하였다.
Go To Daejeon에서는 Hey Vector DBs, You Had Me At Go 라는 주제로 벡터 DB 제품군을 소개하고 Go 언어로 구현된 Milvus를 사용하여 간단한 CRUD 실습 워크샵을 진행했다. 회사에서 벡터 DB 제품군을 자주 접하다보니 해당 발표 장표를 계속 업데이트 하는 것이 유리하겠다고 생각했다. 따라서 Langchain 2023 컨퍼런스와 GDG Devfest Songdo에서는 pgvector와 qdrant도 함께 소개하고 벡터 DB 제품군을 트릴레마 모형으로 분류하여 “Vector Database as a dedicated service” 라는 주제로 발표했다.
엘리스 MLOps 컨퍼런스에서도 회사에서 도움과 기회를 주셔서 Llama2 기반을 pretrain 모델로 삼아서 데이터셋으로 A100 파인튜닝하는 방법에 대해 소개하고 이를 블로그 글로 편찬할 수 있었다.
회사에서: 데이터 파이프라인은 Go 언어 학습과 맞물려서 진행했지만 서비스 구현을 진행할 수록 정말 심연의 세계라는 것을 깨달았다. Spark, Hive, Trino, Hadoop, Spark on k8s, Rust Arrow 와 같은 키워드가 있다. 쉽게 매몰될 법도 하지만 너무 좌절하지는 않고 회사에서 GPU 파이프라인을 새롭게 다시 만들면서 필요할 때 학습하고 적용한다. 새로운 1년이 기대가 된다.a
발표 주도 학습: 새로운 한 해에는 ML 분야에 대한 폭발적인 학습이 필요한 상태이기 때문에 다양한 학습 전략을 동시에 사용해야 한다. 수렴의 학습 방식과 발산의 학습 방식이 있다고 했을 때, 두 전략을 모두 사용할 필요가 있고 발표 주도 학습은 발산의 학습 방식으로 의미 있기 때문에 지속 유지한다. 개인적으로 생각하는 또 다른 학습 방법은 무료 YouTube 강의 공개이다. CPython Internals에 대해 조금씩 공부하기로 결심한 만큼 유튜브를 통해 무료로 학습한 내용을 영상으로 공개해서 남들 앞에서 설명하는 루틴을 꾸준하게 만들고자 한다.
아쉽지만: Go 언어는 나의 주력 언어 중 하나이지만 ML 분야에 있으면 Python을 주로 사용할 수밖에 없다. 하지만 최대한 개인적으로 작업하거나 혹은 ML 도메인이 굳이 존재하지 않다면 Go 언어를 통해 최대한 작성하려고 노력하고 있다. 쉽고 빠르게 작성할 수 있고 그만큼 빨리 버리기도 용이하기 때문에 Go 언어를 사용한다. 아쉽게도 우선순위에 밀려 새로운 한 해에는 Go Internals까지 뜯어볼 생각은 없다. 시간이 된다면 Golang 이메일 뉴스레터도 팔로업받고 따라가고 기여도 해보면 좋지만 나중으로 한다. Go 언어 버전 업데이트만 팔로업하면서 고루틴을 사용하는 감만 잃지 않으려고 한다.
회고를 작성해보니 특정한 언어 단에서의 고민을 넘어 복합적인 목표를 세워진 것을 알 수 있었다. AC2 김창준님이 말씀하시길, 진정한 성장은 이전에 세워진 목표가 기억도 나지 않는 것이라고 했다. 그런 점에서 처음에는 Go 언어를 잘 사용해보기 위해 회사를 통해 서비스 단위의 더 깊이있는 구현을 해본다라는 목표가 없어진 것은 아니지만 그 다음 레벨로 승화했다고 생각해볼 수 있다.
블록체인 업계에 있다보니 Rust를 접할 일이 많지만, 정작 시스템 프로그래밍에 대한 경험이 없는 나로서는 메모리를 직접 제어하는 것에 막연한 두려움이 있었다. 그런데 블록체인 업계에서도 이더리움 진영을 기반으로 새롭게 환경을 구성하려는 움직임이 매우 크게 있고 나중에 AI 업계를 보니 HuggingFace의 TextEmbeddingInference (TEI) 라이브러리를 중심으로 Rust 구현이 활발하게 이루어지고 있었다. 어떠한 형태로든 Rust를 접할 필요가 있었고, 따라서 오픈소스를 중심으로 기여해가면서 Rust에 대한 이해도를 높이는 것이 중요하다고 생각했다.
Simperby라는 포스텍 블록체인 학회에서 만들고 유지보수하고 있는 Rust 기반의 DAO 원포인트 블록체인 메인넷의 컨트리뷰터가 되기로 2022년 12월에 결심했다. 왜 그런 결심을 했냐면 당시에는 블록체인 업계에서 근무하고 있었기 때문에 도메인적으로 기여할 수 있는 부분이 많을 것이라고 생각했다. 2023년 1분기 포스텍 블록체인 학회의 컨트리뷰션 트랙에 참여하면서 여러 이슈를 할당받아 멘토와 함께 PR을 만들고 헤쳐나갔다. Google에서 나왔던 Rust 가이드북을 참고하기도 하고 ChatGPT와 토론해가면서 필요한 기능을 만들어나가기도 했다. 이 과정에서 처음으로 오픈소스 형태의 기여를 어떻게 하는지도 배울 수 있었다. 커밋하기 전에 꼭 최신 develop 브랜치에서 rebase하고 rebase merge를 해야 한다는 정책을 따른다던지, 푸쉬하는 측에서 GitHub Actions를 활용하여 prehook/posthook을 통하여 cargo lint 또는 clippy를 반드시 실행해서 테스트가 통과되는지 여부를 확인해야 한다던지 등.
Simperby 프로젝트에 조금 더 활력을 불어넣기 위해서 2023 오픈소스 컨트리뷰톤의 멘토와 Hacktoberfest 2023의 참여 프로젝트의 멘토로 참여했다. 내가 다른 멘토들에 비해서는 Rust 경험이 확연히 떨어지지만 개인적으로 Simperby 프로젝트의 참여 동기를 만들기 위해서 멘토로 참여했다. 이 과정에서 정말 코딩을 잘하는 멘티 분들을 만나고 주당 1회 이상 페어 프로그래밍을 진행했다. 또한 모두의연구소에서 해당 프로젝트에 대해 소개하기도 했다.
단순히 기여만 하기에는 재미가 없기 때문에 Rust 언어를 단기간에 집중적으로 활용할 수 있는 기회를 찾았다. 가장 의미있는 것은 해커톤이었다. Simperby 오픈소스를 활용하여 멘티와 멘토가 힘을 합쳐 DAO용 유틸리티를 만들어 해커톤에 나갔고, 2023년 8월 이드콘 한국에서 수상하여 짭잘한 상금을 코인으로 획득하기도 하였다. 이 외에도 Aptos 해커톤에서도 Rust 기반 노드 클라이언트와 GlueSQL에 의존성을 붙여 간단한 SNS 서비스를 만든다던지, Halo2 circuit backend가 Rust로 되어있기 때문에 열심히 문서를 읽고 최대한 동작할 수 있는 방법을 생각해서 해커톤에서 어떻게든 출품하기도 했다.
이제는 Rust를 바탕으로 간단한 웹 서버는 제작하고 CRUD는 할 수 있다. 생태계에 대한 기본적인 이해도 있고 간단한 매크로도 짤 수 있으며 lifetime, dangling pointer의 개념에 대해서도 설명할 수 있다. 하지만 그 뿐이다. 여전히 Rust 디스코드 서버에 들어가면 무슨 소리인지 모르는 것도 많고, 시스템 프로그래밍에 초짜이기 때문에 더 많은 경험이 필요하다. 이를 극복하기 위해서는 해커톤 수준을 벗어나 높은 품질의 실 서비스를 만드는 것이 필요하다. 새로운 한 해에는 회사에서 필요한 모듈을 만들 때 최대한 Rust 라이브러리를 활용하거나 Rust 언어를 도입할 수 있는 부분을 적극적으로 찾아서 작업하고자 한다.
나는 새로운 분야를 학습하는 데 아무런 거리낌이 없다. 내가 배우고자 하는 내용이 노벨상 수준의 어려운 것인 경우도 없거니와, 나는 세계 1등이나 100점을 목표로 하지 않고 절반의 수준 혹은 70점 수준만 충족해도 만족하는 사람이다. 대신 70점 정도가 되는 수준을 여러 분야로 갈고 닦아서 언젠가 융합을 할 수 있게 되는 수준일 때 넓은 시야에서 바라볼 수 있는 사람이 되고 싶다. 하지만 지금까지 내가 야생학습을 잘 해왔다는 검증도 필요하고 더 야생학습을 잘 하는 사람에게 프레임워크를 전수받거나 피드백을 객관적으로 받는 것도 필요하겠다. 나는 ML이라고 하는 새로운 분야에 입문했는데 ML은 블록체인 마냥 분야가 넓고 깊으면서도 빠른 변화가 있기 때문에 최소 노력을 기울이고도 빠르게 학습할 수 있는 역량이 필요하다.
성공적인 야생학습의 예시: 회사에서 수행한 가상자산 수탁관리 서비스 프론트엔드 프로젝트는 성공적인 야생 학습의 예시였다. 갑작스럽게 회사에서 시니어 프론트엔드 개발자가 퇴사하였다. 프론트를 뒤이어 맡을 사람이 없어지자 내가 맡겠다고 자원했다. 나는 지금까지 프론트엔드를 한 적이 없지만, 이번 기회에 프론트를 배울 수 있으리라 생각했다. 항상 해커톤에 나가게 되면 직접 프론트를 작업하는 것에 부담감을 느껴왔었는데, 그러한 부담감을 제거할 수 있는 좋은 기회라고 생각했기 때문이다. 다행히도 퇴사한 개발자와 좋은 인간적 유대감을 유지하고 있었기 때문에, 다소 어려움은 있었지만 도움을 요청할 수 있었고 심지어 퇴사 이후에도 코드 리뷰를 받아볼 수도 있었다.
해당 프론트엔드 프로젝트들이 사용했던 스택은 React와 Redux, React-Router-dom, React-Hook-form, 조금의 Next.js 기반의 SSR 그리고 Tailwind CSS였다. 퇴사한 개발자 분이 그리 친절하게 온보딩을 해주고 나가시지는 않았기 때문에 내가 처음 받아든 프론트엔드 리포지토리는 정말 물음표의 천국이었다. 각 모듈이 무엇을 뜻하는지 이해하지 못했다. 그래서 내가 취한 방법은 당장 기여할 수 있는 부분부터 기여하자는 것이다.
예를 들어 트랜잭션 페이지가 있고 트랜잭션 페이지에 어떤 버튼을 눌렀을 때 그 버튼이 서버에 POST 요청을 보내는 작업이 필요하다고 하자. 그러면 그 버튼을 어떻게든 찾는다. 아마도 웹 페이지의 URL을 검색해서 그 Router를 찾고, 버튼을 Console 탭에서 CSS 이름을 찾은 뒤 그 attributes를 검색해서 찾은 뒤 수정하는 방식이다.
여기까지 왔으면 이제 ChatGPT와 대화할 시간이다. 이 프로젝트를 진행했을 당시는 2023년 4월 경이었는데 당시에는 GPT-4가 ChatGPT에서 시간당 20회까지만 대화가 가능했다. 따라서 대화 턴의 개수가 매우 불충분했기 때문에 Poe라고 하는 별도의 서비스에 가입해서 비용을 지불하고 무제한 GPT-4 대화를 수행했다. GPT-4가 알려준 Redux는 매우 친절했다. 피카츄 라우터라고 하는 가상의 프로젝트를 통해 Redux에 대해 이해할 수 있었고, 실제 코드에 투입되어서는 line-by-line 단위로 해당 라인이 어떤 일을 하는지 따라가며 모듈을 이해할 수 있었다. CSS가 잘 이해되지 않아서 디자이너 출신 프론트엔드 개발을 하는 애인에게 주말 중에 졸졸 따라가서 물어보면서 학습했다. 마치 내가 작업하던 시점에 열렸던 코드스쿼드의 클린 프론트엔드 과정을 들으며 상태관리에 대해 조금 더 이해하려고 노력했다. 따라서 프론트엔드 시니어가 퇴사하고도 필요한 기능과 페이지 모듈을 추가하여 프로젝트를 성공적으로 완수할 수 있었다. 퇴사한 시니어 분이 프로젝트가 종료될 즈음에 코드리뷰하면서 말하길 내가 이정도까지 작업할 지 몰랐으며, 깜짝 놀랐고 정말 대단하다는 평가를 내려주었다.
AC2 과정을 2023년 하반기에 Level 1을 듣고 있고, 2024년 하반기에는 Level 2를 수강할 예정이다. 수강의 목적은 야생학습을 더 잘하기 위하여 야생학습의 프레임워크를 학습하고 그 프레임워크를 실제로 적용했던 사람들의 많은 이야기를 들으며 나에게도 정면교사 또는 반면교사로 삼고자 하기 때문이다. 때로는 업무에서 학습에서 멀어져서 메타인지를 발휘하는 자세는 내가 더 야생학습을 잘 할 수 있도록 만들어줄 것이다.
나의 2024년 목표는 2024년 12월에 AC2 또는 어딘가에서 나의 야생학습 도전기에 대해 발표할 공산이다. 나의 야생학습 대상은 Ops 단위 인프라와 ML 지식에 있기 때문에 회사에 드글드글한 전문가들을 어떻게 인터뷰하고 야생학습할 것인가라는 아주 재미있는 주제들이 넘쳐난다. 성공적인 야생학습을 2024년에 수행하고 나서, 2024년 12월에 여러분들에게 나의 경험 내용을 공유해볼 공산이다.
장면 하나. 2023년 9월 첫주부터 새로운 회사를 다니기 시작했는데, ML 분야에 대한 지식이 그리 넓지 않다보니 전문성이 있는 사람으로부터 그 지식을 어떻게 전이받을 것인가에 대해 관심이 많았다. 다행히 나에게 유리한 고지에 있었던 것은 전문가에 비해 2달 먼저 입사했고, 덕분에 아주 기본적인 용어와 동작하는 원리에 대해서는 야생학습을 통해 파악을 조금이나마 할 수 있었기 때문에 다소 유리한 고지에서 싸움을 시작할 수 있었다. 원래 나의 스타일은 하고 싶은 것이 있으면 달려가는 스타일! 따라서 무작정 들이받는 것을 잘한다. AC2 멘토링과 코칭을 통하여 CTA라고 하는 전문가 인터뷰 방법을 알게 되었다. CTA는 Cognitive Task Analysis라고 해서, 전문가가 무의식 중에 어떤 결정을 했을 것이라 생각하고 그 무의식의 결정을 어떻게든 끄집어내고자 하는 것에 의의가 있다. AC2 코칭에서 허재훈 멘토님이 재택을 자주 하는 상대가 있다면 디스코드를 통해 상대가 어떻게 작업하는지 관찰하고 사고의 Jump를 감지해서 질문을 던지라고 말했다.
장면 둘. ChatGPT와 올해 정말 많은 시간을 보냈다. 처음에는 무작정 프롬프트를 작성하기만 했다. 솔직히 ChatGPT에 뭔가 프롬프트를 치는 것이 정말 귀찮은 일이다. 워낙 급한 성격의 소유자인 나는 처음에는 복사 붙여넣기를 연발하고 있었다. 물론 좋은 인스트럭션을 주어야 한다는 것은 머리로는 알지만, 갑작스러운 버그가 일어날 때 마음이 급해지면 대충 치는 것은 누구나 마찬가지가 아닐까.
장면 셋. 나 자신에 대해서 스스로 챙기지 못했다. 올해에는 초반에 열심히 하겠다고 하는 데일리 리뷰를 잘 하지 못했는데 그러한 지점에서 피드백을 잘 하지 못했다. 나 스스로에 대한 피드백 루프가 명확하지 않았던 탓이다. 급한 일이 있으면 해당 일을 쳐내는 것에 집중한다. 그렇다면 우선순위는 높지만 급하지 않은 개인적인 일을 처리하지 못한다. 회고와 같이 나한테 쏟는 시간이 적어질 수록 내가 더 잘 일하고 학습할 수 있는 사항을 짚어내지 못한다.
장면 넷. 나 자신에 대해서 스스로 챙겼던 순간도 가끔 있었다. 올해 새로운 회사로 옮길 수 있는 2번의 기회가 있었다. 어떻게 결정해야 할 지 고민이 많이 되었다. 스스로 판단하기가 어려운 지점들이 여럿 있었다. 이직이라는 것을 처음 해보는 입장에서, 만약 이직을 하게 된다면 어떻게 해야 좋은 관계를 유지하며 아름다운 마무리를 할 수 있을가도 고민이었다.
장면 하나. 극단적인 E의 성향인 내가 I 성향의 사람에게 무작정 들이박으면 상당히 부담스러워 한다는 것을 알게 되었다. 기억에 남는 순간들은 1) 무엇인가 집중하고 있을 때 말을 걸면 사람이 깜짝깜짝 놀랄 수 있다는 것. 이는 누구나 그렇지만, 오히려 내가 사람에게 말을 걸 때 당연할 반응에 대해서 고려하지 않았다는 것을 깨달았다. 2) 재택 상황에 있는 동료에게 디스코드를 통해 함께 관찰을 하고 싶다라고 했을 때 거부를 당했다. 그 이유는 분명한데 자신의 private한 시공간이 침범당하는 기분이었다고 한다. 나는 어느 정도 라포가 쌓인 상황이었기 때문에 수락 가능성이 있다고 생각했는데 거절당한 것이다.
장면 둘. 갑자기 회사에서 온 연락. 무엇이 안된다고 한다. 빨리 처리를 해줘야 하니까 당황하게 된다. 아무리 봐도 나의 잘못인 것 같다. 사람 심장이 급박해지면 식은땀이 나고 문제 파악도 잘 안된다. 이를 통해서 알게된 나의 특징. 당황할 때 나를 진정시키는 방법을 잘 몰랐다는 것. 그래서 일부러 심호흡을 하고 좀 진정하려고 노력한다. 심호흡이 은근 도움이 된다. 그러고 천천히 프롬프트를 치면서 내가 무엇을 몰라하는지 정리를 하게 된다. 오히려 프롬프트를 치는 과정이 나에게 생각 정리의 과정이 되고 마음을 진정시키는 데 도움이 된다.
장면 셋. 장면 둘과 연관이 있는데, 만약 어떠한 문제가 잘 해결이 되지 않는다고 하면 일을 놓지 못하고 계속 질질 끌게 된다. 혹은 일이 바쁘다고 하면 빨리 처리해야 나 때문에 조직 전체가 문제가 생기는 일이 없다고 생각되기 때문에 계속 회사에서 질질 끌게 된다. 그러다보면 새벽 늦게까지 작업하기도 하고 스스로에게 약속한 운동도 가지 않는다. 물론 새벽을 새는 동료들이 있다면 해당 동료들과 함께 깊이 있는 대화를 하기도 하고, 가끔은 번뜩이는 페어 작업을 같이 하기도 한다. 히스토리를 공유받기도 쉽다. 하지만 새벽 늦게까지 일을 하고 오전에도 회사에 나가야 한다고 하면 나 스스로를 돌아볼 수 있는 최소한의 시간이 주어지지 않는다. 그렇게 카드값을 연체해보기도 했고, 처리해주기로 한 일을 깜빡했다가 카톡을 보지 않는다고 가족들에게 원망을 듣기도 했다. 매주 2회 PT를 통해 의지를 돈 주고 사지만 그것 뿐이다.
장면 넷. 판단이 어려울 때 애인에게 간다. 애인과 함께 이야기를 하면 제3자의 시각에서 객관적으로 조언을 내려준다. 내가 판단해야 하는 지점이 무엇이 있고, 특히 연상 애인이라고 한다면 나보다 사회적 경험이 있기 때문에 내가 차마 놓칠 법한 부분에 대한 조언도 함께해준다. 이러한 조언을 통해 같이 판단해야 할 요소에 대해 시각화를 엑셀 스프레드시트에 진행한다. 이를 통해 1곳의 이직은 거절했고, 다른 1곳의 새로운 도전에 참여하겠다는 의사결정을 빠르게 내릴 수 있었다. 나 스스로는 판단하기 어려웠을 때 다른 애정있는 사람들의 피드백과 메타인지화를 통하여 스스로에게 여유를 주고 올바른 판단을 할 수 있었다.
위 장면 셋, 장면 넷의 문제를 해결하기 위해 아무런 시도를 하지 않았던 것은 아니다. 처음에는 구글 캘린더를 통해 내가 소모하고 있는 시간을 blocking 해놓고 이를 바탕으로 내가 어떻게 시간을 쓰고 있는지 파악하고자 했다. 그런데 급한 일을 처리하고 있노라면 이러한 블로킹 처리를 제대로 해놓지 않게 되는 경우가 있다. 또하나는 변성윤님에게 Rize라는 도구를 소개받았는데 해당 도구는 유료 결제를 해야 해서 굳이 사용해야 하나라는 생각을 들게 만들었다.
장면 다섯. 오랜만에 학교에 복학해서 1학기 수업을 들어야 했다. 실험 수업은 처음인데 18학번 선배가 23학번 신입생 친구들과 함께 수업을 들어야 하니 아주 고역도 이런 고역이 아니었다. 가뜩이나 회사를 열심히 다니고 있는 상태였기 때문에 학점은 중요하지 않았다. 나는 생물학과 집합론을 잘 알고 있는 친구를 동원하여 일주일에 한번씩 나에게 공부의 강제성을 주도록 과외를 요청했다. 이해가 안가는 문제나 개념은 ChatGPT를 활용하여 열심히 물어봤다. 실험 과제 보고서 작성에는 클로바 노트를, 과제 제출 직전에 ChatGPT를 많이 사용했는데, LaTeX 문법으로 물어보고 LaTeX 문법으로 답하게 하면 ChatGPT의 응답 추론 능력이 압도적으로 좋아지는 경험을 했다. 예를 들어 물리 문제에 대한 답안이 필요하다고 하면 인터넷에 돌아다니는 유사 문제를 찾아서 그 정답과 답변을 몇 개 few-shot으로 준 다음에 나의 실제 문제에 대해 답을 하고, 이러한 문제의 공식도 LaTeX로 주면 답변이 매우 좋아진다는 것을 프롬프팅으로 파악할 수 있었다. 시간적 압박 때문에 비록 유쾌한 경험은 아니었지만 생물정보학에 큰 관심을 가지게 된 한 학기였고 실제로 성적도 3.5로 회사를 병행하는 치고 나쁘지 않게 받았다 (일반물리 A-와 집합론 B+ 받았다)
나 자신에 대한 대화 UX 개선 퇴근 시간을 조금 당겨보고 대신 일찍 나와보자: 주 2회는 새벽을 지새우더라도, 최소 3회는 밤 11시에는 퇴근한다. 이러한 습관의 형성을 위해 여자친구에게 퇴근 시간을 보고하기로 했다. ( AC2 멘토 도환님이 제안해주신 방법이다 )
충분한 넛지를 잘 이용한다. 예를 들어서 10분 집중하고 나면 알람이 울리게 해서 커피를 마신다. 그래서 10분이라는 시간을 캘린더에 적고 트래킹한다. 그리고 10분 뒤에 회고한다. 또한 저녁을 먹지 않고 개인 운동을 다녀오면 더욱 상쾌한 마음으로 밤에 일할 수 있다. 저녁 시간에 사무실을 떠나 운동을 한다. 와 같은 제약을 설정해보려고 한다.
상대 대화에 대한 UX 개선 - I인 대상에게: 생각보다 Slack 단위의 서면 메시지도 충분히 효과를 낼 수 있다고 보았다. 대면 메시지도 분명 효과가 있지만, 대면으로 무엇인가를 진행한다는 것은 일종의 최종 발동카드라고 생각해야 할 것이다. 최대한 I인 사람에게 서면으로 내용을 남겨달라고 하고, 서면으로 많은 내용을 담아내도록 유도한다. 그리고 서면으로 그 사람이 지금까지 남겨왔던 모든 흔적들과 메시지를 조합해서 최대한 그 사람이 생각했을 법한 사고과정을 추적한다. 예를 들어 A라는 결과물을 들고온 I 입장의 사람이 왜 A에 대해 생각했을까를 알고 싶다면 어떤 방법을 동원해서라도 추론해본다. 내가 추론하기에 B가 정답이라면 B가 맞냐고 물어본다. 그러면 친절하게 대답을 해줄 것이다.
핵심은 Slack에 있다: 장면 다섯에서 내가 좋은 성적을 발휘할 수 있던 것은 적절한 재택을 통해 개인 시간을 확보하여 Slack할 수 있었다는 것이다.
더 좋은 프롬프트를 만들기 위해 고려하고, 마음에 안들면 다시 만들고. Chegg에서 유사 문제 해설을 찾은 다음에 내가 답안을 얻고자 하는 답의 문제를 같이 넣으면 성능이 좋아진다라는 것을 체감하였다. 다시 말해 100%의 에너지를 다 쓰지 말고 80, 90 정도로만 써야 유연하게 다양한 시도를 해볼 수 있고 나 스스로에 대한 회고도 가능하며 상대의 UX도 고려할 수 있다.
올해 1월 경에 친구로부터 재미있는 사람을 소개받았다. 모 유명 VC에 다녔던 지인 A가 퇴사를 하고 창업을 준비하고 있다는 것이다. 커머스와 관련된 내용이었고 생각하시는 사명이 매우 좋다고 느껴졌다. 따라서 조금이라도 돕고 싶었고 경우에 따라서는 창업의 기회가 될 수 있을 것이라 생각했다. 나는 현재 모 유명 스타트업의 초기 멤버로서 21살에 참여할 수 있는 기회가 있었는데 깊이 있게 고민하기도 전에 놓치고 말았다. 그래서 항상 열정있는 창업가가 있으면 그들의 이야기를 꼭 들어야겠다고 생각했다. 내가 차마 놓치는 기회는 최대한 없도록 만들고 싶었기 때문이다. 2월에 모 유명 창업경진대회에 나가 1등을 차지했고, 모 학회에서 3개월 이상 액셀러레이팅도 받아보고, 모 대학 캠퍼스 타운에 회사가 입주하게 되었다. 나는 8월까지 무보수 파트타임으로 주말에 사무실에서 시간을 보냈다.
파운더가 되고자 하는 A는 1월부터 7월까지 정말 열심히 했다. 자기가 생각하기에 서울대, 카이스트 등 유명 대학에 나온 사람들을 열심히 모아 초기 멤버가 될 수 있는 가능성이 있는 사람 5명을 모았다. 그리고 그 5명과 함께 주말마다 시간을 보내며 아이디어를 빌딩하기 시작했다. 문제는 자기가 생각했을 때 정말 각 분야에서 짱짱이라는 사람만 모아놓고, 자신의 아이디어를 설파하기 시작했다는 것이다. 지금도 기억나는 장면은 매 회의마다 A가 대화의 90%를 차지하고, 나머지 4명은 A가 던지는 질문에 수동적으로만 반응했다는 것이다. 내 생각에 사람들은 아마 A가 가진 인적 네트워크 혹은 개인적 친분 때문에 차마 거절하지 못하고 탐색전을 벌였던 것으로 보인다. 하지만 A는 4명이 정말 인생을 건 코파운더라고 생각하고 그들을 대했다. 그래서 A가 도메인 이해를 위해 특정한 데이에 여러 카드를 활용하여 현명한 소비를 해보라고 요청했지만, 나머지 4명은 이를 따르지 않았다. 그래서 A가 큰 화를 내었고, 나는 A가 생각하는 창업을 꼭 했으면 좋겠다고 하여 주말마다 관악구에 있는 캠퍼스타운 사무실에 나가서 유튜브 세팅도 도와주고, 간단한 우피 사이트로 PoC 런칭하고 바이럴 마케팅 집행도 도와준 적이 있다.
하지만 A는 현장에서 리서치를 하는 사람이라기보다는 재무제표를 바탕으로 한 서류 기반의 작업에 익숙한 사람이었다. A는 분명 똑똑하지만, 현장에서 돌아가는 일이 어떻게 돌아가는지 완전히 파악하지 못한듯 했다. 나는 A가 가진 소신과 생각을 소셜 캐피탈로 전환하기 위하여 유튜브를 하라고 제안하고 관련 도구를 가르쳐주기도 했지만, A는 이를 제대로 수행하지 않았다. A의 생각은 확고했고 나의 마음을 50% 정도 설득시켰다. 다른 사람들의 마음은 10% 정도만 얻었던 것으로 보인다. 하지만 논리적인 계산이 있다고 하더라도 실제 동작하는 아주 작은 프로덕트를 만들어서 설명하는 것이 필요하다.
인플루엔서 책에 따르면 사람들을 설득하는 방법은 1) 스토리텔링 2) 동작하는 아주 최소한의 PoC를 통해 문제 해결을 눈으로 보여주는 것이다. A는 무려 6개월 그 이상 동안 아무런 프로덕트를 안타깝게도 내지 못했다. 내가 생각하는 A의 예비 창업팀 실패는 창업팀 구성에도 찾을 수 있다고 생각했다. 최상위 대학교를 졸업해서 재무, 개발 등 각 분야에서 잘한다는 사람을 데려왔지만 미션 단위로 Align이 되거나 업무 스타일이 고려가 되지 못하다면 아무런 변화가 일어나지 않았다. 그 사람은 어떻게 일하나? 어떠한 동기에서 사람을 움직이게 할 수 있나? 혹은 지금 5명의 사람이 필요한가? 일단 2명이서 작은 단위를 만들어서 재미있다는 것을 증명한 다음에 점진적으로 사람을 모을 수 없나? 라는 생각을 하게 된다.
내가 파운더 또는 코파운더로 참여를 하게 된다면, 혹은 팀장급이라면 사람을 어떻게 모아야할까. 지금 있는 회사도 초기 단계이기 때문에 앞으로 급성장을 하면서 계속 새로운 사람이 들어올 것이다. 기존 팀원으로서 나는 동료를 어떻게 선발하고 또 어떤 동료를 그려야 할까. 유명한 회사, 유명한 대학을 나온 사람들이 막연히 좋다는 생각은 버릴 수 있던 경험이었다. 새로운 방식으로 새롭게 사람을 모으고 뽑아야 한다. 어떻게 할 것인가? 아직 물음표이지만 한 가지 힌트가 된다면 지금 내가 일하고 있는 회사의 사람들은 어떠한 포인트에서 스타트업에 조인했을까. 어떤 지점에서 대표는 인재를 데려왔을까. 이러한 지점에 관심을 가지고 내가 만약 대표가 된다면 어떻게 할까? 라는 사고 시뮬레이션을 틈날때마다 해보고 있다.
자세하게 적지는 않겠지만 어떤 조직의 문화에 전반적인 문제가 있었다. 하지만 사람들은 서로 말을 하지 않고 쉬쉬한다. 의욕이 있는 사람들이 좌절할 때 나만큼은 새로운 대안을 주고 싶었다. 그래서 새로운 팀을 꾸리기도 하고 내가 선제적으로 의욕있는 아이디어를 제시하려고도 노력했다. 여러 노력 끝에 결국 조직을 떠나는 결정을 스스로 내리면서 상황은 종료되었지만 근본적인 문제가 해결된 것은 전혀 아니었다. 사람들이 느끼고 있는 감정들과 생각들이 모두 정답은 아니더라도 가장 솔직하게 진행되어야 의미가 있다고 생각했다. 내가 당신과 더욱 잘 지내고 싶어서, 우리 모두의 성공을 위해, 공격이 아닌 동료로서의 선의로 피드백을 제공하고 같이 회고할 수 있는 문화를 만들 수 있을까?
이러한 고민은 AC2 레벨 1 교육과정을 신청한 결정적인 계기가 되었다. 책임 내지 팀장 급의 사람들이 가지고 있는 고민들을 듣고 있노라면 서로 다르면서도 비슷한 변주라는 생각을 가지게 되었다. 문화를 만들어가는 사람들은 신입부터 대표까지 모두가 개입해서 참여해야 하는 것이고 어떤 특정한 계층의 인물이 강제하여 심어질 수 있는 것이 아니다. 문화가 잘 갖추어져 있다면 객관적인 시각에서 볼 때 불리한 조건의 인적 및 공수 자원이라고 하더라도 유의미한 성과를 만들어낼 수 있다는 것을 알게 되었다. 문화를 만들어내기 위해서는 작은 단위로 마음이 맞는 사람들끼리 모여 작전회의를 하고 작당모의를 해야 한다. 우리 먼저 시범을 보이자. 그 시범을 보여서 얻고자 하는 목표에 대해 설정하자. 그리고 해당 액션이 더 많은 사람들에게 전파될 수 있는 방법을 고민하자. 변화를 만들기 위해 중요한 Keyman을 발굴하고 그 Keyman을 도와주자.
불평과 험담을 하지 말자. 불평과 험담을 하면 문제가 해결되지 않고 오히려 감정이 악화될 뿐이다. 하지만 우리가 어떻게 일을 하고 있었을지 점검해보는 과정은 필요하다. 김창준 님의 Essence of Agility이 회고를 할 수 있도록 돕는 적절한 지침이 된다. 자그마한 액션 아이템을 만드는 일이 아니라면 불평은 피하는 것이 좋다. 나머지 액션 아이템은 아직 잘 모르겠지만, 메타인지를 더 많이 고민하는 집단과 환경 속에 계속 있고 싶어서 AC2 Level 1을 신청해 진행하고 있고 내년 9월부터는 AC2 Level 2 과정이 있다.
12월에 회사 프로젝트가 급했던 상황이 있다. 원래는 내가 투입이 되는 상황은 아니었지만 아무리 봐도 옆의 동료가 너무 힘들어하는 것이 눈에 보였다. 디퓨전 모델에 대해서는 몇번 튜토리얼 돌려보고 말아서 잘 몰랐던 상황인 내가 저 프로젝트에 도움이 될 수 있을까 생각했지만, 김창준님의 다음의 말을 듣고 내가 참여해서 어떤 방식으로든 도와야겠다고 생각했다. 당시 내가 했던 생각은 김창준님의 위의 메시지와 비슷하다. 일단은 파악부터 한다가 중요한 게 아니라, 해당 프로젝트의 키맨을 찾아 어떻게 문제를 같이 해결할 수 있을까 고민하는 것이다.
키맨 옆에서 2주 동안 그냥 옆에 있었다. 어떻게 코딩을 하고, 무엇이 배울 만한 지점이고, 무엇이 내가 지적할 만한 지점인지 관찰했다. 나도 프로젝트에 곧 투입되어야 하는 입장인데 온보딩 과정이란 것을 누가 책임져줄 시간은 없을테니, 그 옆에서 어떻게 일하는 지 관찰하는 것만 해도 나에게도 온보딩이 되고 좋은 입장이다. 키맨으로 역할하는 사람 역시 자신이 계속 과로로 인해 업무에 실수도 많은데 옆에서 누군가가 같이 코드리뷰도 봐주고 페어코딩을 하면서 실수를 줄여나가는 것 혹은 자신이 생각하지 못했다는 점을 같이 보아준다는 것에 심리적인 안정감도 느꼈을 것이라고 생각한다. 한 해의 마지막 날까지 대응을 하면서 키맨과의 라포도 쌓을 수 있었던 점이 좋았다.
이러한 접근은 위에서 CTA에 대해 설명한 것과 연관이 된다. 어떤 I의 입장에 있는 사람에게는 무작정 대화를 걸고 말을 거는 것이 부담스러울 수 있기 때문에 Slack과 GitHub와 같은 비동기적인 도구를 활용하여 상대의 UX를 극대화하는 것이 중요하다. 그런데 어떤 E 또는 F의 입장에 있는 사람에게는 심리적 안정감을 제공하면서 이성적인 판단을 내릴 수 있도록 도움을 주는 것이 프로젝트 전체에 도움이 된다는 것을 알 수 있었다.
다만 이 과정에서도 회고가 필요하다고 느끼는 것은 김창준님의 EOA 원칙에 따라 어떤 필요한 스테이크홀더를 충분히 참여시켰는지, 사전에 더욱 대비하면서 프로젝트를 수행할 수 없었는지 회고하는 것도 필요할 수 있겠다고 생각한다. 어쩌면 처음부터 프로젝트를 참여했던 사람이 아니기에 조금 더 외부인의 시각에서 파악할 수 있을 것이라고 본다. 내가 조직에서 회고와 EOA의 역할을 수행할 수 있는 사람이 되어야 한다.
나이가 들 수록 한국 외의 사람들과 만나지 못한다고 느꼈다. 물론 나이가 중요한 것은 아니지만 20대 초중반이 다양한 국적의 친구들과 함께 호흡할 수 있는 가장 좋은 시기이다. 개인적으로도 30세 이전까지 국제 항공편을 사용할 수 있는 마일리지를 확보해두었기에, 회사와 학교라는 핑계로 항공편을 이용하지 못하는 것은 매우 아쉬운 일이다. 다양한 국적의 친구들과 교류하는 것은 더 넓은 세상으로의 프로덕트를 타겟해서 만들 수 있는 기회이기도 하다. 또한 어린 시절 만나는 친구들이 많다면 소셜 캐피탈을 활용해서 내가 지내고자 하는 국가에 정착하기도 쉽다. 나이가 조금이라도 어릴 때 더 넓은 국적의 소셜 캐피탈을 확보할 필요가 있다.
블록체인 업계에 있으면서 가장 좋은 기회는 외국에 나갈 일이 정말 많다는 것이다. 올해는 미국에 2번 나갔으며 한 번은 EthDenver로 덴버 지역과 LA 지역에서 약 2주 정도 시간을 보냈다. 또한 8월 말 기존 회사에 퇴사하고 나서는 SBC 행사에 참여하고자 Stanford 대학에 약 일주일 정도 시간을 보냈다. 그 과정에서 알게 된 친구들이 한국에 방문했을 때 논스와 우리 집에서 각각 머물 수 있도록 도와주었다.
이드덴버는 2월 중순에 방문했다. QuantStamp 라고 하는 블록체인 계열 보안심사 서비스를 운영하는 곳에서 펀딩을 받아 해커하우스에서 일주일간 머물렀다. Jaimin이라고 하는 친구가 가장 기억이 남는데 옥스포드에서 경제학을 공부하다가 최근에는 On-fiat 금융 서비스를 만들고 있는 친구였다. Shubu랑은 방을 같이 사용했는데 남가주 USC 대학에서 컴퓨터공학을 전공하기 시작한 1학년이었다.
함께 리모트로 기획을 해준 윤기훈님과 함께 그 친구들과 함께 해커톤을 같이 나갔고 내가 출품했던 것은 ChatShire라는 제품이었다. 당시에는 GPT 3.5 API도 매우 불안정했던 상태라서 ChatGPT의 세션정보를 역추적해서 API 호출을 할 수 있도록 구현했다. 그런데 이드덴버 기간 중에 GPT3.5 turbo API가 출시되어 급하게 바꾸었던 기억이 있다. Chatshire 제품을 발전시켜서 4월에는 학교 중간고사 일주일 전 기간이었음에도 이드 도쿄에 방문해서 일본 시부야 지역 앞에서 제품 피칭을 했던 기억은 난다. 비록 수상은 못했지만. ( 덤으로 한국인 2번째로 월드코인 홍채를 인식한 사람이 되었다. 8월에 OpenAI 팀이 한국에 중기부 초청으로 내한했을 때 사진은 못 찍었지만 샘 알트만이랑 악수를 했었는데 내가 월드코인 2번째로 홍채찍은 한국인이라고 자랑했었다 )
Dune Analytics와 같은 온체인 데이터 서비스는 SQL을 다룰 수 있어야 하는데 이를 자연어로 짤 수 있도록 도와주는 서비스였다. 이 외에도 SojuDAO에서 운영하는 해커하우스에 방문해서 말레이시아 지역에서 2024년 데브콘 운영을 준비하는 친구들과 시간을 보냈다. 한국인 21살 출신으로 학교를 거의 자퇴하다시피 하며 활발히 Starknet 진영에서 활동하고 있는 가영이도 오랜만에 만날 수 있었다. Innoco라고 하는 SF 지역에서 대학생 친구들이 활발하게 활동하는 DAO에서도 해커하우스를 2일 정도 사용했는데, 이전에 내가 알고 있던 친구인 Shriank의 동생인 Rishank를 소개받았다.
Rishank는 이후에 대학 지원 이후 한국에 방문하고 싶다고 해서 양재에 있는 우리 집에서 약 1달 동안 머물면서 같이 에버랜드도 돌아다니고 한국을 소개해주었다. Rishank가 다니고 있는 회사는 논스의 코파운더인 시은이 형이 개인적으로 투자했던 곳이었기 때문에 논스에 지원할 수 있었고 나의 추천과 함께 논스 2호점에 입주하게 되었다. Rishank와 많이 놀아주었던 의준이에게도 고맙다.
8월에 있었던 스탠포드 대학교에서의 일주일간의 외유는 사이오닉 팀에 조인하기 전에 마지막으로 블록체인 업계와 인사하는 기분으로 갔다. 아무래도 당분간은 보지 못할 것 같았기 때문이다. ( 왜 크립토 업계를 떠나게 되었는지는 아래 나가며에 자세하게 그 이유를 서술해두었다 ) Starknet의 해커하우스에 지원을 해서 합격하였기 때문에 스타크넷에 대해서 조금 더 공부할 목적으로 갔다. 그 외에도 EO의 팔로알토 오피스와 링글 이승훈 대표님을 만나 팔로알토와 실리콘밸리에서의 삶에 대하여 커피챗을 나누었다. 당시 링글 이승훈 대표님이 나와 만나시고 작성한 브런치 글이 있다. https://brunch.co.kr/@seunghoon82/282
개인적으로 블록체인 분야에서는 영지식 증명 분야에 관심있게 보고 있다. 아직 딥러닝의 모멘트가 오지 않았다는 판단으로 ZK는 이전의 ResNet 수준이라고 판단하고 직접 뛰어들기 보다는 Stark 진영과 이에 맞서는 Snark 진영의 경쟁 구도를 외부인의 시선으로 관망을 하고 있다. 스탠포드 대강의실에서 plonky2와 a16z의 lasso, zolt 등의 도구에 대해 직접 핸즈온을 해보고 미션 단위를 제출받기도 했다. 스탠포드에 머물면서 그 동안 트위터와 텔레그램으로만 인사했던 친구들을 직접 얼굴을 마주하고 인사할 수 있어서 행복했던 순간들로 기억난다. ( 위의 사진에 있는 kelly라는 친구는 할머니가 한국인 출신은 혼혈 미국인이고 올해 결혼을 했다 )
특히 감사를 표하고 싶은 것은 해치랩스의 rkm과 함께 외유를 즐길 수 있었다는 것이었다. rkm은 웹3 업계에서 ZK Rust circuit 쪽 오디팅을 전문적으로 하는 친구인데, 이더리움 진영의 유명한 L2 여러 개를 오디팅하는 등 업계에 정평이 난 친구이다. 그 친구가 열심히 해설을 해주고 친구들도 소개해준 덕분에 ZK 쪽에서 활동하는 친구들을 많이 만나고 누가 snark/stark 진영에서의 keyman인지를 파악할 수 있었다. keyman을 파악하는 것이 중요한 이유는 나중에 내가 해당 분야에 다시 뛰어들고 싶다고 했을 때 누구의 트위터나 github을 먼저 팔로우하면 업계의 트렌드를 빨리 따라잡을 지 파악이 되기 때문에 누가 주요한 연구자고 엔지니어인지를 아는 것이 매우매우 중요하다.
텔레그램을 통해서 한국에 왔는데 친구가 없어보이는 어느 워싱턴 대학 1학년 친구를 2일 정도 집에 데려와 머물게 한 적이 있었는데 여자친구에게 영어 연습 등의 기회가 되었기 때문이다. 나도 워싱턴 대학에 다니던 그 친구가 남베트남에서 이민을 간 1세대 부모 밑에서 자란 친구였는데 동양인으로서 미국의 사립고등학교에 다니는 이야기 등에 대해 상세하게 듣고 토론을 나눌 수 있었다. 이러한 어떤 문화적 다양성을 확보하는 것은 더 넓은 세상에서 활동할 수 있는 여력이 되기 때문에 사적인 생활의 여유에서는 이러한 한국인이 아닌 친구들과 함께 더 많은 시간을 보내는 것이 중요하겠다고 느꼈다.
내년에는 회사 일 덕분에 일본으로 나갈 일이 많을 것으로 보인다. 지금까지 쌓아왔던 소셜 캐피탈 중에 일본 친구들과 더 많은 커뮤니케이션을 하도록 노력하고, 가족들 중에 일본어를 하는 분이 있어서 주당 1회 과외를 해달라고 했다. 그리고 양재의 집에 외국인 친구를 더 많이 들여야겠다고 생각했다. 일본 친구들을 어떻게든 만들어서 집에 들이도록 하면 해당 언어와 문화에 접근하는데 도움이 될 것이다. 한국 밖에서의 생활을 만들고 싶은 나의 소망과 일로서의 요구가 맞아들 수 있다는 것은 상당한 축복이다.
나는 올해 8월까지 블록체인 밸리데이터 회사에 있다가 9월 이후부터 ML/AI를 하는 회사로 옮겨갔다. 어떤 사람들은 나보고 블록체인 업계를 또 떠났냐 (이를 소위 탈블이라고 부른다) 라고 묻지만 나는 더 이상 어떤 업계를 떠나겠다는 생각을 하지 않는다. 업계가 중요한 것이 아니고 내가 어떤 엔지니어가 되겠는가, 어떤 문제 해결사로서 살아가겠느냐를 고민하는 것이 더 중요하다. 부스트캠프의 스태프로서 처음 개발을 시작했을 22살에는 내가 해결할 수 있는 역량 범위를 넓히는 것이 나의 목표라고 말했다.
이는 지금도 다르지 않다. 물론 때에 따라 핫한 기술이 있고 프레임워크 또는 분야가 있을 수 있다. 하지만 그럼에도 불구하고 가장 중요한 것은 어떤 핵심 기술을 비즈니스의 측면으로 가장 먼저 끌어들이고 가장 먼저 부딪히면서 시행착오를 이길 수 있느냐라는 점이 중요하다. 나는 여전히 블록체인의 네러티브인 탈중앙화가 인터넷의 처음 시작의 목표에 부합하는 지점으로서 다가간다고 생각한다. 예를 들어 ML/AI는 컴퓨팅 자원을 최대한 투입하면서 최대의 성능을 끌어내는데에 집중해왔다. 그런데 블록체인으로 상정되는 암호학 분야는 컴퓨팅 자원을 최소한으로 투입하면서 최대의 성능을 끌어내는데 집중한다. 이러한 상극화된 접근은 기술의 목적이 무엇인가에 달린다. ML/AI는 지금까지 엔지니어링보다는 리서치 영역에서 AGI를 향해 달려왔고 블록체인 역시 엔지니어링 영역보다는 리서치 영역에서 개인의 프라이버시 보호와 멈추지 않는 코드라는 크립토 펑크의 정신을 구현해왔기 때문이다.
모든 기술의 코어 연구는 당연히 존중받아야 하고 그 자체로 의미가 있다고 생각한다. 하지만 해당 기술을 활용하여 어떤 비즈니스적 가치를 만드는 것은 다른 일이다. 나는 코어 기술의 발전상을 따라잡고 이해하는 것에 매우 흥미를 느끼지만 새로운 기술을 연구하는 것에 대해서는 상당히 불리한 싸움터라고 생각한다. 예를 들어 백준에서 올타임 1등을 차지하는 koosaga는 나랑 동갑인데 이번에 서울대 컴공을 드디어 졸업하고 MIT로 석박사 통합과정을 하러 갔다. 그 친구는 컴파일러를 연구하는 친구인데, 그러한 수준이 되는 친구를 블록체인 업계에서 정말 많이 만났다. 내가 ‘금두뇌’ 들을 이길 수 있나? 절대 그렇지 않다.
하지만 내가 가지고 있는 것은 어떤 메타인지 능력의 발휘와 소셜 캐피탈의 활용, 영어와 중국어를 바탕으로 한 다국어 구사 능력, 작은 규모의 프로젝트를 빠르게 만들어서 검증하는 능력, 다른 사람들에게 지식을 설파하고 피드백을 받으면서 빠르게 개선해가나는 능력 등이 더욱 강력하다고 생각한다. 기술에 대한 흥미와 코딩 능력은 이를 뒷받침하는 강력한 도구이자 수단이다. 따라서 나는 기술 중심의 엔지니어라기 보다는 얼리 스테이지의 기술을 빠르게 엔지니어링의 입장으로 재해석해서 비즈니스 밸류를 초기 단계에서 검증할 수 있는 에니지어로서 정의할 수 있지 않을까 생각했다.
그러한 점에서 AI/ML 업계는 이제 리서치 영역을 넘어서 엔지니어링 영역으로 아트를 만들 수 있는 지점에 도달했다고 생각한다. LLM은 분명 AI 업계에서 빅뱅이며 이 시점에서 엔지니어링 영역으로 빠르게 재해석할 수 있어야만 기술의 발전이 모든 사람들의 생산성 증진에 도움이 된다. 이는 단순히 허깅페이스에서 리더보드에 점수찍기로 되는 문제가 아니다. 내가 페이스북에 썼듯이 블록체인 업계가 지금까지 비즈니스화에 실패한 가장 큰 이유는 TPS에 대한 집착(2018년) 또는 scalabiility에 대한 과도한 집착(2023년) 에 있다고 생각한다. 리테일 입장에서 어떤 방식으로든 사용자의 문제를 해결하는데 집중하는 것이 매우매우 필요한 접근법이라는 것을 블록체인 업계를 통해 느낄 수 있었다.
따라서 나는 블록체인 업계를 떠났냐고 물어보는 사람들에게 다음과 같이 답하고 싶다. 블록체인이 가지고 있는 컴퓨팅 연산의 분산화는 어떤 당위성 측면에서 의미가 있고 실제로 여러 코어 기술을 연구하는 친구들을 존경하지만 아직 그들은 리서치 단계에 있고 이를 프로덕션으로 활용하기에는 많은 발전이 필요하다. ZK는 여전히 뒷단의 proving scheme의 대세가 계속 바뀌고 있고 (snark vs stark) 어떤 것이 유리할지는 아직 모르지만 ML 업계의 발전 영향으로 GPU 가속 등이 제기되는 등 여전히 불안정한 상태에 있다. 현재 유한체 환경에서 연산이 가능한 Snark를 고려해봤을 때 여전히 개 고양이를 구분하던 ResNet의 수준에 머물러 있고 딥러닝 모멘트는 아직 오지 않았다고 생각한다.
하지만 ML/AI 업계는 여전히 리서치가 활발히 이루어지고 있지만 현재 존재하는 모델의 단계를 엔지니어링의 입장에서 확장하여 비즈니스적인 밸류를 줄 수 있다고 생각했다. AI로 의미있는 생산성을 확보할 수 있다는 것은 내가 매일과 같이 GitHub Copilot 제품을 사용하고 ChatGPT 없이는 코딩할 수 없는 상태에 있음을 보면 증명할 수 있다. 이제 리서치보다는 엔지니어링으로 기여할 수 있다고 생각하고, 따라서 얼리 스테이지의 리서치 또는 엔지니어링의 접근을 내가 그 누구보다 빠르게 캐치하고 팔로우해서 이를 실제 프로덕트까지 scaleup 할 수 있도록 돕겠다고 하는 나의 목표에 부합할 수 있다고 생각했다.
그리고 블록체인 + AI의 네러티브는 AI가 인간 생산성에 미치는 영향이 커질 수록 제기되는 프라이버시와 개인 사생활 문제에 있어서 유의미한 지점이 될 것이라고 생각한다. 예를 들어서 특정한 모델을 사용해서 인퍼런스를 했다고 했을 때 정말 서비스 프로바이더가 유저에게 약속한 대로 인퍼런스를 했는지 circuit으로 만들어서 증명할 수 있다 (이는 ZKML과 같은 서비스 단위 혹은 LLM 인퍼런스 연구를 하는 snark/stark 팀들이 몇몇 있지만 아직은 리서치 단계 혹은 PoC 수준이다) 혹은 트레이닝을 할 때 동형 암호를 도입할 수도 있다.
이러한 접근과 다양한 융합의 사고는 모든 업계에서 외부인의 시각으로 보았을 때만 가능하다. 누군가는 특정한 업계에서 100%가 되어 전문가가 되겠다는 생각을 하지만, 나는 정말 다양한 분야에서 70% 정도의 역량만을 가진채 다양한 분야를 한번 동시에 보겠다는 생각을 한다. 해당 분야에서 트렌드를 주도하는 키맨은 누구인지 파악하고, 트렌드가 무엇인지를 알면 내가 특정 분야에 정말 빠르게 온보딩하거나 다양한 복수의 분야를 융합할 수 있다. 그러한 인재가 된다면 내가 잘하는 전문가들을 100% 닮아야 한다는 부담감도 없으면서도 동시에 비즈니스 밸류를 줄 수 있는, 정말 재미있는 일을 할 수 있는 사람이 될 것이라고 생각한다.
새로운 한 해는 아트 오브 레스, 즉 덜 일하면서 더 많은 퍼포먼스를 가져가는 것이 중요하다. 전혀 낯선 분야, 전혀 낯선 단어, 학습해야 할 분야는 매우 넓고 깊기 때문에 효율적으로 에너지를 사용하는 것이 중요하다. 따라서 불필요한 곳에 힘을 쏟기 보다는 내가 시간을 쏟는 회사 안에서 탐구할 수 있는 주제를 주도적으로 찾아 수렴하는 것이 중요하겠다. 물론 이를 발산하는 기회를 외부 커뮤니티 등에서 발표와 오픈소스 등의 형식으로 만드는 것도 때로는 필요한 접근이다.
따라서 내가 올해 비전을 3가지를 세웠다. 목표는 분기마다 계속 수정하면서 나아갈 생각이다. 2024년 12월에 나의 야생학습이라는 주제에 대해서 AC2든 어디든 공유하는 시간을 가진다. 이렇게 공유하는 시간이 있다는 것은 내가 야생학습에 성공했고 동료들로부터 인정받는 순간 몇 개를 캡쳐할 수 있다는 뜻이다. 외부적으로는 캐글이나 HF나 이런 곳에서 뭔가 성과를 만들었을 수도 있다.
조직적으로 문화를 셋업하는 것에 주도적인 역할을 수행한다. 초기 스타트업에서 내가 할 수 있는 좋은 기회라고 생각하고 이러한 점에서 외부 메타인지를 계속 하기 위해 사비를 들여 AC2 Level 2를 신청한 이유가 되기도 한다.
다이어트를 -10kg를 한다. 내가 다이어트를 이야기하는 이유는 나에 대해서 신경쓰는 시간을 많이 가졌을 때 가장 두드러지는 결과가 될 것이라고 생각하기 때문이다. 스스로를 돌아보는 지점을 무조건 만들어야 내가 주어진 일도 잘하고 개인적인 행복감도 올릴 수 있다.
이제 나도 나이가 적은 편이 아니기 때문에 (26살) 유의미한 성과를 비즈니스 단위에서 만들어내는 경험이 무조건 필요하다고 생각한다. 그래서 나에게 주어진 본업을 기반으로 성과를 만드는 일에 포커싱을 해보려고 한다. 꼭 기술적이 아니더라도 비즈니스의 측면이나 조직문화의 측면에서 문제를 개선하는 Keyman 으로서의 역할을 해나가보겠다. 그 과정에서 끊임없는 Essence Of Agility와 Reflection in Action을 함께 수행할 수 있는 방법을 고민하는 것이 올해를 관통하는 비전이라고 할 수 있다.
1. 코드스쿼드 마스터즈 코스 리뷰어: 온라인 환경에서 자바 개발자를 희망하는 신입 대상으로 교육 리뷰어를 2년 연속으로 진행함. 나에게 도움이 되었던 것은 초기 상대의 코드를 리뷰하는데 신입들이 카프카나 레디스 같은 신입 입장에서 고급(?)스러운 라이브러리를 많이 사용해서 나도 리뷰하면서 관련 라이브러리의 여러 조언들을 찾아봤던 기억. 카프라라고 하면 예를 들어 이동진님의 저서를 많이 참고하였음. 하지만 신입들이 Microservice에 대한 어떠한 강박감이 있어서 이를 해결해주려고 노력했음. 그런데 별로 통한 눈치는 아니었음. 인플루엔서라는 책에 따르면 내가 자그마한 상황을 설정해서 그 설정된 상황을 바탕으로 멘티들을 설득해야함. AC2를 이제 듣고 있으니 코칭을 어떻게 하면 잘 할 수 있을까? 를 2024년 코드스쿼드 마스터즈 코스 과정을 통해서 수련할 예정.
2. 여러 스터디들: 성공했던 스터디는 가시다님의 쿠버네티스 스터디. 덕분에 새로운 회사에 입사해서 빠르게 적응할 수 있었음. 미리 배워두어서 다행이고 앞으로도 가시다님 스터디는 계속 참여할 예정. 매주 1개의 기술 아티클을 작성하는 것이 부담스러웠으나 결론적으로는 다시 살펴볼 수 있도록 하는 기술 복습자료로서 사용될 수 있어서 매우 의미가 깊었음. 하지만 내가 주도했던 두 개의 스터디 - SOPT에서의 GPT 스터디와 컴퓨터 구조론 스터디는 각각 실패로 끝났다. 물론 GPT 스터디는 잘 운영되었고 내가 github까지 샘플 레포지토리로 만들어서 제공했지만 참여율이 높지는 않았다. 그리고 이후 진행되었던 Langchain 번역 작업도 동력이 떨어져 진행하지 않았는데 그 이유는 직접 핸즈온해서 코딩하는게 아니니까 사람들의 참여도와 재미가 떨어졌기 때문이다. 컴퓨터 구조론 역시 재미있는 주제였지만 강제성을 충분히 부여하지 않았기 때문에 사람들이 이탈하고 말았다. 그냥 같이 모여서 스터디해봐요 보다는 누군가가 주도하는 스터디가 원활하게 진행될 수 있다는 것을 알았다.