수업 당일 새벽 두 시

수업 당일 새벽 두 시, 나는 게임에 오프닝 영상을 붙이고 있었다.

몇 시간 뒤면 연천전곡초등학교 6학년 아이들이 등교한다. 다섯 반, 한 반에 스물세 명, 모두 합쳐 약 110명. 반마다 40분씩, 학교 태블릿으로 이 게임에 들어온다. 광장 한가운데 분수가 솟고, 여섯 갈래 거리마다 직업인들이 서서 아이들을 기다리는 3D 도시다.

직업 도시 광장. 여섯 거리와 분수, 건물 앞에 선 직업인들

일주일 전만 해도 이 도시는 세상에 없었다. 그때 내 손에 있던 건 네 쪽짜리 종이 워크북 구상이 전부였다.

아무도 가지 않는 자리를 찾아다녔다

AI를 다루는 사람은 이제 많다. 누구는 대기업 임원들 앞에서 강의하고, 누구는 회사 하나의 AX 전환을 통째로 컨설팅한다. 한 분야를 깊게 파서, 그 깊이로 자리를 잡은 사람들이다.

나는 깊이로 겨루지 않았다. 대신 AI가 아직 닿지 않은 데를 찾아다녔다. 남들이 줄 서는 무대 말고, 아무도 줄 서지 않는 틈. 그렇게 평택시 아이사랑센터에서 다섯 살 미만 아이를 키우는 어머님들과 AI를 난생처음 같이 열어봤고, 서울시장애인복지관에서는 자발적으로 AI 스터디를 꾸려 공부하시던 공무원 분들 앞에 섰다. 육아맘의 하루와 복지관의 하루는 완전히 다르다. 그래서 갈 때마다 강의를 처음부터 다시 지었다. 같은 AI를 들고 갔는데 쓰는 말부터 달라졌고, 눈높이와 준비물은 매번 새로 골라야 했다. 나는 그렇게 갈아엎는 일이 좋았다. 한 자리를 치를 때마다 내가 설 수 있는 자리가 한 뼘씩 넓어졌다.

이번에 서게 된 자리는 초등학교 교단이었다. 그중에 여기가 제일 멀었다. 준비해야 했던 건 클로드 코드 실습도, 발표 슬라이드도 아니었다. 아이들과 함께 뛸 3D 게임 하나를 통째로 지어야 했다.

어쩌다 강사가 게임 개발까지 하게 됐냐면, 이야기는 종이 넉 장에서 시작한다.

처음에는 종이 네 장이었다

연천전곡초등학교에서 온 제안은 명확했다. 6학년 아이들이 자기 적성과 직업을 탐색하는 수업에 AI를 붙여줄 것.

처음 그린 수업은 차분했다. 아이들 손에 네 쪽짜리 워크북이 들리고, 자기 이해에서 출발해 챗봇에게 묻고, 받은 추천을 분류해 탐험 카드로 마무리하는 40분. 인터넷이 끊기면 미리 인쇄해 간 추천 결과로 이어가는 백업까지 잡아둔, 흠잡을 데 없는 설계였다. 문서로만 네 번을 고쳐 썼다.

종이 워크북 네 쪽의 흐름. 나를 알기, AI에게 묻기, 추천 분류하기, 탐험 카드
게임이 되기 전의 수업. 종이 네 장으로 40분을 설계했다

여기서 멈췄어도 수업은 굴러갔을 것이다. 워크북을 인쇄소에 넘기고, 챗봇 링크를 점검하고, 강의 대본을 다듬으면 끝나는 일정이었다.

그런데 아이들이 쓸 챗봇을 정하려고, 각 서비스의 약관을 열었다.

열두 살은 AI에 가입할 수 없다

ChatGPT, 만 13세부터. Gemini, 만 13세부터. Claude, 만 18세부터. 국내 서비스도 대부분 만 15세부터.

초등학교 6학년은 만 12세다.

아이들이 자기 손으로 계정을 만들 수 있는 AI는 없었다.

학교 계정으로 단체 가입하는 방법이 있긴 하다. 그런데 이 수업에서 가르치려던 건 AI 말을 그대로 믿지 말고 따져보라는 거였다. 따져보라고 하러 간 사람이 약관 비껴가는 법부터 보여줄 수는 없었다.

그러면 내 화면으로 시연하고 아이들은 구경만 해야 하는데, 그건 수업이 아니다. 문이 잠겨 있으니 문을 새로 만들기로 했다. 반 코드 여섯 자리만 넣으면 열리는 문. 계정도 비밀번호도 필요 없다. 그렇게 종이 워크북이 3D 게임이 됐다.

