AI 시대의 코딩과 건축적 사고에 대한 철학적 입문서
들어가며: 코드와 건축, 생각의 구조
필자는 10월 어느날 화창한 오후, 컴퓨터 앞에 앉아 글을 쓰고 있다. 컴퓨터에 작년 10월에 저장했던 사진이 현재의 나를 궁금해 하듯 알림을 보냈다. 나는 "사진"이라고 표시된 폴더 아이콘을 두 번 클릭했다. 이는 그 순간 화면 속에서 문이 열리는 것과 같다. 그 문을 열고 들어가자마자 작년 10월의 추억이 담긴 사진들이 폴더라고 불리우는 아지트 방 벽에 펼쳐졌다. 그 아지트 방안에 있는 자료와 물건들을 우리는 파일이라고 부른다. 그 아지트 방 안의 허름한 벽에는 가족과의 추억이 담긴 사진들이 걸려있고, 그 당시에 작업하던 선반 위에는 가지런히 쌓인 문서들이 보인다. 그런데 다시 보니 이 방안에 문이 여러개 더 있다. 이는 하위 폴더다. 각 하위 폴더는 메인 폴더에서 분리된 작은 방이다. 즉 컴퓨터라는, 크고 넓은 집 안에서 우리는 파일을 여러 폴더에 넣고 필요할 때 문을 하나씩 열고 들어가서 추억을 떠올린다. 기발하게 들릴 수도 있지만, 폴더 아이콘은 물건을 넣을 수 있는 컨테이너이자 방임을 명확하게 암시한다. 우리가 이미 생각하는 방식과 크게 다르지 않다는 것이다. 우리는 일상적인 디지털 생활에서 자신도 모르게 이러한 가상 공간, 가상의 집을 거닐고 있다.
이 첫 번째 아지트 방 폴더에서 머물지 않고 더 샅샅이 살펴보자. 컴퓨터는 실제 집과 마찬가지로 모든 것이 제자리를 차지하고 있다. 비어있으면 허전할 것 같은 벽에는 가족 사진이 걸려 있고 다른 구석에는 작년 휴가에서 찍은 사진이 있다. 그리고 책상에는 작년에 작업하던 자료들이 가지런히 놓여있다. 이처럼 폴더를 여는 이 간단한 행위는 벽돌과 콘크리트가 아닌, 코드와 부품으로 지어진 내 집의 일부분에 들어 온 것 같은 느낌을 준다. 소프트웨어라는 구조는 단순히 사용하는 것이 아니라 이동하고 거주할 수 있는 공간이 될 수 있다는 생각을 해보자. 이 구조가 절대 차갑지 않고, 오히려 따뜻하고 아늑한 공간처럼 느껴졌으면 하는 바람이다.
이제 더 확장하여 또 다른 일상적인 시나리오를 살펴보자. 나는 아지트 방에서 오래된 사진이 거꾸로 걸려있는 것을 발견했다. 그래서 그걸 올바르게 돌려놓려고 했다. 그러나 사진이 벽에 못으로 단단히 박혀 있다. 근데 옆쪽에 레버가 하나 있다. 나는 그것을 당겼다. 그러자 사진이 원래 방향으로 돌아간다. 즉, 집에 내장된 어떤 장치가 레버라는 '회전' 버튼을 클릭함에 따라 사진이 뒤집힌 것이다. 이는 마치 회전 버튼을 클릭하는 것이 비밀스러운 방에서 컴퓨터(집)의 제어판의 레버를 당기는 것과 같다. 그 뒤에서 기어가 돌아가고(코드 실행), 전기가 회로를 통해 흐르는(데이터가 파이프라인을 통해 이동하는) 등 활발한 활동이 시작된다. 순식간에 소프트웨어의 기계가 살아 움직이며 사진을 다시 정렬한다. 사용자가 누른 버튼은 집 벽에 있는 전등 스위치와 비슷하다고도 볼 수 있다. 쉽게 전환할 수 있지만 버튼 뒤에 숨겨진 전체 전기 시스템과 연결되어 작동한다. 이 일상적인 동작은 우리가 화면에서 보는 것 뒤에 구조화된 세계가 있다는 것을 암시한다. 우리는 지금 단계에서는 그 시스템을 모두 이해하려고 하지는 않을 것이다. 그러나 버튼 뒤에 숨겨진 건물의 배선처럼 컴퓨터 프로그램이 느껴진다면 아주 잘 이해하고 있는 것이다.
전등 스위치로 밝기를 조정하거나 문을 열고 다른 폴더라는 방으로 들어가는 등의 그러한 클릭들을 하다 보면 기본적인 질서가 느껴지기 시작한다. 소프트웨어에서 수행하는 각 작업에는 마치 거실과 부엌, 그리고 침실같이 각기 다른 용도의 전용 방처럼, 그 일들이 이루어지는 장소가 있다. 잘 설계된 집에서는 부엌은 요리를 위한 공간이고 침실은 잠을 자는 공간인 것처럼, 소프트웨어에서도 특정 작업(이미지 로드, 편집, 저장)을 처리하는 여러 모듈 또는 섹션이 있다. 이러한 모듈이 직접적으로 보이지는 않지만 우리는 그 배열을 간접적으로 경험할 수 있다. 사진을 찾거나 편집하는 것이 직관적으로 쉬워진 것은 마술이 아니라, 훌륭한 아키텍처 덕분이다. 잘 정돈된 집이나 도시처럼 소프트웨어의 디자인은 사용자가 원하는 경험으로 슬며시 안내한다.
폴더를 여는 것을 방에 들어가는 것처럼, 버튼을 클릭하는 것을 숨겨진 제어판을 조작하는 것처럼, 이러한 간단한 장면을 통해 익숙한 물리적 세계와 보이지 않는 코드의 세계를 연결할 수 있다. 이 첫 단계는 가볍고 생생해야 한다. 추상적인 프로그래밍 아이디어를 구체적인 경험에 기반을 둠으로써 말 그대로 누구나 들어올 수 있는 문을 여는 것이다. 예를 들어, 웹사이트를 탐색하거나 파일을 정리해 본 적이 있다면 이러한 은유에 대한 직관을 이미 가지고 있을 것이다. 웹사이트의 여러 메뉴판들을 한 구역(페이지)에서 다른 구역(페이지)으로 안내하는 도시의 도로 표지판이라고 생각해보자. 또는 스마트폰의 여러 앱이 펼쳐진 홈 화면을, 개인 아파트의 각 각기 다른 목적을 가진 앱이 존재하는 방이라고 생각해 보자. 이러한 비유의 장점은 디지털 세계를 실감나고 친근하게 느낄 수 있다는 것이다.
이 편에서 모든 것을 한 번에 설명하지는 않는다. 대저택을 둘러볼 때 로비를 둘러보는 것부터 시작하듯이, "건축으로서의 코드"라는 거대한 저택에서 접근 가능한 몇 개의 방부터 시작해보자. 이 챕터에서의 목표는 모든 복도를 둘러보며 모든 구조물을 자세히 설명하는 것이 아니라 궁금증을 불러일으키는 것이다. 다른 아이콘과 앱 뒤에 무엇이 숨어 있을까? 이러한 단순한 예시를 넘어 어떻게 코드와 건축은 같은 것일까? 이러한 질문이야말로 바로 우리가 진정으로 자극하고자 하는 호기심일 것이다.
이 매력적이고 흥미로운 출발점에 섰다. 우리는 더 깊이 탐구할 수 있는 길이 열린 것이다. 다음 에피소드(에피소드 2)에서는 이러한 첫 번째 방과 제어판을 넘어 소프트웨어 자체의 웅장한 디자인으로, 여행을 떠날 것이다. 또한 이를 넘어서서 디지털 도시 전체와 우뚝 솟은 고층 빌딩의 코드를 살펴볼 것이다. 디렉토리(폴더)가 어떻게 이웃이 되는지, 소프트웨어 구성 요소가 건물과 다리처럼 어떻게 상호 연결되는지, 심지어 AI 언어 모델과 같은 최신 기술이 끊임없이 확장하는 도시 풍경에서 어떻게 존재하고 또한 모듈식으로 변형 가능한 구조가 되었는지 살펴볼 것이다. 하지만 걱정하지 않아도 된다. 차근차근 길거리를, 복도를 누비다 보면 어느새 디지털 문명의 구조가 한눈에 보일 것이다.
지금은 잠시 시간을 내어 여러분이 매일 하는 간단한 클릭이나 탭에 감사하는 시간을 가져보자. 그 뒤에는 여러분의 탐험을 위해 힘쓴 여러 개발자들이 만든 구조화된 세계가 있다. 코드는 곧 건축이며, 여러분은 방금 정문을 통과했다.
코드와 건축의 세계에 오신 것을 환영합니다.