Jinwoo Jeong About Posts GitHub Bluesky

잠시 잊었던 고유함으로

/ 5min

“이 코드랑 저 코드 중 어떤 게 더 깔끔한가요?”

나는 이런 질문을 꽤 싫어한다. 막 프로그래밍에 입문했을 땐 질문의 의도를 알 수 없어서 짜증이 났고, 우매함의 봉우리를 정복했을 땐 내 밑천을 드러낼까봐 두려웠다. 그리고 지금은, 내가 저것에 답하기 위해 더 많은 질문을 해야 하기 때문에 귀찮아졌다. 유지보수성, 확장성, 유연성, 결합과 응집, 책임, 관심사의 경계, 직교적 설계… O’Reilly의 기라성 같은 베스트셀러부터 인터넷 변방의 우화등선한 구루의 블로그까지 이런 단어들은 “자연법” 같은 것으로 변질된 듯 하다. 저런 질문을 받으면 반드시 되물어야 한다. 하고 싶은게 뭔가요? 답은 그것에 달려있다. 종종 저런 질문은 골든벨 퀴즈마냥 던져져 죽음의 이지선다를 강요하곤 한다.

핵심은 간결하다. 사람이 소프트웨어, 즉 순수 사고의 산물을 이해하고 어루만지기에 너무 멍청한 것이 문제다. 요컨대 인지능력의 한계이다. 자기 주변에서 일어나는 일도 제대로 파악하기 힘들어 하루가 고단한 존재에게 세상의 이치를 일부 떼어 더듬는 공학의 산물은 이해불능의 무언가다. 몇만 줄이 넘어가는 논리 전개의 연속을 손바닥 들여다보듯 훤히 꿰뚫기엔 나의 작은 뇌가 참 안타까운 것이다. 그래서 우리는 대화의 도구를 만들었다. 딸랑 몇백 줄을 간신히 채우던 앙증맞은 터미널 프로그램에서 전세계를 움직이는 인프라로 오기까지 시대는 너무나 빠르게 변했다. 하지만 그것을 만든 인간의 진화는 보잘 것 없었다. 추상화. 인터페이스. 레이어링. 이것들은 모두 제약을 통한 자유다.

첫 번째 시스템

엉망진창이 된 부엌에서 파인다이닝이 나오는 것은 어불성설이다. 수저 하나만 흐트러져도 yelp에 1점이 박히는 살벌한 시장에서 살아남기 위해선 실수를 용납하지 않는 구조가 필요하다. 사람이 모든 걸 동시에 이해한 채로 모든 일을 동시에 수행할 수 없기에, 규칙과 제약이 도입된다. 하부 구조를 은닉하고 상부 구조를 열어둔다. 모르는 것을 모른 채로 두어도 그 위에서 뛰어놀 수 있는 체계가 완성된다. 직교적 설계란 그런 것이다. 사람은 바보니까 안전한 울타리를 쳐준다. 그 안에서 어떤 사고를 치더라도 오염물이 새어나오지 못하게 만든다. 관심사를 분리한다는 것은, 한 번에 하나의 문제만 풀도록 만든다는 것이다. 수정에 대한 내결함성을 갖는 가장 직관적인 접근은 수정의 규모를 의도의 규모와 비례하도록 통제하는 것이다. 한 번에 여러 개의 문제를 풀면 인간은 필연적으로 “의도치 않은” 실수를 하게 되어 있으니까. 그건 의지나 훈련의 문제가 아니라 “언제까지 실수하지 않고 버틸 것인가”의 문제가 된다. 바빌론의 탑을 그리스 광장의 아고라 식으로 지을 수는 없는 것이다. 역할을 나누고, 책임을 분배하고, 돌을 나르는 사람, 조감을 보는 사람, 기반을 다지는 사람, 페인트를 칠하는 사람이 모두 쪼개진다.

두 번째 시스템?

