어릴 적 판타지 소설을 읽으며 이런 상상을 했다.
"주문 한 마디로 불을 만들고, 공간을 열고, 세상을 바꾸는 마법."
그리고 수십 년이 지난 지금, 나는 컴퓨터 앞에서 키보드를 두드리며 똑같은 일을 하고 있다.
"Hello World"
프로그래머라면 누구나 처음 배우는 코드다.
print("Hello World")
마법사의 입장에서 보면 이건 주문이다. "세상에 첫 번째 말을 새겨 넣는다." 주문은 현실에 아무 일도 일어나지 않는다. 하지만 컴퓨터라는 세계에서는 정말로 무언가가 탄생한다.
컴퓨터는 하나의 세계다
현실에서는 물리 법칙이 존재한다. 중력도 있고, 시간도 흐르고, 공간도 존재한다.
컴퓨터도 마찬가지다. CPU는 세계의 시간을 흐르게 하고, RAM은 현재의 기억이며, SSD는 과거를 저장하는 기억의 도서관이다. 네트워크는 다른 세계와 연결되는 차원문이다.
우리는 그 세계 안에서 법칙을 만든다.
이런 소식, 남들보다 먼저 받으실 분?
직접 돌려보고 되는 것만 골라 매주 보내드립니다. 광고성 하이프는 거릅니다.
코드 = 룬 문자
판타지 세계에서 마법사는 주문을 외운다. 개발자는 코드를 작성한다. 둘 다 공통점이 있다. 한 글자라도 틀리면 실패한다.
마법사는 주문이 폭주하고, 개발자는 컴파일 에러가 발생한다. 마법진이 조금만 틀려도 소환이 실패하듯, 괄호 하나 빠져도 프로그램은 멈춘다.
API는 소환술이다
예전에는 모든 걸 직접 만들어야 했다. 하지만 이제는 "날씨를 가져와.", "결제를 연결해.", "AI에게 물어봐."라고 말하면 된다.
API는 다른 세계의 존재를 불러오는 소환진과 닮아 있다.
AI는 사역마다
예전의 개발자는 모든 마법을 혼자 사용했다. 지금은 아니다.
AI에게 말한다. "로그인 화면 만들어.", "버그 찾아.", "보고서 작성해." 그러면 AI는 묵묵히 일을 시작한다.
판타지에서는 사역마. 현실에서는 AI. 이제 개발자는 직접 삽을 드는 사람이 아니라 여러 사역마를 지휘하는 대마법사에 가까워지고 있다.
디버깅은 저주 해제다
버그는 저주와 비슷하다. 아무 이유 없이 문이 열리지 않는다. 갑자기 앱이 종료된다. 메모리가 새어나간다.
우리는 원인을 찾는다. 로그를 추적하고, 한 줄씩 확인하고, 결국 저주를 풀어낸다. 디버깅은 현대의 해주(解呪) 의식이다.
배포는 소환 의식이다
내 컴퓨터에서는 완벽하게 작동한다. 하지만 서버에 올리는 순간 모든 사람이 사용할 수 있다.
이건 단순한 업로드가 아니다. 하나의 세계를 현실에 소환하는 의식이다.
닥터 스트레인지는 정말 기억을 삭제했을까?
<스파이더맨: 노 웨이 홈>의 마지막 장면이 계속 마음에 남았다. 멀티버스의 균열을 겨우 다 막아낸 뒤, 닥터 스트레인지는 피터에게 마지막 주문을 제안한다. 세상이 그가 스파이더맨이라는 사실을 잊게 해주겠다는 것. 원래는 그 정도 선이었다.
그런데 피터는 거기서 멈추지 않는다. 스파이더맨이라는 '역할'만 지워서는 부족하다는 걸 깨닫는다. 그를 아는 모든 사람이, 심지어 가장 가까운 친구인 MJ와 네드조차 '피터 파커'라는 존재 자체를 완전히 잊어야 한다고 요청한다. 그래야 다른 세계에서 넘어온 악당들이 더 이상 그를 쫓아 그의 주변 사람들을 위협할 이유가 없어지고, 치유받은 빌런들도 각자의 세계로 무사히 돌아갈 수 있으니까.
결과는 잔인할 정도로 담백하다. 주문이 끝난 뒤 피터는 카페 유리 너머로 MJ와 네드를 바라본다. 두 사람은 그를 스쳐 지나가면서도 아무 표정 변화가 없다. 함께 싸우고 웃고 울었던 시간이 그들에게는 통째로 존재하지 않는 시간이 된 것이다. 그런데 인상적인 건 그 직후, MJ가 문득 "이상한 꿈을 꾼 것 같다"는 식의 말을 흘리는 장면이다. 완전히 지워진 줄 알았던 기억이 어딘가에 흔적처럼 남아있는 듯한 느낌.
이 장면을 다시 떠올리다가 개발자의 눈으로 데이터 모델을 그려봤다.
People
------------
id
name
memory[]
Memory
------------
id
person_id
target
content
원래는 사람들 머릿속에 이런 기억이 수십억 개쯤 연결돼 있었을 거다.
target = 'Peter Parker'
가장 단순하게 생각하면 마법은 이렇게 보인다.
DELETE FROM Memory
WHERE target = 'Peter Parker';
그런데 영화를 다시 보면 그렇게 단순하지 않다. 사람들은 '스파이더맨'은 여전히 기억한다. 잊은 건 '피터 파커라는 사람이 스파이더맨이다'라는 연결 하나뿐이다.
Peter Parker
↓
Spider-Man
화살표 하나만 끊어낸 것에 더 가깝다. 프로그래밍으로 치면 이런 느낌이다.
Person* peter = ...
Hero* spiderman = ...
peter 포인터는 없앴지만 spiderman이 가리키던 객체와 거기 딸린 기록(memory)은 그대로 남아있는 것. 그래서 MJ에게는 여전히 어딘가에 웃고 울었던 흐릿한 기억의 조각이 남아있지만, 그걸 누구와 연결해야 할지는 더 이상 알 수 없다. 마치 외래 키가 사라진 데이터베이스처럼, 데이터는 남아있는데 그 데이터를 찾아갈 길만 사라진 것.
그런데 더 흥미로운 지점이 있다. 피터 자신은 왜 그 기억을 잃지 않았을까? 개발자 시선으로 보면 피터는 이 세계에서 Current Session 혹은 Admin 권한을 가진 예외 객체였던 셈이다.
UPDATE Memory
SET target = NULL
WHERE owner != 'Peter Parker';
모두의 데이터는 수정하되, 자기 자신만 조건에서 빼놓은 것. 마법을 이렇게 데이터 구조로 바라보기 시작하는 순간, 판타지는 코딩이 된다.
이렇게 보기 시작하면 다른 마법들도 비슷하게 대응시켜볼 수 있다.
- 시간 되돌리기 → Git의
reset또는 스냅샷 복원 - 멀티버스 → Git의 브랜치(branch)
- 타임라인 분기 →
fork - 포털 → 네트워크 터널 또는 API 게이트웨이
- 기억 삭제 → 참조(reference) 제거 또는 데이터 마이그레이션
- 인피니티 스톤 → 시스템의 핵심 권한(root access)
마법사는 주문을 외우는 사람이 아니라 세계의 규칙을 수정하는 사람이다. 개발자도 마찬가지로, 코드 몇 줄로 세계의 규칙을 바꿀 수 있다.
월드 빌더
예전에는 개발자를 프로그래머라고 불렀다. 지금은 조금 다르게 느껴진다.
우리는 단순히 프로그램을 만드는 사람이 아니다. 세계를 만든다.
앱 하나는 작은 도시이고, 게임 하나는 하나의 우주이며, AI 서비스는 새로운 문명을 만든다.
그래서 나는 앞으로 개발자를 이렇게 부르고 싶다. World Builder. 세계를 만드는 사람.
AI 시대의 개발자는 더 이상 코드를 많이 쓰는 사람이 아니다. 예전에는 코드를 얼마나 잘 작성하는지가 중요했다. 지금은 어떤 세계를 상상하느냐가 더 중요해지고 있다.
AI는 주문을 실행하는 사역마다. 개발자는 세계의 규칙을 설계하는 존재. 그리고 코드는 그 세계를 움직이는 마법이다.
어쩌면 우리는 프로그래밍을 배우는 것이 아니라, 디지털 마도학(Digital Arcane)을 배우고 있는지도 모른다.