WhatsApp으로 신규 사용자 온보딩과 생성하기
인터넷 너머에서 비동기로 사용자를 온보딩하고 새 계정을 만들어, 동시에 여러 사용자를 처리할 수 있게 만드는 일은 결국 이런 문제였다. 내가 이걸 왜 붙잡고 있었지? 이건 웹 개발자가 할 일인데. 나는 그냥 데이터나 돌리고 모델을 만들고 싶은 사람이다. 그래도 GPT-4가 붙은 Cursor로 끝까지 풀어낸 건 다행이다.
조카가 자라서 이렇게 말할 날을 꽤 기다리고 있다. 아니, 여러분은 그렇게 오래 멍청한 소프트웨어와 서비스를 어떻게 참고 살았어요? 그러니까, 회사들은 왜 사람을 짜증의 늪으로 끌어들이는 게 유일한 목적인 듯한 챗봇과, 다시는 전화할 생각을 못 하게 만드는 자동응답 녹음을 깔아두는 걸까? 꽤 괜찮은 답을 바로 돌려주는 지능형 시스템을 한 번 맛보고 나면, 그 뒤로 만나는 모든 인간 상담원을 그것과 비교하지 않기가 어렵다.
한동안 코딩 흐름을 어떻게든 더 낫게 만들려고 애써왔다. 마지못해 쓰던 기본값은 ChatGPT 창을 Visual Studio Code 옆에 나란히 띄워두는 방식이었는데, 세상에서 제일 믿음직한 물건은 아니다. 같은 말을 반복해야 하는 것도 싫고, A.I.가 내 맥락을 잊어버리는 것도 싫다. 게으름을 피울 때 머리를 쥐어뜯을지 키보드를 두드릴지 고민하면 대개 후자로 간다. 대화 하나가 길어지면 엄청 느려지고, UI/소비자용 화면 쪽에서는 가끔 별 이상한 오류가 튀어나오며, 무엇보다 최악은 사용량 제한이다. 아, 그 사용량 제한. 그래서 더 나은 대안을 찾고 있었다.
GitHub Copilot은 건너뛰었다. 온라인에서 추천이 그리 많아 보이지 않았고, 내가 정말 마음에 들어 하던 코드베이스와의 채팅도 안 되는 것 같았다. 그래서 Gemini Advanced, LM Studio의 로컬 모델 몇 가지, VSCode에 Continue를 붙이는 방식 등을 써봤지만 내 기준으로는 여전히 GPT-4의 성능이 제일 좋았다. Continue와 LM Studio 조합은 너무 굼떠서 결국 그리 많이 쓰지도 않았다… 그러다 최근에 간 행사에서 한 발표자가 Cursor를 언급했다. 이름은 들어봤지만 아직 써보지 않았던 것 중 하나라 한번 해보기로 했고, 그 과정에서 미래의 소프트웨어와 서비스가 어떻게 만들어져야 하는지 아주 잠깐 엿본 것 같다. 데이터를 일급 시민으로 다루는, 처음부터 A.I.를 품은 제품 말이다. 기존 작업 흐름에 억지로 끼워 맞추는 것보다 훨씬 더 자연스럽게 느껴지고 실제로도 더 잘 돌아간다.
Cursor에게 공을 돌려야겠다. 덕분에 Firestore와 FastAPI를 바탕으로 한 상태 없는 설계로, WhatsApp에서 온보딩과 사용자 생성 기능을 마침내 완성했다. 밑바탕의 모델은 같았지만, 내 기본 세팅으로는 문제를 푸는 과정이 고통스러울 정도였고 아예 포기하려던 참이었다. Cursor에서는 되는데 내가 전에 써본 다른 도구와 과정에서는 막다른 길로 갔던 이유로 보이는, 꽤 A.I. 네이티브답게 느껴진 지점들이 몇 가지 있었다.
-
ReAct로 디버깅하기
- 내게는 이게 단번에 마음을 굳히게 한 핵심 기능이었다. A.I.가 생각하고, 행동하고, 관찰하는 과정을 실시간으로 볼 수 있다는 것만으로도 내 학습에는 엄청난 힘이 있었다. 우리가 A.I.를 직접 쓸 때는 대개 우리 자신의 지식과 상상력에 묶인다. 그래서 A.I.가 지시 한 조각을 받아 해법의 공간을 훑어가는 모습을 보는 일은 정말 흥미롭고, 내가 소프트웨어 엔지니어링을 하려면 어떤 사고 모델과 기본 단위가 필요한지 메타 학습하는 데도 아주 좋다.
-
코드베이스 색인화
-
맥락 안에서 생성하고 교체하기
-
긴 텍스트 조각의 절단과 처리
-
인터넷 접근으로 최신 코드 라이브러리 활용하기
데이터를 일급 시민으로 다루며 A.I.를 처음부터 품은 제품과 경험을 만드는 일은, 내게는 소프트웨어가 세상을 집어삼킨다는 말에 병렬화 가능한 스테로이드를 먹이고 거기에 데이터를 지수승으로 곱한 느낌이다. 그래서 그렇게 오랫동안 모든 게 느리고 불가능했는지도 모르겠다. 그러다 갑자기 모든 것이, 모든 곳에서, 한꺼번에 벌어진다. 흥미로운 건 이 중 상당수가 오래된 아키텍처이고 수십 년 전의 아이디어라는 점이다. 이제야 그걸 돌릴 만큼의 컴퓨팅 자원과 인터넷 규모의 데이터가 생겼을 뿐이다. 기반, 구성 요소, 데이터, 인프라는 전부 Google 안에 있었는데도 지금까지 대중의 인식에서는 이렇게 뒤처진다니. 완전히 새로운 패러다임이라서, 나이 든 사람도 젊은 사람도 미래를 향해 만들면서 배우는 이상한 신세계다. 모든 것이 너무 빠르게 움직이고, 결국 X -> ŷ 사이에 층이 몇 개 끼어 있느냐의 문제처럼 보인다. 나는 그게 정말, 정말 매혹적이다. 4월에는 티베트에서 확률, 통계, 그리고 그냥 A.I.와 꽤 오래 앉아 있고 싶다.
오래된 습관은 쉽게 죽지 않으니, 오늘날의 거인들 가운데 많은 곳은 자기 시스템에 A.I.를 덧칠하며 오래오래 번성할 거라고 본다. 그래도 나는 데이터를 일급 시민으로 다루는 A.I. 네이티브 세계에서 살 날을 기다릴 수가 없다. 그 기본 단위가 가능해지는 순간, 사용자 데이터가 많아질수록 더 좋아지는 소프트웨어나 서비스를 만들지 않는 건 그냥 바보 같은 일 아닌가? 이 A.I. 콜드콜 에이전트와 음악 만들기는 정말 미쳤다. 모두가 잊어버려서 아마 잘 안 됐나 보다 싶은, 미용실 예약을 잡아준다는 Google의 A.I. 어시스턴트가 엊그제 일처럼 느껴진다. 스마트폰은 우리가 정보를 소비하는 방식을 대체로 크게 바꿨지만, 대부분의 일은 여전히 어떤 인간이 입력을 처리하고, 자기 머릿속 컴퓨터에 통과시킨 뒤, 끝에서 출력을 내놓는 방식이었다. 인류 역사상 처음으로, 그 모든 비즈니스 로직을 인간 노동이라는 몸을 가진 컴퓨터에 새겨 넣는 대신 훨씬 더 확장 가능하고 재현 가능한 컴퓨팅 자원을 활용할 수 있게 됐다. 어쩌면 이걸 곱씹어볼 만하다. 이 현상에 이름이 있는지는 모르겠지만, 우리는 기술에 대해서는 기대치를 아주 높게 잡고, 인간에 대해서는 늘 스스로를 봐주는 것 같다. 오늘 하루가 안 좋았어. 잠을 충분히 못 잤어. 상황이 힘들어. 우리는 인생을 어떻게 살아야 할지 모르니 대충 버틴다. 그런데 동시에 기술에는 한결같이, 끈질기게, 그냥 잘 작동하길 기대한다. 그것 자체는 완전히 합리적이다. 다만 소프트웨어를 쓰고, 소프트웨어가 구동하는 서비스를 만드는 일이 점점 나에게 이런 질문을 던지게 만든다. 이 도구들을 규모 있게 제대로 다루려면, 밑바닥의 작동 원리를 대체 얼마나 알아야 할까?
나는 갈수록 적절한 기술 전문성의 조합이 결정적으로 중요해질 거라고 강하게 의심한다. 여기서 말하는 기술 전문성이란, 특히 경쟁 우위를 위해 지능을 활용하는 사업을 하고 있다면 이런 시스템에 이를 박고 파고들어 전문가 수준으로 추론할 수 있는 능력이다. 다만 기계가 데이터에서 패턴을 배우고 예측한다는 정도를 알면 충분한지, 아니면 필요할 때 직접 손실 함수를 쓸 수 있어야 하는지는 아직 잘 모르겠다. 유연한 함수 형태, 손실 최소화, 역전파를 모른 채로 이 물건들이 왜 이렇게 지독하게 좋은 예측 기계인지에 대해 좋은 직관을 어떻게 만들 수 있겠는가 싶기 때문이다. 물론 이것들을 안다고 해서 세계와 진보의 방향에 대해 더 나은 예측 모델을 세우는 능력으로 곧장 이어지는 것도 아니다. 그러니 직접 알아야 하거나, 그 역할을 맡을 누군가를 믿어야 할 텐데, 아마 그 누군가를 두고 세계에서 가장 큰 회사들과 싸우게 될 것이다. 여기에 커뮤니케이션과 리더십 능력까지 필요하다. 결국 추론과 비판적 사고는 당분간 사라질 일이 없다는 뜻이다.
결국 하루가 끝날 때 생각해보면, 바다 깊숙이 깔린 케이블을 타고 오가는 이 비트와 바이트들이 이렇게 많은 것을 전달하고, 이렇게 많은 일을 가능하게 하며, 정부와 제도가 때때로 실패하는 곳에서도 그냥 작동한다는 건 약간의 기적 아닌가. 경제학과 자본과 컴퓨팅 자원이 한데 만났을 때의 아름다움이기도 하고. 물론 기술이 만병통치약이라거나 이 산업에 문제가 없다는 말은 아니다. 접근성 문제에 대해서는 여기에서 이야기한 적이 있다. 다만 지금 이 짧은 순간만큼은 A.I.의 따뜻한 빛에 잠깐 몸을 담그고 싶다. :)
나도 내 시간을 들여 이 공간에서 가치 있는 무언가를 만들고 싶다. 인생에는 그런 일이 있다. 잘 풀리고 운까지 따라주면 돈을 많이 벌 수도 있고, 안 풀려도 어차피 엄청나게 즐거웠을 테니, 안 할 이유가 뭐가 있나!?
원래 PubPub의 erniesg.pubpub.org/pub/161hmmds에 게시됨.