허나 “시스템”을 설계하는 것이 단지 “인지능력의 한계”에서만 도출되지는 않는다. 어떤 시스템은 필연적이다. 이는 인간의 한계에 대한 더욱 본질적인 것에서 기원한다. 우리가 사회적 동물이라는 사실이다. <유년기의 끝>이나 <엔드 오브 에반게리온>처럼 모두가 모두를 완벽하게 이해하고 인식하는 차원은 아직 우리에게 열리지 않았다(열릴 수 있는지는 차치하고). 단일한 인간이 가진 내면의 복잡성, 그 안의 허영심과 불안함, 그리고 그런 인간이 80억 명 모인 행성에서 세워진 문명은 그 자체로 더 이상 희석될 수 없는 복잡성을 갖는다. 사는 도시가 다르며, 필요한 물자가 다르다. 그게 바로 진짜 시스템, 혹은 “문제”다. 집단, 즉 국가, 도시, 집회, 친우, 그런 것들이 인간이 필연적으로 가진 시스템이다. 우린 작은 생명체들이니까. 그것들이 뒤엉켜서 정보의 교류를 이룩한다. 인터넷의 발달로 서울에서 우루과이로 문자를 보내는 것 쯤은 갓난아기도 할 수 있는 일이 되었지만, 여전히 우리가 살아가며 부대끼는 인간이란 반경 십수키로미터 안에서 모조리 셀 수 있다는 사실은 변하지 않았다. 그 편협함이, 그 비좁음이 시스템을 도출한다. 공통 문제를 라이브러리로 만들어 배포하고, SaaS 프로그램이 불티나듯 팔리고, API와 SDK가 하루에도 몇십개씩 쏟아진다. 정보를 가진 자와 정보를 필요로 하는 자, 서버와 클라이언트라는 구조는 사라지지 않을 것이다.

생존 방식과 존재 방식은 다른 층위의 문제이기에, 이 시스템은 첫 번째 시스템과 별도로 존재할 것이라 생각한다. 다만 첫 번째 시스템이 이 두 번째 시스템으로부터 기인했다는 것은 분명해 보인다. 인지가 필요했던 것은 미지의 대상이 존재했기 때문이고, 인지의 한계는 태생적인 우리의 “작음”에서 왔을 테니까.

소거

LLM이 해낸 것은 우리가 이룩한 많은 것들이 사실 패턴 인식이었다는 것을 밝힌 것이다. 탁월한 미감은 재능이 아닌 인과였을 것이다. 훌륭한 것들, 실리콘밸리의 태동기, 바우하우스 근처의 고향 따위에 둘러싸여 자란 생의 귀납일 뿐이다. 역사를 바꾼 극소수의 돌연변이를 제외하고, 보편한 유능함은 대체불가능한 독창성이라기보다 운 좋게 정보가 고인 위치였고, 학습 가능한 정보들로 해제될 수 있다. 전문화가 기댄 것은 그저 학습력을 지닌 네트워크 모델이 10달을 잉태하고 20년을 교육시켜야 쓸만해진다는 동물적 한계였다.

인공지능은 첫 번째 시스템에 정면으로 도전한다. 문명이 가진 복잡성은 천장이 있다. 인간 내면의 복잡성에 천장이 있고, 인구 수는 무한대가 아니기 때문이다. 내가 처한 환경에서 생존하기 위해 수집해야 하는 정보의 양은 유한하다. 문제는 그것이 인간의 처리 능력보단 아득히 높았기 때문에 우리는 연대해야 했다. 조직을 꾸리고, 전문가를 양성하고, 커뮤니케이션 스킬을 배웠다. 문제를 모아 더 큰 문제로 정의하고, 다시 재분배한 것이다. 인공지능의 유사 무한대에 가까운, 천장이 아득히 높아 딱히 당장 문제가 되지 않는 것 같은 처리능력은 이런 구조에 의문을 품게 만든다. 전지전능에 가까운 힘을 손에 넣는다면 연대는 필요한 것인가? 신은 협력을 필요로 하는가? 코드 퀄리티란 의미가 있는 것인가?