연령 제한으로 잠긴 AI 서비스 네 곳과, 반 코드로만 열리는 직업 도시
왼쪽은 열두 살이 열 수 없는 문들. 오른쪽은 반 코드 여섯 자리로 열리는 문

일주일 만에 도시 하나

머릿속 그림은 직업 도시였다. 광장이 있고, 거리마다 직업인이 서 있고, 아이가 캐릭터로 돌아다니며 말을 거는 세계. 워크북을 버리지 않고 종이 위의 활동을 전부 세계 안의 장소로 옮겼다. 워크북 첫 쪽에서 아이가 동그라미를 치는 칸이 있었다. 나는 뭘 좋아하는 사람인가. 그 칸이 모험가 등록소가 됐다. 챗봇에게 직업을 묻던 둘째 쪽은 광장의 직업인 인터뷰가 됐고, 추천을 분류하던 셋째 쪽은 직업 체험과 깃발이 됐다. 탐험 카드는 수료증이 됐다.

수업까지 남은 시간은 일주일이었다.

일주일이면 된다는 계산이 있었다. 나는 혼자 일하지 않는다. 코드는 AI 에이전트들이 썼고, 나는 일을 트랙으로 쪼갰다. 이동, 화면, 서사, 서버, 결함 수정이 각자의 트랙에서 동시에 굴러갔고, 나는 트랙마다 범위를 정하고 합류 지점을 잡고 결과물을 직접 플레이해서 통과 여부를 정했다. 중간에 방향이 통째로 틀린 적도 있다. 그날은 여섯 트랙을 한꺼번에 열어 전부 갈아엎었다.

그렇게 일주일 동안 커밋 241개가 쌓였다. 수업 전날 밤에는 등록부터 엔딩까지 학생 계정으로 한 번 더 완주했고, 새벽 두 시에 오프닝 영상을 붙였고, 최종본을 올렸다.

일주일 동안 쌓인 것을 세어봤다. 직업 스물다섯 종이 거리에 서 있고, 직업마다 하루를 세 컷으로 나눈 체험 장면이 붙는다. 장면마다 선택지가 둘에서 셋이라 전부 합치면 이백한 개다. 코드는 1만 5천 줄, 테스트는 29개, 화면에 쓰인 그림 파일은 176장이다.

25 + 2직업 NPC · 숨은 직업 둘
201체험 장면 선택지
15,656줄TypeScript 코드
176장화면 에셋

만들면서 기능보다 먼저 정한 건 하지 않을 것들이었다. AI 역사 설명과 도구 이름 나열을 뺐고, 어른용 프롬프트 공식도 뺐다. 이미지 생성도 뺐다. 아이 얼굴이 들어가는 순간 개인정보 선을 넘는다. 제일 굵게 그은 선은 이거였다. AI가 "너의 천직은 이거야"라고 답을 찍어주지 않는다. 답을 받아버리면 탐험할 이유가 사라지기 때문이다.

AI는 내 미래를 정하는 점쟁이가 아니다.
내가 못 본 가능성을 보여주는 탐험 도구다.

열두 살이 바꾼 것들

이 도시의 화면은 취향으로 정하지 않았다. 청중이 열두 살이라 그렇게 만들 수밖에 없었다. 자리를 옮길 때마다 같은 걸 다시 배운다. 청중이 바뀌면 설계가 바뀐다.

열두 살은 자기를 MBTI로 소개한다

아이들이 처음 만나는 화면은 모험가 등록소다. 이름을 적고, 네 문항으로 성향을 고르고, 꿈을 한 줄 쓰면 등록증에 도장이 쾅 찍힌다.

성향 네 문항은 MBTI 형식을 빌렸다. 요즘은 초등학생도 MBTI로 자기를 소개한다. 첫 화면에서 아이들을 끌어당기는 데 이만한 훅이 없다. 다만 게임 안에서는 이걸 계속 낮춰 부르게 했다. 진짜 성격검사가 아니라 네 문항짜리 오늘 하루 출입증이라고. 진로 수업에서 "너는 이런 사람이야"라고 도장을 찍어버리면, 탐험은 시작하기도 전에 닫힌다.

등록이 끝나면 전자칠판에 우리 반 성향 분포가 뜬다. E가 몇 명, I가 몇 명. 아이들이 일제히 앞을 보고 자기가 어디 속하는지 찾는다. 각자 태블릿만 들여다보는 40분과, 중간중간 다 같이 고개를 드는 40분은 완전히 다른 수업이 된다. 전자칠판 화면을 따로 만든 이유가 이거다.

