반지하의 개발자
새벽 두 시였다.
모니터 빛이 방 전체를 채우고 있었다. 전체라고 해봤자 4평이다. 침대, 책상, 의자, 모니터 하나. 바닥에 컵라면 두 개가 있었다. 하나는 어제 것이고 하나는 오늘 것이었는데, 노청에게는 둘 다 그냥 바닥이었다. 치운다는 개념이 이 방에는 없는 것 같았다.
반지하라서 창문이 반만 있었다. 밤에는 가로등 불빛이 반만 들어왔다. 그 빛이 노청의 뒤통수를 비추고 있었다.
노청은 코드를 짜고 있었다.
```
if (player.hp <= 0) {
displayMessage("RUN OVER");
resetAllSkills();
return seedCount;
}
```
RUN OVER.
게임 오버가 아니었다. 런 오버. 이번 런이 끝났을 뿐이다. 죽으면 스킬은 사라지고, 시드만 남고, 다시 시작한다. 로그라이크라는 장르가 그렇다. 한 번 죽는 게 끝이 아니다.
3년째 이 코드를 짜고 있었다.
---
핸드폰이 울렸다.
"야."
쎄오였다.
"게임 언제 나와."
"이번 달 안에는 나올 것 같은데요. 진짜로."
"진짜로가 세 번째야."
"이번엔 진짜 진짜예요."
"ㅋㅋ 알았어. 밥은 먹었어?"
"아까 컵라면 먹었어요."
"또? 야, 내일 아침에 국밥 먹자. 퇴근하고 편의점 앞으로 와."
"몇 시요?"
"너 몇 시에 끝나?"
"일곱 시에 끝나는데, 옷 갈아입고 나오면 오 분 정도."
"그럼 일곱 시 오 분. 늦으면 혼자 먹는다."
"네."
전화가 끊겼다.
노청은 다시 모니터를 봤다. 커서가 깜빡이고 있었다.
검정 가죽 수첩이 키보드 옆에 있었다. 표지가 갈색이 될 만큼 닳아 있었다. 모서리가 둥글어져 있었고, 속지는 반쯤 쓰여 있었다.
펜을 들어 적었다.
'보스 패턴 3페이즈 — 회피 타이밍 0.3초 너무 빡빡함. 0.5초로.'
이 수첩은 개발 메모장이었다. 머릿속에 떠오르는 것들을 코드에 반영하기 전에 먼저 여기에 적었다. 2년 동안 이 습관이 바뀐 적은 없었다.
수첩을 덮고 다시 모니터를 봤다.
새벽 두 시 반. 가로등 빛이 조금 흔들렸다. 바람이 부는 것 같았다. 반지하 창문은 시야에 자꾸 걸렸다. 세상이 반만 보이는 창이었다.
---
노청이 이 반지하에 산 건 1년 반째였다.
그 전에는 판교에 있었다. 게임회사. 신입. 6개월을 버텼다.
버텼다는 표현이 맞았다. 적응한 게 아니라 견딘 거였다. 아침 9시 출근, 저녁 10시 퇴근, 주말 출근, 야근 수당 없음. 그건 다들 그러니까 참았다. 문제는 다른 데 있었다.
팀장이 말했다.
"노청 씨, 이 기획서 읽어봤어?"
읽었다. 읽었는데 동의가 안 됐다. 로그라이크라고 써놓고 죽으면 처음부터 다시 시작하는 시스템이 없었다. 그냥 체크포인트에서 리스폰. 그건 로그라이크가 아니었다.
"의견 있으면 말해봐."
노청은 잠깐 생각했다. 머릿속에서 문장을 한 번 만들어보고 나서 입을 열었다.
"이건 로그라이크가 아닌 것 같습니다. 죽으면 다 잃어야 하는데요. 대신 뭔가는 남아야 하고요. 경험이든 자원이든."
팀장이 웃었다. 회의실에 있던 7명이 같이 웃었다. 노청은 웃기려고 한 게 아니었다.
"노청 씨, 우리가 만드는 건 상업용 게임이야. 캐주얼 유저가 죽을 때마다 다 잃으면 삭제해."
"네. 알겠습니다."
그날 이후로 의견을 말하지 않았다. 3개월 뒤에 잘렸다. 권고사직이라고 했지만 사실상 해고였다. 사유는 '조직 부적응'.
6개월이라 퇴직금도 없었다. 대학 때 아르바이트하면서 모아둔 돈이 340만원 있었다. 마지막 월급까지 합치면 500만원 조금 안 됐다. 반지하 보증금 300만원을 내고, 남은 돈으로 첫 두 달을 살았다. 그리고 바로 편의점 야간 알바를 시작했다.
낮에 코드를 짜고, 밤에 편의점에 서고. 그 생활이 1년 반째였다.
---
노청은 언어를 빨리 배우는 사람이었다.
어릴 때부터 그랬다. 새로운 언어의 구조가 눈에 들어왔다. 문법이 보이고, 패턴이 보이고, 뉘앙스가 보였다. 영어 학원을 다닌 적은 없었다. 대학 전공도 컴퓨터공학이었지 영문학이 아니었다. 그런데 프로그래밍을 배우면서 영어가 같이 됐다.
시작은 유니티 엔진 공식 문서였다. 한글 번역이 없었다. 스택오버플로우도 영어. 유튜브 튜토리얼도 영어. 처음에는 모르는 단어를 일일이 찾았는데, 3개월쯤 지나니까 안 찾아도 됐다. 6개월 지나니까 영어 영상을 틀어놓고 코딩했다. 1년 지나니까 레딧에서 영어로 댓글을 썼다.
프로그래밍 언어도 비슷했다. C#을 배우는 데 한 달이 걸렸다. 보통 사람은 반 년이다. 문법 구조가 보이면 나머지는 응용이었다. 자연어든 프로그래밍 언어든 노청에게는 같은 것이었다 — 규칙이 있고, 패턴이 있고, 예외가 있었다. 예외가 어디서 생기는지 보이면 그 언어를 이해한 거였다.
사람의 말도 그랬다. 같은 "네"가 맥락에 따라 전부 다른 뜻이라는 걸 노청은 알고 있었다. 동의의 네, 체념의 네, 듣고 있다는 네, 더 이상 말하고 싶지 않다는 네. 소리는 같은데 의미가 달랐다. 그 차이가 노청에게는 보였다.
이걸 재능이라고 부르는지는 몰랐다. 그냥 그런 사람이었다.
---
처음에는 게임을 만들 생각이 없었다.
좋아하는 게임의 구조를 분석하는 게 취미였다. 어릴 때부터 그랬다. 게임을 하면서 "이건 왜 이렇게 만들었지?"가 먼저 떠올랐다. 보스를 잡는 게 아니라 보스의 패턴을 분석하는 게 재밌었다. 3페이즈에서 회피 타이밍이 0.3초인 이유, 체력바가 80%에서 패턴이 바뀌는 이유, 맵 디자인에서 플레이어를 특정 방향으로 유도하는 이유.
그걸 수첩에 적기 시작했다.
"내가 만들면 이렇게 안 하는데."
이 문장이 시작이었다.
혼자서 유니티 엔진을 배웠다. 유튜브 강의를 영어로 봤다. 프로그래밍 언어를 독학으로 배웠다. 6개월 만에 프로토타입이 나왔고, 1년 만에 알파, 2년 만에 베타, 3년째에 스팀 출시를 앞두고 있었다.
혼자였다. 기획, 코딩, 그래픽, 사운드, 테스트, 버그 수정, 스팀 페이지 작성. 전부 혼자.
그래픽은 솔직히 별로였다. 픽셀 아트. 노청이 할 수 있는 최선이었다. 대신 시스템이 좋았다. 죽으면 스킬이 전부 리셋되고, 시드만 남고, 시드로 영구 업그레이드를 사고, 다시 런을 시작한다. 매번 다른 빌드. 매번 다른 전략. 같은 보스를 열 번 다른 방법으로 잡을 수 있었다.
리셋이 끝이 아니라는 걸 보여주고 싶었다.
수첩에 적었다.
'잃어도 남는 게 있다 — 이걸 느끼게 만들어야 함.'
---
새벽 세 시. 컵라면 국물이 식어 있었다. 마시지 않았다.
코드를 한 줄 더 짰다.
```
// TODO: 게임 이름 미정
```
3년 동안 이름을 못 정했다. 괜찮은 이름이 떠오르지 않았다. 프로젝트명은 'untitled_game_01'. 이름 없는 게임.
쎄오 형이 전에 물었다. "게임 이름은?"
"아직 못 정했어요."
"3년 동안?"
"좋은 이름이 안 떠올라서요. 이름이 좋아야 하잖아요."
쎄오 형이 웃었다. "야 이름 없는 게임이 세상에 어딨어."
"지금은 있어요."
---
노청은 스팀 페이지를 열었다. 출시 예정일이 적혀 있었다. 2주 뒤.
위시리스트 수를 봤다. 1,247명.
적은 건 아니었다. 많은 것도 아니었다. 인디게임 치고는 나쁘지 않다고 누가 레딧에서 그랬다.
댓글을 읽었다. 영어였다.
"The roguelike loop feels tight. Day 1 buy for me."
"pixel art is mid but the system design is insane"
"solo dev? respect"
읽으면서 입꼬리가 살짝 올라갔다.
아래에 한국어 댓글이 하나 있었다.
"이거 혼자 만든 거예요? 대단하다."
노청은 답을 쓰려고 키보드 위에 손을 올렸다. '감사합니다'는 너무 딱딱한 것 같았다. 'ㅎㅎ 감사합니다'는 가벼운 것 같았다. '네 혼자 만들었습니다 감사합니다'는 너무 긴 것 같았다.
한참을 고민하다가 아무것도 안 쓰고 창을 닫았다.
수첩을 펼쳐서 적었다.
'댓글 답 쓰는 거 — 연습 필요.'
이런 걸 메모하는 사람이었다. 사람들이 "감사합니다" 하나를 생각 없이 바로 쓸 수 있다는 게 노청에게는 좀 신기했다. 노청은 말을 하기 전에 머릿속에서 한 번 적어보는 편이었다. 그래야 뜻이 정확했다.
---
새벽 네 시. 눈이 아팠다.
모니터를 끄지 않고 침대에 누웠다. 반지하 천장이 낮았다. 손을 뻗으면 닿을 것 같았는데 실제로는 닿지 않았다. 매번 그랬다.
핸드폰을 봤다. 쎄오 형한테 카톡이 와 있었다.
'야 내일 일곱시오분 편의점 앞이다. 늦으면 혼자 먹는다.'
아까 통화에서 한 말을 또 문자로 보내는 사람이었다. 확인 사살 같은 거였다.
노청은 알람을 맞추려다가 말았다. 편의점 야간 알바가 아침 7시에 끝난다. 유니폼 벗고 자기 옷 갈아입는 데 5분. 바로 나가면 된다.
알람을 안 맞췄다. 어차피 일어나니까. 3년 동안 알람 없이 살았다. 코딩하다 자고, 깨서 알바가고. 시간표 같은 건 없었다.
눈을 감았다.
모니터에서 나오는 빛이 천장에 반사되고 있었다.
```
if (player.hp <= 0) {
displayMessage("RUN OVER");
```
이 화면을 3년 동안 수천 번 봤다. 테스트할 때마다 캐릭터가 죽었고, 그때마다 이 메시지가 떴다. 처음에는 GAME OVER라고 했다가 바꿨다. 게임이 끝난 게 아니니까. 이번 런이 끝난 것뿐이니까.
잃어도 남는 게 있다.
그게 이 게임의 철학이었다. 그리고 노청의 생활이기도 했다. 회사에서 잘린 것도 런이 끝난 거였다. 남은 돈과 배운 것으로 다시 시작했다. 코드를 짰다. 점점 게임이 되어갔다.
내일 아침에 쎄오 형이랑 국밥을 먹을 것이다. 편의점에 서고, 돌아와서 또 코드를 짤 것이다.
2주 뒤에 게임이 나온다.
이름은 아직 없다.
눈이 감겼다.
반지하 창문으로 가로등 빛이 반만 들어오고 있었다. 세상이 반만 보이는 창. 이쪽에서 보면 세상은 항상 그만큼이었다.
그래도 괜찮았다.
아직은.







Comment ' 0