나는 회사에서 동료와 티타임을 하다 그런 말을 한 적이 있다. 솔직히, 컴파일러가 필요한 것이냐고. 여전히 바이너리에 대한 학습량은 부족하기 때문에 LLM이 한땀한땀 바이트를 찍어내는 것은 아직 기대에 미치지 못하겠지만, 고급 언어를 만들어내야 했던 이유가 “기계어로 사이버펑크 2077을 만들기엔 우리가 너무 멍청하기 때문”이었다면 컴파일러는 그저 “첫 번째 시스템”이 된다. 하부 구조를 은닉하고 상부 구조의 자유를 제공했던. 허풍이 많아서 별로 좋아하는 사람은 아니지만 일론 머스크가 “프로그래밍의 시대가 끝날 것이고, 인공지능이 즉시 프로그램을 생성할 것이다”라고 공언한 것을 나중에 알고 상당히 즐거웠다. 그 말에 전적으로 동의한다. 언제가 될 지는 모르겠지만.

당연스럽게 나오는 질문도 있다. 테스트 코드의 역설이기도 하다. Vibe Coding으로 만들어진 물건도 어떻게든 검증은 되어야 한다. 기준을 충족하는지. 검증을 위한 수단을 어떻게 검증할 것인가. 바이너리를 찍어내든 소스코드를 양산하든 만들어진 무언가는 불완전한 우리 세상에서 우리와 상호작용해야 하고, 그것을 받아들일지는 전적으로 우리에게 권리가 주어져 있으므로 대답을 내놓아야 한다. 그런 “납득”이나 “수용”은 뗀석기를 만들던 시절부터 FSD로 왈가왈부하는 지금까지 우리가 늘 갖고 있던 것일 뿐이다. 단지 달라진 것은 이제껏 본 적 없는 속도의 생산성이고, 내 손을 놓쳐 흐르는 미검증의 영역이 너무 커보이기 때문에 불안해하는 것 같다. 관점을 달리 해보면 이는 Hit와 Miss 양 쪽의 증폭일 뿐, 비율이 달라지는 문제는 아닐 것이다. 유능한 엔지니어들이 모인 팀에서도 버그는 늘 발생했다.


지적 능력은 더 이상 인간에게 필요하지 않은 일이 될 것이다. 소크라테스가 산파술로 인간의 진리에 다가서는 일이 다리를 짓고 도로를 까는 일과는 격이 다른 것으로 취급되었던 때처럼, 인간은 다시 진리의 문 앞에 설 것이다. 나는 염세적인 인간이라 그 진리라는 것이 최고선 따위의 따뜻한 무언가라 생각하지는 않는다. 거기엔 차라리 사치나 탐욕과 같은, 전지전능을 손에 넣었음에도 여전히 배가 고픈 영혼의 한계가 있을 것 같다. 바빌론의 탑을 세운 것은 공학의 정수가 아닌 신에 대한 모멸과 질투였다. 신이 언어를 갈라 그 시도를 짓뭉개었지만 웬걸, 이제 우리는 협력 따위 하지 않아도 저마다의 탑을 세울 수 있게 된 듯 하다.

어떤 신에게 도전할 지 즐겁게 상상할 시기가 돌아왔다. 니체가 죽인 신, 카뮈가 신음한 신, 비트겐슈타인이 희석한 그 신을. 창업의 시대가 창궐하리라는 예언은 다소 부족하다. 과장과 사치와 진리 탐구라는 소박하고도 웅장한 인간의 오랜 소망이, 목적을 가릴 만큼 비대해진 수단 -시스템- 너머에서 복귀한다는 것이 좀 더 정확한 지적이라고 나는 생각한다. 이미 이 글이 그러고 있듯이. 어릴 적 꿈꿨던 것처럼 만화나 영화 시나리오를 끄적여볼 심산이 든다.