등록증의 꿈 칸에는 세대가 보인다. 내가 초등학생일 때 그 칸에는 대통령과 장군과 과학자가 살았다. 요즘은 아이돌과 유튜버, 그리고 삼성전자와 하이닉스가 적힌다고 한다. 나를 이 학교에 소개해준 선생님의 귀띔이었다.

등록소. 이름, 성향, 꿈(장래희망)을 적으면 등록증에 도장이 찍힌다

아이들이 이미 살고 있는 화면을 따라갔다

그림체를 정하는 데 시안 여섯 개가 들어갔다. 기준은 하나였다. 열두 살이 이미 사랑하는 게임의 문법을 따라갈 것. 처음에는 코드로 손그림 목업을 짰다가 내 눈에도 안 돼서 바로 접었다. 그다음 AI 이미지 생성으로 그림체 시안을 여섯 종 뽑아 나란히 놓고 골랐다. 16비트 픽셀 두 종, 마인크래프트풍, 동물의 숲풍, 쿠키런풍, 로블록스풍. 최종은 로블록스풍. 요즘 초등학생 화면에서 제일 오래 살아남은 그림체다.

같은 직업 도시를 여섯 가지 그림체로 뽑아본 시안 비교
같은 도시를 여섯 가지 그림체로 뽑아 나란히 놓고 골랐다

로비에서 고르는 아바타 열두 종도 같은 계산이다. 기능으로만 보면 없어도 되는 화면이다. 그런데 제 손으로 캐릭터를 고른 아이는 그 뒤 40분 동안 화면 속 그 캐릭터가 자기가 된다. 남이 정해준 캐릭터를 끌고 다니는 것과는 다르다.

로비의 아바타 선택. 열두 종을 갈아입어 본다

40분 안에 손에 쥘 수 있는 건 세 개였다

어른 교육에서 쓰는 프롬프트 프레임워크는 가져오지 않았다. 광장으로 나가려면 통과해야 하는 질문력 튜토리얼에 세 개만 남겼다.

자세히 말하기. 자기가 누군지, 뭘 좋아하고 뭘 잘하는지를 붙여서 말하는 것. 공식이 아니라 자기 얘기를 얹는 연습이다.

다시 시키기. "다시 해줘"에서 멈추지 않고 "더 쉽게", "3개만", "예를 들어"처럼 뭘 바꿔달라는지 붙이는 것.

의심하기. 이 수업에서 제일 중요한 대목이다. AI는 모르면 멈추는 대신 그럴듯하게 지어낸다. 그래서 축구팀 선수가 열다섯 명이라고 우기는 오답을 게임 안에 심어뒀다. 세 문장 중 하나는 AI가 틀리게 알고 있고, 아이가 그걸 골라내면 그 자리에서 들통난다. 매끈하다고 믿으면 안 된다는 건 말로 해서는 안 남는다. 한 번 속아보고 한 번 잡아내야 남는다. 이름과 학교와 주소를 조합해 넣지 않는 약속도 이 자리에 같이 뒀다. 의심하기를 배운 직후가 제일 잘 붙는 자리다.

첫 번째 꿀팁. 자세히 말하기
두 번째 꿀팁. 다시 시키기
세 번째 꿀팁. 셋 중 하나는 AI가 틀렸다

답을 주는 화면은 뒤로 물렸다

광장의 직업인에게 말을 걸면 인터뷰가 시작된다. 여기가 이 수업의 본편이다. 방금 배운 질문 세 개를 이제 진짜 궁금한 상대에게 써먹는다.

명함을 받는 조건을 질문 횟수로 두지 않았다. 그 직업의 좋은 면과 힘든 면, 그리고 나와 맞는지까지 캐물어야 명함이 나온다. 열 번을 물어도 좋은 점만 물으면 빈손으로 나온다. 겉만 보고 "이 직업 좋아 보여"로 끝내지 못하게, 앞뒤를 다 뒤집어야 통과되는 관문으로 만들었다.

고치면서 배운 것도 있다. 처음엔 대화 첫 화면부터 질문 예시 버튼을 보여줬는데, 그러면 아이가 자기 말로 물어볼 이유가 사라진다. 연습시키려던 걸 화면이 대신 해주고 있었다. 그래서 계속 막힐 때만 나타나게 뒤로 물렸다.

직업인 인터뷰. 한 직업을 끝까지 해부해야 명함이 나온다

마지막에는 언덕에 깃발을 꽂는다. 오늘 만난 직업 중 하나를 고르고, 왜 골랐는지를 적는다. 여기만큼은 선택지 없이 빈칸을 뒀다. 40분 내내 AI에게 묻고 받았으니, 마지막 한 줄은 자기 문장이어야 했다.

깃발 꽂기. 직업 하나를 고르고 이유를 직접 적는다

40분이 끝나도 남을 것을 심었다

명함이 두 장 모이면 직업 체험이 열린다. 그 직업의 하루가 세 컷으로 흐르고, 컷마다 아이가 하나를 고른다. 의사라면 어제 수술한 환자가 다 나은 것 같다며 일어나려는 아침 회진이다. 상처를 직접 볼 수도 있고, 밤에 잠은 잤는지 물을 수도 있다. 정답은 두지 않았다. 뭘 고르든 그 직업인다운 결과가 나온다. 세 컷이 끝나면 너는 이런 식으로 일하는 쪽이더라는 문장 하나가 붙는다. 스물다섯 직업에 각각 세 컷을 쓰다 보니 선택지가 이백 개를 넘겼다.

직업 체험. 세 장면의 선택이 모여 일하는 방식을 읽어준다

모은 명함은 명함첩에 꽂힌다. 스물다섯 칸이 도감처럼 깔리는데, 아직 안 만난 직업은 실루엣으로만 보인다. 빈칸이 보이면 아이는 그 거리로 다시 걸어간다. 거리 어딘가에는 목록에 없는 직업이 둘 숨어 있다. 우주비행사와 로봇 공학자다. 찾아낸 아이만 명함을 받는다.

명함에는 칭호가 붙는다. 집요한 질문왕, 허를 찌르는 꼬마 탐정, 리액션 맛집, 궁금한 건 못 참는 탐험가. 열두 개를 만들어 뒀고, 아이가 던진 질문의 결에 따라 하나가 붙는다. 점수를 매기지 않기로 했으니, 대신 잘한 걸 이름으로 불러주기로 했다.

효과음은 파일을 쓰지 않고 코드로 합성했다. 탭했다, 맞았다, 받았다를 알리는 0.2초짜리 소리 세 종류다. 스물세 대가 학교 와이파이 하나에 동시에 붙는 앱이라 용량을 한 바이트도 더 얹고 싶지 않았다. 배경음악은 아예 만들지 않았다. 스물세 대가 동시에 노래를 틀면 그 교실은 수업이 안 된다.

수업이 망하는 상상을 했다

마지막 이틀은 기능을 늘리는 대신 망하는 상상을 했다. 교실에서 일어날 수 있는 사고를 하나씩 세워두고, 각각에 대답을 만들어뒀다.

AI가 멈추면? 게임에는 AI가 다섯 군데 들어간다. NPC 대화, 질문 판정, 체험 장면, 칭호, 엔딩. 어느 하나라도 모델 응답만 기다리는 구조면, API가 느려지는 순간이 수업이 멈추는 순간이 된다. 그래서 다섯 경로 전부에 제한 시간을 걸고, 넘기면 준비된 대사로 이어지게 했다. 콘솔에는 아예 대본 모드 스위치도 달았다. 모델이 살아 있으면 아이 질문에 맞춘 답이 가고, 죽으면 대본으로 끝까지 간다.

태블릿이 못 버티면? 움직여야 하는 내 아바타 하나만 실시간 3D로 돌리고, 배경과 건물과 다른 캐릭터는 미리 구운 그림으로 뒀다. 화려하게 만들 이유가 없었다. 낡은 태블릿이 40분을 버텨야 했다.

와이파이가 통째로 끊기면? 태블릿 안에서 혼자 끝까지 돌아가는 백업 게임을 파일 하나로 따로 만들어 배포해뒀다. 온라인 게임의 축소판이 아니라, 묻고 의심하고 골라보는 핵심 흐름만 남긴 판이다.

내가 헤매면? 수업 전날 밤 마지막으로 갈아엎은 건 게임이 아니라 교사 콘솔이었다. 기능은 다 있었는데, 만든 사람인 내가 봐도 다음에 뭘 눌러야 하는지 한 박자 늦게 찾았다. 40분 수업에서 그 한 박자가 다섯 번 쌓이면 수업이 밀린다. 그래서 화면이 던지는 질문을 바꿨다. "지금 상태가 뭔가"에서 "지금 뭘 눌러야 하는가"로. 단계 배너를 박고, 그 단계의 버튼만 남기고, 누를 게 없는 구간에는 누를 것이 없다고 적었다.

교사 콘솔과 전자칠판. 누를 것이 없으면 없다고 적어둔다

정상 경로를 하나 늘릴 때마다, 무너진 뒤에 걸어갈 길도 그만큼 만들어 뒀다. 프로덕션은 jobland-app.vercel.app에 있다.

다섯 반을 통과한 뒤

수업은 다섯 번 돌았고, 게임은 다섯 번 다 버텼다. 만들어둔 폴백은 한 번도 쓰지 않았다.

약 110명초6 다섯 반 플레이어
7일게임 개발 착수부터 배포까지
241최종 커밋
23대 · 40분태블릿 · 반당 수업
5개 반연속 운영
0건수업 중 개발 이슈

그런데 그날 남은 건 이 숫자가 아니었다.

아이들은 진짜 게임을 하듯 놀았다. 시키지 않아도 캐릭터를 이리저리 몰며 광장을 헤집고 다녔다. 그러다 한 아이가 말했다. "이거 로블록스다!" 시안 여섯 장을 늘어놓고 로블록스풍을 고른 건 정확히 그 한마디를 들으려던 것이었다.

OX 아레나에는 상품을 걸었다. 일곱 문제 이상 맞히면 과자. 진로 수업에 웬 과자냐고 하면 할 말이 있다. 40분 수업은 앞 10분에 반 전체를 끌어오지 못하면 뒤 30분 동안 아이들이 각자 다른 데를 본다. 이 계산은 교실에서 그대로 맞아떨어졌다. 다 컸다는 얼굴로 앉아 있던 열두 살들이 과자가 걸리는 순간 눈빛을 바꿨다. 문제가 뜰 때마다 바닥의 O와 X 사이를 전력으로 뛰어다녔다. 다섯 반 모두 똑같았다.

OX 아레나. 바닥의 O와 X로 걸어가 답한다

이 나이대 아이들을 보면서 배운 것도 있다. 손에 뭔가 쥐어지면 조용해진다. 태블릿이 켜지자 교실이 가라앉았고, 다들 화면 속으로 들어갔다. 스스로는 다 컸다고 생각하는 열두 살들이 과자 하나에 진심이 되는 걸 보면서, 나도 저 나이엔 저랬을까 싶었다.

담임 선생님들의 질문은 결이 달랐다. 직접 만드신 거냐고, 어떻게 만든 거냐고 물으셨다. 아이들 진로탐색 할 때 참 좋겠다는 말도 들었다.

엔딩 수료증. 던진 질문 수, 만난 직업인 수, 오늘의 깃발

새벽 두 시에 오프닝 영상을 얹은 게임이었다. 그날 오후 다섯 반이 이걸 끝까지 하고 나갔다.

그다음에도 나는 갔다

코드는 AI 에이전트가 여러 갈래에서 만들어 왔다. 그런데 열두 살에게 성격을 단정해주면 안 된다는 판단, 힘든 점까지 물어야 명함이 나오게 걸어야 한다는 판단, 화면이 아이 대신 질문을 써주면 안 된다는 판단. 이런 건 요구사항 한 줄에서 자동으로 나오지 않았다. 아이 자리에 앉아 등록부터 엔딩까지 밟아본 다음에, 내가 정해야 했다.

코드는 AI가 짠다. 무엇을 만들 것인가는 여전히 사람이 정한다.
그리고 실제로 맞는지는, 사람이 끝까지 밟아 확인한다.

화면이 다 나온 날은 끝이 아니었다. 다섯 반의 수업이 끝까지 이어질 조건을 세우고 나서야 끝났다.

돌아보면 아이사랑센터도, 복지관도, 이 초등학교도 계획에 있던 자리는 아니었다. 틈이 보일 때 들어갔더니, 남들이 굳이 가지 않는 자리들을 하나씩 지나게 됐다. 그 자리들은 매번 다른 걸 요구했다. 눈높이를 새로 지어야 하는 자리가 있었고, 도구를 새로 골라야 하는 자리가 있었다. 이번 자리는 도구가 아예 없어서, 도시를 하나 지어야 했다.

매번 새로운 과제였고, 그때마다 없는 걸 만들어야 했다. 그 사이 손에 굳은살이 앉았다. 다음에 설 곳도 사정은 비슷하겠지만, 이제 그 앞에서 막막하지는 않다.