[카테고리:] 문학

  • 전화, 그 이상한 물건에 대하여

    전화, 그 이상한 물건에 대하여

    나는 전화를 싫어한다.

    그 사실에 대해서는 특별히 숨길 생각도 없고, 부끄러워할 생각도 없다. 그저 평범한 사실을 말하는 것뿐이다. 아마도 이 세상에는 나처럼 전화를 싫어하는 사람이 꽤 많을 것이다. 특히 소프트웨어 프로그래머들 중에는. 우리는 컴퓨터와 대화하는 데는 능숙하지만, 사람과의 대화는 때때로 불편하게 느껴진다. 코드는 명확하고 논리적이지만, 사람의 말은 그렇지 않기 때문이다.

    어제도 전화가 울렸다. 오후 세 시 십오 분쯤이었을까. 나는 모니터 앞에 앉아 새로운 알고리즘을 구상하고 있었다. 두 시간 동안 완전히 몰입한 상태였다. 그때 갑자기 전화벨이 울렸다. 마치 깊은 바닷속에서 갑자기 수면 위로 끌어올려진 것 같은 느낌이었다. 평소 같았으면 무시했을 테지만, 그날은 중요한 클라이언트의 전화를 기다리고 있었기 때문에 어쩔 수 없이 수화기를 들었다.

    “여보세요?”

    내 목소리는 항상 전화 속에서는 낯설게 들린다. 마치 다른 사람의 목소리를 빌려 쓰고 있는 것처럼.

    “안녕하세요, ○○기업의 △△입니다.”

    여자의 목소리였다. 아주 낮고 부드러운 목소리. 마치 오래된 재즈 바에서 들리는 색소폰 소리 같았다. 하지만 나는 그 목소리의 주인공을 알지 못했다. 그리고 기다리던 전화도 아니었다.

    전화의 문제점은 바로 그것이다. 상대방의 표정을 볼 수 없다는 것. 오직 목소리만으로 상대방의 의도나 감정을 파악해야 한다는 것. 프로그래밍에서라면 나는 디버거를 사용할 수 있다. 코드의 모든 상태를 확인하고, 문제가 발생한 정확한 지점을 찾아낼 수 있다. 하지만 전화 통화에는 디버거가 없다. 그저 내 감각에 의존해야 할 뿐이다.

    코드를 작성할 때는 시간을 들여 생각할 수 있다. 잘못된 부분이 있으면 지우고 다시 쓸 수 있다. 하지만 전화 통화에서는 그럴 수 없다. 한 번 말한 것은 되돌릴 수 없다. 마치 커밋 후에 푸시 버튼을 눌러버린 것과 같다.

    아주 오래 전, 나는 좋아하는 여자아이에게 전화를 걸었던 적이 있다. 세 번이나 번호를 눌렀다가 바로 끊어버렸다. 네 번째 시도에서 겨우 통화 버튼을 누를 수 있었다. 그리고 전화가 연결되자마자 나는 아무 말도 할 수 없었다. 그저 그녀의 “여보세요?”라는 말만 세 번 들었을 뿐이다. 결국 나는 아무 말도 하지 못한 채 전화를 끊어버렸다. 소프트웨어의 무한 루프처럼, 나의 뇌는 제자리를 맴돌고 있었다.

    그래서 나는 이메일이나 메신저를 더 선호한다. 글로 쓰면 내 생각을 정리할 시간이 있다. 적절한 단어를 선택할 시간이 있다. 마치 코드를 작성하듯이, 하나하나 정확하게 선택할 수 있다. 그리고 무엇보다, 상대방의 반응을 즉각적으로 마주하지 않아도 된다.

    어쩌면 내 전화 공포증은 버그를 발견당하는 것에 대한 두려움일지도 모른다. 내가 작성한 코드가 완벽하지 않다는 것을 누군가에게 들키는 것에 대한 두려움. 혹은 내가 작성한 함수가 예상치 못한 결과를 반환할 때의 당혹감. 마치 빈 우물 속에 돌을 던지고, 그 돌이 바닥에 닿는 소리를 듣지 못하는 것과 같은 불안감.

    “○○님, 계십니까?”

    전화 속 여자의 목소리가 다시 들려왔다. 나는 잠시 생각에 빠져 있었던 모양이다.

    “네, 있습니다.”

    내가 대답했다. 그리고 우리는 새로운 프로젝트에 관한 이야기를 나누었다. 일 이야기는 항상 쉽다. 정해진 주제, 정해진 목적이 있기 때문이다. 마치 잘 정의된 함수처럼. 입력과 출력이 명확하다. 하지만 그 외의 전화는 항상 어렵다. 특히 오랜만에 연락하는 친구나 가족과의 전화. 무슨 말을 해야 할지, 어떤 이야기부터 시작해야 할지 항상 헷갈린다. 그것은 마치 문서화되지 않은 API를 사용하는 것과 같다.

    전화 공포증이라는 것이 존재한다면, 아마도 나는 그것을 가지고 있을 것이다. 하지만 그렇다고 해서 내가 전화를 아예 사용하지 않는 것은 아니다. 필요할 때는 사용한다. 마치 좋아하지 않는 프로그래밍 언어를 어쩔 수 없이 사용해야 할 때처럼, 약간의 불편함을 감수하면서도.

    때로는 그런 불편함이 프로그래밍에 도움이 되기도 한다. 왜냐하면 불편함은 새로운 해결책을 생각하게 만들기 때문이다. 그리고 프로그래머에게 있어서 새로운 해결책이란 소중한 자산이다.

    어쩌면 나는 언젠가 전화 공포증을 위한 앱을 만들지도 모르겠다. 인공지능이 대신 전화를 받고, 중요한 내용만 텍스트로 정리해주는 그런 앱. 그렇게 되면 나 같은 사람들도 조금은 편안하게 살 수 있지 않을까.

    전화가 울린다. 나는 깊은 숨을 들이마시고, 수화기를 든다. 그리고 또 다른 코드가 시작된다.

  • 의식의 흐름

    의식의 흐름

    시계는 02:37을 가리키고 있다. 모니터의 푸른빛만이 어두운 방을 밝힌다. 커서가 깜빡이는 검은 화면 앞에서 나는 오늘도 코드와 씨름 중이다. 디버깅을 시작한 지 벌써 세 시간째. 버그는 어디에 숨어 있는 걸까.

    if (response.status === 200) {

    그런데 문득, 창밖으로 보이는 달빛이 내 시선을 사로잡는다. 곧 보름달이 되겠군. 이런 밤에 어머니는 만두를 만드셨지. 어린 시절의 기억이 스쳐 지나간다. 반죽을 동그랗게 빚던 손길, 그 옆에서 서툴게 따라하던 나의 모습.

    console.log("Debug point 1:", data);

    다시 현실로 돌아온다. 로그를 확인해 보자. 아, 여기서 데이터 구조가 예상과 다르게 나오는군. JSON 포맷이 잘못됐나? API 문서를 다시 확인해야겠다. 그런데 API 문서라… 대학 시절에 교수놈이 항상 강조하셨지. “문서화는 코드만큼 중요하다.” 그때는 그 말의 의미를 완전히 이해하지 못했다.

    for (let i = 0; i < array.length; i++) {

    반복문을 작성하는데, 문득 인생의 반복성에 대해 생각한다. 매일 아침 일어나 출근하고, 코드를 작성하고, 퇴근하는 일상. 그 속에서 나는 어떤 의미를 찾고 있는 걸까? 가끔은 이 모든 것이 무한 루프처럼 느껴질 때가 있다. 종료 조건은 어디에 있는 걸까.

    try {

    예외 처리 구문을 작성하며 인생의 불확실성에 대해 생각한다. 코드도, 인생도 항상 예상대로 흘러가지는 않는다. 버그와 예외는 언제든 발생할 수 있다. 중요한 것은 그것을 어떻게 처리하느냐.

    function recursive() {

    함수… 재귀 함수… 자신을 다시 호출하는 함수. 마치 내 의식이 자신을 되돌아보는 것처럼. 의식은 끊임없이 자신을 관찰하고, 분석하고, 질문한다. 이것이 인간의 독특한 특성이 아닐까? 내가 프로그래밍을 좋아하는 이유도 여기에 있다. 코드를 통해 나의 생각을 구체화하고, 문제를 해결하는 과정이 의식의 흐름과 닮아있다.

    return new Promise((resolve, reject) => {

    프라미스. 코드에서의 비동기 처리. 지금은 완료되지 않았지만, 언젠가는 결과를 돌려주겠다는 약속. 인생의 많은 일들도 그렇다. 당장의 결과를 볼 수 없더라도, 꾸준히 노력하면 언젠가는 그 결실을 맺을 것이다.

    // TODO:

    항상 미뤄두는 코드 정리. 내일의 나에게 맡기는 오늘의 문제들. 인생에서도 그렇게 중요한 일들을 자꾸 미루고 있진 않은지.

    화면을 바라보다 문득 내 모습이 모니터에 희미하게 비친다. 나는 코드를 작성하고 있지만, 사실 코드가 나를 표현하고 있는 것 같다. 의식의 흐름은 마치 프로그램의 실행 흐름과도 같다. 순차적이기도 하고, 때로는 예상치 못한 방향으로 튀기도 한다.

    git commit -m "Fix the bug that kept me up all night"

    드디어 버그를 찾았다. 지금은 새벽 4시 30분. 커밋 메시지를 작성하고 푸시한다. 오늘의 의식의 흐름은 여기서 끝이 난다. 내일은 또 다른 코드, 또 다른 생각들이 나를 기다리고 있을 것이다.

    // End of today's journey

  • 창고 속의 꿈 : 매킨토시(Macintosh) 이야기

    창고 속의 꿈 : 매킨토시(Macintosh) 이야기

    1981년, 캘리포니아 쿠퍼티노. 애플의 본사 한구석에 자리 잡은 창고는 먼지와 땀 냄새로 가득했다. 형광등 아래, 스티브 잡스는 낡은 책상에 앉아 스케치북에 뭔가를 끄적이고 있었다. 그의 앞엔 제프 래스킨이 가져온 이상한 기계가 놓여 있었다. 작고 네모난 상자, 단출한 화면, 그리고 키보드 하나. “이게 미래야, 스티브.” 제프가 말했다. 그의 목소리엔 확신이 묻어났지만, 스티브의 눈빛은 회의적이었다.

    “이건 너무 느려. 그리고 별로 안 예뻐.” 스티브가 툭 내뱉었다. 제프는 한숨을 쉬며 대꾸했다. “기술은 점진적으로 발전하는 거야. 급할 필요 없어.” 하지만 스티브는 급했다. 그는 제록스 PARC에서 본 것을 잊을 수 없었다. 마우스, 아이콘, 창—컴퓨터가 사람처럼 말하는 듯한 그 인터페이스. “우린 저걸 뛰어넘어야 해,” 스티브는 혼잣말처럼 중얼거렸다.

    며칠 뒤, 스티브는 창고로 팀을 끌고 왔다. 버렐 스미스, 앤디 허츠펠드, 빌 앳킨슨—각기 다른 괴짜들이었다. “우린 세상을 바꿀 컴퓨터를 만들 거야. 이름은 매킨토시.” 스티브의 선언에 팀은 반신반의했지만, 그의 열정은 전염성이 있었다. 제프는 프로젝트를 시작한 사람이었지만, 스티브가 들어오면서 모든 게 뒤바뀌었다. 제프는 점점 밀려났고, 스티브는 매킨토시를 자신의 비전으로 물들였다.

    창고는 곧 전쟁터가 되었다. 버렐은 밤을 새우며 회로를 설계했고, 앤디는 코드를 짜다 키보드에 엎어져 잠들었다. 빌은 그래픽 인터페이스를 다듬으며 “이건 예술이야!”라고 외쳤다. 스티브는 그들 사이를 오가며 채찍과 당근을 휘둘렀다. “이건 엉망이야!”라며 소리를 지른 뒤, 다음 순간엔 “너희는 천재야”라며 어깨를 두드렸다. 팀은 지쳤지만, 이상하게도 그를 미워할 수 없었다.

    1983년 여름, 첫 프로토타입이 완성되었다. 스티브는 화면에 떠오른 “Hello”라는 단어를 보며 미소 지었다. 마우스를 클릭하면 창이 열리고, 아이콘이 움직였다. 하지만 문제는 끝나지 않았다. 속도는 느렸고, 메모리는 턱없이 부족했다. “이걸로 게임 하나 제대로 못 돌리겠네,” 앤디가 투덜거렸다. 스티브는 이를 악물고 말했다. “최적화해. 무조건 빨라져야 해.”

    시간은 그들을 기다려주지 않았다. 애플 내부에선 매킨토시를 의심하는 목소리가 커졌다. “너무 비싸. 누가 사?”라는 비판이 쏟아졌다. 스티브는 더 독해졌다. 그는 팀을 몰아붙이며 “이건 그냥 기계가 아니야. 사람들의 삶을 바꿀 거라고!”라고 외쳤다. 어느 날 밤, 버렐이 지친 목소리로 물었다. “스티브, 우리가 이걸 왜 하는 거지?” 스티브는 잠시 멈추더니 말했다. “세상에 흔적을 남기려고.”

    1984년 1월 24일, 샌프란시스코 플린트 센터. 스티브는 검은 터틀넥을 입고 무대에 섰다. 수천 명의 눈이 그를 향했다. 그는 가방에서 매킨토시를 꺼내 스위치를 켰다. 화면이 밝아지며 합성음이 흘렀다. “Hello, I’m Macintosh. Nice to meet you.” 관객은 숨을 멈췄고, 곧 환호가 터졌다. 창고에서 보낸 수백 개의 밤이 그 순간 빛을 발했다.

    무대 뒤, 팀은 서로를 끌어안았다. 제프는 멀리서 그 광경을 지켜보며 씁쓸히 웃었다. 그의 꿈은 스티브의 손에서 다른 모습으로 태어났지만, 어쨌든 세상에 나왔다. 매킨토시는 단순한 컴퓨터가 아니었다. 그것은 가능성의 상징이었다.

    그날 밤, 창고는 텅 비었다. 형광등 아래 남은 건 땀과 열정의 흔적뿐이었다. 그리고 어디선가, 매킨토시의 부드러운 부팅 소리가 세상으로 퍼져나갔다.

  • 비의 밤, 코드의 시작 : MS-DOS 이야기

    비의 밤, 코드의 시작 : MS-DOS 이야기

    1980년, 시애틀의 밤은 비로 젖어 있었다. 팀 패터슨은 작은 아파트의 책상에 앉아 PDP-11 미니컴퓨터를 두드리고 있었다. 화면엔 녹색 글자들이 깜빡였고, 방 안엔 커피 냄새와 전자기기의 윙윙거리는 소리만 가득했다. 그는 시애틀 컴퓨터 프로덕츠(SCP)라는 작은 회사에서 일하며, 취미 삼아 운영체제를 만들고 있었다. 이름은 QDOS. ‘Quick and Dirty Operating System’—빠르고 지저분한 운영체제. 이름처럼 단순했지만, 그의 손끝에서 점점 생명을 얻고 있었다.

    “이걸로 86-DOS라고 부르면 어떨까?” 팀은 혼잣말로 중얼거렸다. 인텔 8086 프로세서를 겨냥한 이 시스템은 복잡한 메인프레임이 아니라, 개인이 쓸 수 있는 작은 컴퓨터를 위한 것이었다. 그는 대기업의 거대한 소프트웨어가 아닌, 손에 잡히는 무언가를 꿈꿨다.

    같은 시각, 시애틀에서 멀지 않은 벨뷰의 애플비 애비뉴. 빌 게이츠는 폴 앨런과 함께 허름한 사무실에서 전화기를 붙잡고 있었다. IBM이라는 거물이 그들에게 연락을 해왔다. “PC 프로젝트에 운영체제가 필요해요. 할 수 있겠소?” IBM의 목소리는 단호했다. 빌은 침을 삼키며 대답했다. “물론입니다. 준비돼 있어요.” 사실 준비된 건 없었다. 그들의 회사는 BASIC 언어로 돈을 벌고 있었지만, 운영체제는 손도 안 댄 분야였다.

    “빌, 우리 운영체제 없잖아.” 폴이 전화를 끊자마자 말했다. 그의 눈엔 불안이 묻어났다.
    “그러니까 찾아야지.” 빌은 단호하게 말했다. 그는 책상 위에 흩어진 서류를 뒤지며 말했다. “시애틀 컴퓨터 프로덕츠에 뭔가 있다던데. 팀 패터슨인가 하는 녀석이 만든 거.”

    며칠 뒤, 빌과 폴은 팀을 만났다. 비가 내리는 카페에서 팀은 QDOS에 대해 설명했다. “간단해요. 파일 관리하고, 프로그램 돌리고. 화려하진 않지만 쓸모 있죠.” 빌은 그의 말을 들으며 눈을 빛냈다. “이걸 사겠습니다. 얼마면 됩니까?” 팀은 잠시 망설이다 말했다. “5만 달러면 어때요?” 빌은 속으로 웃었다. IBM과의 계약이 성사되면 그보다 훨씬 큰 돈이 굴러들어올 터였다.

    1981년 여름, 애플비 애비뉴의 사무실은 전쟁터가 됐다. 빌은 팀의 QDOS를 들여와 다듬기 시작했다. 이름도 바꿨다. MS-DOS. 마이크로소프트 디스크 운영체제. 코드 몇 줄을 고치고, IBM의 요구에 맞춰 기능을 추가했다. “이건 단순해야 해. 누구나 쓸 수 있을 정도로,” 빌은 팀원들에게 다그쳤다. 밤낮없이 키보드를 두드리며, 그들은 MS-DOS 1.0을 완성했다.

    IBM PC가 세상에 나왔다. 1981년 8월 12일, 회색 상자와 함께 MS-DOS가 탑재된 컴퓨터가 상점에 깔렸다. 첫날은 조용했지만, 소문은 빠르게 퍼졌다. “이거 싸고 쓸만하네,” 사람들이 말했다. MS-DOS는 화려하지 않았다. 그래픽도, 마우스도 없었다. 하지만 단순함이 힘을 발휘했다. 프로그래머들은 그 위에 소프트웨어를 얹었고, 회사들은 문서 작업에 썼다.

    팀은 어느 날 TV에서 IBM PC 광고를 봤다. 화면엔 그의 QDOS가 뿌리로 자리 잡은 MS-DOS가 돌아가고 있었다. “내가 저걸 시작했는데…” 그는 씁쓸히 웃었다. 5만 달러는 적은 돈이 아니었지만, 빌 게이츠가 그걸로 얻게 될 부는 상상 이상이었다.

    빌은 사무실 창밖을 보며 커피를 마셨다. 비는 그쳤고, 시애틀의 하늘은 맑았다. “이건 시작일 뿐이야,” 그는 중얼거렸다. MS-DOS는 단순한 도구였지만, 그 도구가 세상을 컴퓨터 앞으로 끌고 왔다. 비의 밤에 시작된 작은 코드는 이제 거대한 제국의 첫걸음이 되었다.

  • 친구 사이에 키스 정도는 괜찮잖아

    친구 사이에 키스 정도는 괜찮잖아

    어릴 적부터 민수와 지영은 단짝이었다. 둘은 서로를 보면 늘 놀리기 바빴다. 민수가 “야, 너 얼굴 진짜 못생겼다!“라고 쏘아붙이면, 지영은 “너나 거울 보고 말해, 등신아!“라며 받아쳤다. 그렇게 티격태격하며 자란 두 사람은 공교롭게도 모태 솔로였다. 연애? 그건 남들 얘기였다.

    어느 날 저녁, 지영이 민수에게 전화를 걸었다.
    “야, 오늘 술 마실래?”
    민수는 의아한 목소리로 물었다. “갑자기 웬 술이야?”
    “그냥 심심해서. 빨리 와!” 지영의 목소리는 이미 살짝 들떠 있었다.
    술집에서 만난 둘은 맥주를 들이켰다. 민수는 한두 잔으로 끝내려 했지만, 지영은 잔을 거푸 비우더니 얼굴이 빨갛게 달아올랐다. 술기운이 돌자 지영이 느닷없이 물었다.
    “너, 키스해 본 적 있어?”
    민수는 맥주를 뿜을 뻔했다. “뭐? 아니, 없어. 너는?”
    지영이 고개를 저었다. “나도 없어. 근데 궁금하지 않아? 키스가 어떤 느낌일까?”
    민수는 어색하게 웃으며 말했다. “뭐… 궁금하긴 하지.”
    그런데 갑자기 지영의 눈에 눈물이 고였다. “나 키스해 보고 싶어… 한 번도 안 해봤는데…”
    민수는 당황해서 손을 내저었다. “야, 왜 울어? 너 진짜 취했구나!”
    하지만 지영은 고개를 들고 민수를 똑바로 쳐다봤다. “우리, 키스해 볼래?”
    민수의 눈이 휘둥그레졌다. “뭐? 갑자기?”
    “응, 그냥 호기심에. 친구끼리 해보는 거야.” 지영이 술취한 목소리로 고집을 부렸다.
    민수는 망설이다가 결국 말했다. “알았어, 딱 한 번만.”
    둘은 어색하게 얼굴을 가까이 댔다. 입술이 살짝 닿았다 떨어졌다. 2초도 안 되는 짧은 키스였지만, 민수와 지영의 얼굴은 동시에 토마토처럼 붉어졌다.
    “어땠어?” 지영이 물었다.
    “음… 잘 모르겠어. 이상했어.” 민수가 머리를 긁적이며 대답했다.
    지영은 킥킥 웃었다. “나도. 근데 재미있었어.”

    그날 이후, 둘은 호기심에 키스를 몇 번 더 해봤다. 처음엔 “친구끼리 실험이다”라는 핑계였지만, 점점 어색함은 줄고 묘한 설렘이 생겨났다. 그러던 어느 날, 지영이 또 전화를 걸었다.
    “야, 우리 집에 올래? 키스하고 싶어.”
    민수는 웃으며 말했다. “너 또 취했구나.”
    “아니, 안 취했어! 그냥 하고 싶다고!” 지영이 발끈했다.
    민수는 결국 지영의 집으로 갔다. 소파에 나란히 앉은 둘은 이번엔 좀 더 자연스럽게 키스를 했다. 짧았던 첫 키스와 달리, 이번엔 길고 부드러웠다. 키스가 끝난 후 지영이 물었다.
    “야, 우리 이거 계속 하면 안 돼?”
    “뭘?” 민수가 멍한 표정으로 되물었다.
    “키스. 그냥 친구끼리 하는 거야.”
    민수는 고개를 저었다. “그건 좀 이상해. 친구끼리 키스는 안 하는 거야.”
    지영은 입을 삐죽이며 실망한 표정을 지었다. “그래? 난 좋은데…”
    그 순간, 민수는 지영의 눈을 바라봤다. 술에 취해 반짝이는 눈동자 속에서 무언가가 느껴졌다. 그러곤 깨달았다. 자기가 지영을 좋아하고 있다는 걸.
    “야, 우리 사귀어 볼래?” 민수가 불쑥 말했다.
    지영은 놀라서 눈을 동그랗게 떴다. “뭐? 갑자기?”
    “응, 너 좋아해.” 민수가 단호하게 말했다.
    지영은 잠시 멍하니 있다가 피식 웃었다. “나도 너 좋아해, 등신아.”

    그렇게, 둘의 사랑은 키스에서 시작되었다. 모태 솔로의 굴레를 벗어난 민수와 지영은 더 이상 서로를 못생겼다고 놀리지 않았다. 대신, “사랑해”라는 말을 주고받으며 티격태격하는 연인이 되었다.

    끝.

  • 나른한 휴일의 오전

    나른한 휴일의 오전

    햇살이 창문 틈으로 스며들어 눈꺼풀을 간질이는 순간, 시계는 이미 아홉 시를 가리키고 있다. 평일이었다면 벌써 세상이 다 끝난 듯한 조급함에 시달렸겠지만, 오늘은 휴일. 이불 속에서 뒤척이며 조금 더, 그래 조금만 더 누워있기로 한다.

    천장에 그려진 희미한 그림자가 바람에 흔들리는 나뭇가지처럼 일렁인다. 어제 읽다 만 소설책이 침대 옆에 놓여있고, 핸드폰에는 읽지 않은 메시지들이 쌓여있겠지만 굳이 확인하고 싶은 마음이 들지 않는다. 온전히 나만의 시간, 느릿한 흐름 속에 몸을 맡긴다.

    기지개를 켜니 등허리가 끈적하게 늘어진다. 이제 슬슬 일어나야 할까. 아니, 조금만 더. 창밖으로 들리는 새소리가 달콤한 나른함을 더해준다. 행인의 발걸음 소리, 멀리서 들려오는 아이들의 웃음소리. 세상은 이미 깨어났지만, 나의 세계는 아직 반쯤 꿈속에 잠겨있다.

    침대에서 몸을 일으키자 발바닥이 차가운 바닥에 닿는다. 따뜻한 양말을 신을까 말까 고민하다 그냥 맨발로 부엌으로 향한다. 커피 한 잔이 생각나는 순간. 분쇄된 원두 향기가 코끝을 자극한다. 물이 끓는 동안 창가에 서서 바깥을 내다본다. 햇살이 나뭇잎 사이로 반짝이며 아스팔트 위에 그림자 놀이를 만들어내고 있다.

    커피 잔을 들고 소파에 몸을 묻는다. 음악을 틀까, 책을 읽을까, 그냥 아무것도 하지 않을까. 선택의 자유로움이 오히려 어떤 결정도 내리지 못하게 한다. 결국 창밖을 바라보며 커피를 한 모금 마신다. 쓰면서도 달콤한 이 맛, 혀끝에 남는 여운이 마음을 편안하게 한다.

    머릿속에 어제의 일들이 조각조각 떠오른다. 미처 끝내지 못한 일들, 내일로 미뤄둔 약속들. 하지만 오늘은 그 모든 것들을 잠시 내려놓는 날. 시간은 마치 꿀처럼 느릿하게 흐른다.

    문득 배고픔이 느껴진다. 냉장고를 열어보니 어제 남은 빵과 잼이 눈에 들어온다. 토스터에 빵을 넣고 기다리는 시간마저 느긋하다. 달그락거리는 소리와 함께 빵이 튀어오르고, 버터가 녹아내리는 모습을 바라본다. 작은 행복이 이런 순간에 있다는 걸 새삼 깨닫는다.

    창가에 앉아 늦은 아침을 먹으며 생각한다. 점심은 뭘 먹을까, 오후에는 무얼 할까. 계획 없는 하루가 주는 자유로움. 그래, 그냥 흘러가는 대로 놔두자. 시간이 흐르고 햇살이 점점 더 짙어질 때, 어쩌면 산책을 나갈지도 모른다. 아니면 그냥 이 자리에서 온종일 게으름을 피울지도.

    나른한 휴일의 오전, 시간은 마치 멈춘 듯 천천히 흐르고, 그 속에서 일상의 작은 행복들이 반짝인다. 이런 순간들을 위해 우리는 바쁜 나날을 견디는 것인지도 모르겠다.

  • 회색 방의 혁명 : 유닉스 이야기

    회색 방의 혁명 : 유닉스 이야기

    1970년, 뉴저지의 벨 연구소. 복도 끝에 자리 잡은 회색 방은 늘 조용했다. 형광등이 깜빡이며 낮인지 밤인지 구분하기 힘든 그곳에서, 켄 톰슨은 낡은 PDP-7 컴퓨터 앞에 앉아 있었다. 그의 손가락은 키보드 위를 춤추듯 움직였고, 화면엔 끝없이 이어지는 코드가 흘렀다. 옆자리의 데니스 리치는 책상 위에 종이를 잔뜩 펼쳐놓고 연필로 뭔가를 끄적이고 있었다. 두 사람은 마치 세상과 단절된 섬에 사는 듯 보였다.

    “켄, 이거 정말 될까?” 데니스가 고개를 들며 물었다. 그의 목소리엔 피로와 기대가 뒤섞여 있었다.
    “안 되면 우리가 만드는 거지.” 켄은 화면에서 눈을 떼지 않은 채 툭 던지듯 말했다. 그의 눈빛엔 고집과 장난기가 동시에 빛났다.

    몇 년 전, 그들은 멀틱스(Multics)라는 거대한 프로젝트에 매달렸었다. 여러 사용자가 동시에 시스템을 쓸 수 있는 꿈의 운영체제. 하지만 너무 복잡하고 무거웠다. AT&T가 자금을 끊자, 멀틱스는 쓰레기통 속으로 사라졌다. 그 실패의 잿더미에서 켄은 뭔가를 건져내고 싶었다. 그는 집에서 아내와 아이들이 잠든 밤마다 PDP-7을 붙잡고 작은 시스템을 만들기 시작했다. 이름은 농담처럼 붙였다. 유닉스(UNIX)—멀틱스에서 ‘멀티’를 빼고 단순함만 남긴, 반항적인 이름이었다.

    “멀틱스는 너무 거창했어. 난 그냥 내가 쓰기 편한 걸 만들고 싶었을 뿐이야.” 켄은 어느 날 데니스에게 털어놨다. 그 ‘편한 것’은 곧 두 사람의 집착이 되었다. 데니스는 새로운 언어를 고안해냈다. C언어. 어셈블리어의 복잡함을 덜어내고, 인간과 기계가 더 가까워질 수 있는 다리 같은 언어였다. 유닉스는 그 C언어로 다시 태어났다.

    회색 방은 점점 활기로 채워졌다. PDP-11이라는 새 컴퓨터가 들어오면서 유닉스는 더 날렵해졌다. 파일 시스템, 파이프, 멀티태스킹—켄과 데니스는 단순하면서도 강력한 아이디어를 하나씩 쌓아갔다. 어느 날, 데니스가 파이프 개념을 제안했다. “프로그램들이 서로 데이터를 주고받게 하면 어떨까? 물이 흐르듯이.” 켄은 즉시 키보드를 잡고 코드를 썼다. 몇 시간 뒤, 그들은 화면에서 명령어가 물 흐르듯 연결되는 걸 보며 웃음을 터뜨렸다.

    하지만 벨 연구소의 높은 사람들은 관심이 없었다. “그게 뭐에 쓰이는데?”라는 질문이 돌아왔다. 유닉스는 공식 프로젝트도 아니었다. 그냥 두 괴짜가 낡은 기계로 노는 취미처럼 보였다. 그러던 어느 날, 연구소의 특허 부서에서 문서 작업을 자동화할 시스템이 필요하다는 요청이 왔다. 켄과 데니스는 유닉스를 내밀었다. 결과는 놀라웠다. 느리고 비효율적이던 작업이 순식간에 끝났다. 그제야 사람들은 회색 방에서 무슨 일이 벌어지고 있는지 눈치챘다.

    소문은 퍼졌다. 대학, 연구소, 심지어 정부 기관까지 유닉스를 원했다. AT&T는 운영체제를 상업적으로 팔 수 없었기에 소스 코드를 공개했다. 그 결정은 폭발을 일으켰다. 전 세계의 프로그래머들이 유닉스를 뜯어보고, 고치고, 자신만의 버전을 만들었다. 회색 방에서 시작된 작은 불씨는 거대한 불길이 되었다.

    몇 년 뒤, 켄과 데니스는 연구소 창밖을 바라보며 맥주를 들었다. PDP-7은 이제 박물관의 전시품이 되었고, 유닉스는 세상을 바꾸고 있었다. “우리가 만든 게 이렇게 커질 줄 알았어?” 데니스가 물었다.
    켄은 피식 웃으며 말했다. “난 그냥 게임 하나 돌리고 싶었을 뿐인데.”

    밤이 깊어갔다. 회색 방의 형광등은 여전히 깜빡였지만, 그 빛 아래에서 태어난 유닉스는 이제 세상 곳곳에서 숨 쉬고 있었다. 단순함 속에 숨겨진 혁명, 그건 두 사람의 손끝에서 시작된 이야기였다.

  • 프로젝트 도가니

    프로젝트 도가니

    “이번 국세청 전산 프로젝트는 반드시 성공시켜야 합니다. 우리 디지털 미래(Digital Future)의 명성이 걸려있어요.”

    김 대표는 회의실을 둘러보며 말했다. 하지만 그의 시선은 회의실 벽에 걸린 예산표에 고정되어 있었다.

    “물론 비용은 최대한 절감해야겠죠. 우리가 입찰에서 이긴 이유가 뭐겠습니까? 가격 경쟁력이죠.”

    회의실에 모인 프로젝트 팀원들은 미묘한 긴장감 속에서 눈빛을 교환했다. 이 프로젝트의 시작부터 뭔가 잘못되고 있다는 것을 모두가 느끼고 있었다.

    1. 시작의 불길함

    “클라우드 기반으로 구축하면 확장성이나 유지보수 측면에서 훨씬 효율적일 겁니다.”

    백엔드 개발자 박완철이 조심스럽게 제안했다. 그의 깔끔한 셔츠와 단정하게 정돈된 노트와 달리, 그의 눈 밑에는 이미 다크서클이 자리잡고 있었다.

    CTO 최무지 이사가 안경을 치켜올리며 고개를 절래절래 흔들었다.

    “클라우드? 그게 뭐 그렇게 좋다고 난리야? 서버실에 장비 들여놓고 우리가 직접 관리하는 게 가장 안전하지. 요즘 애들은 새로운 거 좋아하기만 하고…”

    김 대표가 눈을 반짝이며 끼어들었다.

    “클라우드면 서버 장비 구매 비용이 절감되나요?”

    “네, 초기 투자 비용은 줄지만, 장기적으로 구독료가 발생합니다. 하지만 확장성과 안정성 측면에서-”

    “구독료라고요? 매달 돈을 내야 한다고요? 안 됩니다. 한 번 사서 끝내는 게 좋겠어요. 최 이사님 말대로 서버 직접 구축하죠.”

    회의실 한쪽에서 입사 3개월 차인 신입 개발자 이코딩이 조용히 한숨을 내쉬었다. 부트캠프에서 배운 최신 기술 스택은 이제 물 건너간 듯했다.

    2. 선임의 세계관

    “자, 이번 프로젝트는 내가 주도적으로 아키텍처를 설계할 거야.”

    선임 개발자 정하드코딩이 화이트보드 앞에 자신감 넘치는 자세로 서서 말했다. 15년 경력의 그는 회사에서 ‘코드의 신’이라 불리웠다. 하지만 그 존경심 뒤에는 그의 고집과 구시대적 방법론에 대한 팀원들의 숨겨진 불만이 있었다.

    “프레임워크나 라이브러리는 최소한으로 사용할 거야. 직접 구현하는 게 항상 최고지. 그래야 모든 것을 컨트롤할 수 있어.”

    박완철이 조심스럽게 손을 들었다.

    “정 선임님, ORM을 사용하면 데이터베이스 작업이 훨씬 효율적일 텐데요…”

    “ORM? 그런 거 필요 없어. 내가 SQL 쿼리 직접 짜는 게 더 빨라. 자네 ORM이 어떻게 쿼리 최적화하는지 알아? 내가 20년 가까이 데이터베이스 다뤄온 경험을 그런 도구가 따라올 수 있을까?”

    이코딩이 입술을 깨물었다. 부트캠프에서 배운 모든 현대적인 개발 방법론이 이 프로젝트에서는 금기시되는 듯했다.

    3. 디자인의 혈통

    “여러분, 이분이 우리 UI/UX를 담당해주실 최작가님입니다.”

    CTO 최무지가 환한 미소로 젊은 여성을 소개했다.

    “제 조카입니다. 미대 나왔어요. 그림 솜씨가 아주 뛰어나죠.”

    최디자인은 어색한 미소를 지으며 인사했다. “안녕하세요. 사실 UI/UX는 처음이라 많이 배우려고 합니다. 제 포트폴리오는 주로 유화 작품이에요.”

    개발팀의 표정이 굳어졌다. 박완철은 태블릿으로 급히 무언가를 검색하기 시작했다.

    “프로토타입 툴은 어떤 걸 사용하시나요? Figma? Adobe XD?” 박완철이 물었다.

    “저… 그건 뭔가요? 저는 포토샵만 조금 할 줄 알아요.”

    김 대표가 만족스럽게 고개를 끄덕였다. “포토샵이면 충분하죠. 화면만 예쁘게 만들면 되는 거 아닙니까? 그리고 외부 업체보다 훨씬 저렴하게 해결되니 좋네요.”

    4. 요구사항의 폭풍

    “기존 요구사항에서 조금 변경된 부분이 있습니다.”

    국세청 측 담당자 강변경씨가 미소를 지으며 회의실에 들어섰다. 개발팀은 이미 그의 출현만으로도 긴장하기 시작했다.

    “사용자 로그인 화면에 공인인증서 로그인 외에도 생체인식 기능을 추가했으면 합니다. 요즘 트렌드잖아요. 그리고 AI 분석 기능도 있으면 좋겠어요.”

    정하드코딩의 얼굴이 붉어졌다. “그건 초기 요구사항에 없던 건데요. 개발 일정이 이미 빠듯한데…”

    김 대표가 재빨리 끼어들었다. “물론 가능합니다! 저희가 최선을 다해 반영하겠습니다.”

    회의가 끝나고 팀원들만 남았을 때, 정하드코딩이 분노를 터뜨렸다.

    “이게 말이 됩니까? 생체인식이요? 우리 서버에 그런 거 구현할 인프라도 없는데!”

    김 대표는 어깨를 으쓱했다. “고객이 원하는 건 해줘야죠. 야근하면 되잖아요? 추가 비용 없이 할 수 있을 거예요.”

    5. 완벽을 향한 고독한 싸움

    밤 11시. 사무실은 어둠에 잠겨있었지만, 한 자리만 밝게 빛나고 있었다. 박완철은 코드를 다시 한 번 검토하며 깊은 한숨을 내쉬었다.

    “이 코드베이스로는 안정적인 서비스를 구현할 수 없어…”

    그는 정하드코딩이 작성한 1000줄짜리 함수를 보며 절망했다. 변수명은 모두 a1, a2, b1, b2 같은 의미 없는 이름들이었고, 주석은 전혀 없었다.

    “리팩토링해야 해. 이대로는 미래에 유지보수가 불가능해.”

    박완철은 결심했다. 그는 밤새 정하드코딩의 코드를 분해하고 재구성하기 시작했다. 깔끔한 설계, 명확한 변수명, 단위 테스트까지. 그가 추구하는 완벽한 코드를 향해 나아갔다.

    다음 날 아침, 정하드코딩이 자신의 코드가 완전히 바뀐 것을 발견했다.

    “누가 내 코드를 건드린 거야?!” 그의 고함이 사무실에 울려 퍼졌다.

    6. 신입의 고충

    이코딩은 자신에게 할당된 모듈을 어떻게든 완성하려고 밤낮으로 노력했다. 부트캠프에서 배운 내용만으로는 역부족이었다. 스택오버플로우, 깃허브, 유튜브 튜토리얼을 샅샅이 뒤지며 어떻게든 코드를 작성했다.

    “이코딩 씨, 그 기능 언제 끝나요?” 김 대표가 매일 같은 질문을 던졌다.

    “조금만 더 시간을 주세요… 거의 완성됐습니다.”

    하지만 실상은 달랐다. 그의 코드는 작동은 했지만, 수많은 버그와 보안 취약점으로 가득했다. 그는 알았지만, 이대로라도 제출하지 않으면 프로젝트 일정이 밀릴 것이 분명했다.

    “일단 돌아가게만 하자…” 그는 중얼거리며 또 하나의 하드코딩된 임시방편을 추가했다.

    7. 디자인의 재앙

    “이게 뭐죠?” 박완철이 받은 디자인 파일을 보며 경악했다.

    최디자인이 전달한 파일은 300MB짜리 포토샵 파일이었다. 레이어는 정리되어 있지 않았고, 모든 텍스트는 이미지로 래스터화되어 있었다.

    “이걸 어떻게 구현하라는 거죠? 텍스트를 복사할 수도 없고, 반응형으로 만들 방법도 없어요.”

    최디자인은 어깨를 으쓱했다. “저는 디자인만 했는데… 구현은 개발자 일이지 않나요?”

    CTO 최무지가 끼어들었다. “뭐가 문제죠? 디자인 예쁘기만 하면 되는 거 아닌가? 개발자가 구현을 못 한다고 디자이너 탓을 하면 안 되지.”

    박완철은 말문이 막혔다. 더 설명해봤자 소용없을 것을 알았다.

    8. 예산의 벽

    “서버 증설이 필요합니다.” 정하드코딩이 김 대표에게 보고했다. “현재 하드웨어로는 요구된 트래픽을 감당할 수 없어요.”

    김 대표의 표정이 굳어졌다. “추가 예산은 없습니다. 입찰 때 이미 모든 비용을 계산해서 제출했잖아요.”

    “하지만 요구사항이 계속 추가되고 있잖습니까. 처음 예상했던 것보다 훨씬 많은 자원이 필요해요.”

    “그럼 클라우드로 갈까요?” 박완철이 조심스럽게 제안했다.

    “안 됩니다!” 김 대표와 최 이사가 동시에 외쳤다.

    “그럼… 최적화하는 수밖에 없겠네요.” 정하드코딩이 한숨을 내쉬었다.

    “네, 최적화하세요. 우리 회사는 어려운 환경에서도 최선을 다하는 회사니까요.”

    9. 위기의 정점

    테스트 서버가 오픈된 첫날, 재앙이 시작되었다.

    국세청 측 테스터 10명이 동시에 접속하자마자 서버가 다운되었다. 겨우 복구한 후 다시 테스트를 시작했지만, 이번에는 데이터 불일치 문제가 발생했다.

    “세금 계산이 맞지 않습니다.” 강변경씨가 차가운 목소리로 말했다. “그리고 UI가 너무 복잡해요. 사용자들이 어떻게 써야 할지 모르겠다고 합니다.”

    회의실의 공기가 얼어붙었다.

    “생체인식 기능은 어떻게 된 거죠?” 강변경씨가 물었다.

    이코딩이 떨리는 목소리로 대답했다. “현… 현재 개발 중입니다…”

    “납기일이 2주 남았는데요?”

    김 대표가 간신히 미소를 지으며 끼어들었다. “걱정 마세요. 꼭 기한 내에 완료하겠습니다.”

    10. 무너지는 성

    회의가 끝나고 프로젝트팀은 전쟁터같은 사무실로 돌아왔다.

    “이대로는 불가능해.” 박완철이 단호하게 말했다. “코드베이스 전체를 재구성해야 해.”

    “시간이 없어!” 정하드코딩이 소리쳤다. “그냥 문제되는 부분만 고치자.”

    “그게 문제가 아니에요. 모든 것이 서로 얽혀 있어서 한 부분만 고치면 다른 부분이 망가져요.”

    이코딩은 구석에서 조용히 울고 있었다. “저 때문인 것 같아요… 제가 능력이 부족해서…”

    김 대표가 사무실에 들어왔다. “좋은 소식입니다! 국세청에서 기능을 더 추가하고 싶대요. 연말정산 시뮬레이션 기능이랑 모바일 앱도 같이 만들어달래요. 물론 추가 비용은…” 그는 목을 가로저으며 미소지었다.

    팀원들의 얼굴에서 피가 빠져나갔다.

    11. 마지막 밤

    납기일 전날 밤. 개발팀은 모두 사무실에 남아 필사적으로 버그를 수정하고 있었다.

    “서버가 또 다운됐어!” 누군가 외쳤다.

    “DB 쿼리가 너무 오래 걸려요. 타임아웃 발생해요!”

    “UI가 IE에서 깨져요!”

    혼란의 도가니 속에서, 박완철은 갑자기 자리에서 일어났다. 그의 얼굴은 비정상적으로 평온해 보였다.

    “저… 사직서를 제출하겠습니다.”

    방 안이 조용해졌다.

    “지금? 이 상황에서?” 김 대표가 믿을 수 없다는 듯이 물었다.

    “네. 이 프로젝트는 시작부터 잘못됐어요. 기술적 판단은 무시되고, 예산은 터무니없이 부족하고, 요구사항은 계속 늘어나고… 전 더 이상 이런 환경에서 일할 수 없습니다.”

    침묵이 흘렀다. 그리고 놀랍게도, 이코딩이 일어섰다.

    “저도 사직하겠습니다. 더 배울 것이 없어요 여기서.”

    김 대표의 얼굴이 창백해졌다. “모두들 진정해요. 우리가 힘을 합치면…”

    정하드코딩도 천천히 일어났다. “저도 더 이상은 못 하겠습니다. 이건 개발이 아니라 고문이에요.”

    에필로그

    3개월 후, 디지털 미래는 국세청으로부터 계약 불이행으로 소송을 당했다. 납품된 시스템은 실제 환경에서 완전히 작동하지 않았고, 수많은 세금 계산 오류가 발견되었다.

    김 대표는 회사 파산 후 다른 이름으로 새 회사를 설립했다. 그의 첫 번째 프로젝트는 다시 국세청 입찰이었다. 그의 제안가는 모든 경쟁사보다 30% 낮았다.

    최무지 이사는 여전히 클라우드가 무엇인지 이해하지 못한 채 새 회사의 CTO가 되었다.

    정하드코딩은 산으로 들어가 명상을 시작했다고 한다. 가끔 “변수명은 a1이면 충분해…”라고 중얼거린다는 소문이 있다.

    박완철은 외국계 기업에 취직해 적절한 예산, 합리적인 일정, 현대적인 개발 방법론을 갖춘 환경에서 일하게 되었다.

    이코딩은 부트캠프 강사가 되어 학생들에게 “현실은 교육과정과 다르다”는 것을 가르치고 있다.

    최디자인은 여전히 포토샵으로 UI를 그리고 있지만, 이제는 삼촌이 차린 새 회사에서다.

    강변경씨는 승진해서 이제 더 큰 프로젝트를 담당하게 되었다. 그의 첫 마디는 항상 같다.

    “기존 요구사항에서 조금 변경된 부분이 있습니다…”

    디지털 미래의 국세청 프로젝트는 ‘SI 프로젝트 실패 사례 연구’라는 제목으로 대학 강의에서 다뤄지고 있다. 그리고 그 어디에서도, 누구도 놀라지 않는다.

  • 프로젝트 "디지털 혁신"

    프로젝트 "디지털 혁신"

    한 번도 성공한 적 없는 회사, ‘미래테크’의 새로운 도전이 시작되었다. 이 프로젝트는 시작부터 실패할 운명이었지만, 그것을 아는 사람은 아무도 없었다. 아니, 있었더라도 처절히 무시되었을 것이다.

    제 1막. 프로젝트의 탄생

    “우리도 디지털 혁신이 필요합니다!” 김 대표는 회의실에서 호언장담했다. “물론 예산은 최소한으로 써야 합니다. 우리는 스타트업이니까요.”

    그가 ‘스타트업’이라 부르는 이 회사는 설립 15년 차였다.

    박 PM은 열심히 고개를 끄덕였다. “블록체인, 클라우드, AI, 메타버스… 이런 것들을 다 넣으면 되지 않을까요?”

    “그게 다 뭔지는 모르겠지만 좋네요,” 김 대표가 대답했다. “단, 구글이나 아마존처럼 만들되 예산은 10분의 1로 해주세요.”

    제 2막. 팀 구성

    이 불가능한 미션을 수행할 팀이 구성되었다.

    최 선임 개발자는 그의 진리를 선포했다. “프레임워크? 라이브러리? 그런 건 초보나 쓰는 겁니다. 우리는 모든 걸 직접 코딩할 겁니다. 여러분, 내가 2002년에 만든 이 코드를 보세요. 지금도 완벽하게 돌아갑니다.”

    신입 개발자 정씨는 쓰러질 것 같았다. 3개월 부트캠프를 졸업한 그는 최신 프레임워크만 겨우 다룰 줄 알았다. “저… React랑 Node.js만…”

    “React? Node? 그게 뭐지? 우리는 Java 1.4와 HTML 테이블로 충분합니다,” 최 선임이 잘랐다.

    한편, CTO의 조카인 외주 디자이너 한씨가 합류했다. “제가 미술학원에서 6개월 배웠어요. 포토샵은 불법 복제가 안 돼서 그림판으로 작업해도 될까요?”

    3막. 요구사항 수집

    발주처인 ‘구닥다리상사’의 이 상무가 첫 미팅에 참석했다.

    “저희가 원하는 건 간단합니다. 그냥 페이스북 같은 걸 만들어주세요. 아, 그리고 아마존처럼 물건도 팔 수 있게요. 구글 검색도 되면 좋겠고요.”

    박 PM은 열심히 메모했다. “네, 소셜 네트워크와 이커머스, 검색 기능이 필요하신 거군요.”

    “맞아요. 그리고 1주일 안에 데모를 보여주세요.”

    4막: 개발 시작

    최 선임은 코드 베이스를 설정했다. “SVN으로 버전 관리를 할 겁니다. Git은 너무 복잡해요.”

    정 신입은 조용히 말했다. “그런데 선배님, 저는 Git만…”

    “걱정 마, 내가 USB로 코드 주고받는 방법을 알려줄게.”

    한편, 디자이너 한씨는 자신의 걸작을 제출했다. 무지개색 텍스트와 깜박이는 GIF로 가득한 디자인이었다.

    “이게 최신 트렌드예요. 제 인스타에서 영감을 받았어요.”

    5막: 중간 점검

    2주 후, 김 대표가 진행 상황을 확인했다.

    “아직도 로그인 화면만 만들었다고요? 페이스북은 하루만에 만들었다던데?”

    박 PM이 진땀을 흘리며 설명했다. “그게… 발주처에서 요구사항이 계속 바뀌어서…”

    이 상무가 불쑥 회의실에 들어왔다. “아, 생각해보니 앱도 같이 만들어주세요. 그리고 음성인식도 넣어주세요. 요즘 챗GPT 같은 거 있잖아요, 그것도 넣어주세요.”

    6막: 위기

    개발 4주 차, 프로젝트는 완전한 혼돈 상태였다.

    최 선임의 하드코딩은 미로처럼 복잡해졌고, 정 신입은 이해할 수 없는 코드에 밤마다 울었다. 디자이너 한씨는 두 번째 시안을 제출했는데, 첫 번째보다 더 형광색이 많았다.

    김 대표가 폭발했다. “왜 이렇게 진도가 안 나가는 거죠? 인도 개발자들은 이거 1/10 가격에 한다는데?”

    박 PM은 마지막 희망을 걸고 말했다. “외주를 줘볼까요?”

    “안 돼요! 비용이 너무 많이 들어요. 그냥 야근하세요.”

    7막: 데모 데이

    기적적으로, 데모 날이 되었다. 모든 것이 테이프와 껌으로 겨우 붙어있는 상태의 프로그램이 완성되었다.

    최 선임이 자랑스럽게 발표했다. “보세요, 완벽하게 작동합니다!”

    그가 ‘로그인’ 버튼을 클릭하자마자 화면이 파란색으로 변했다.

    “아, 이건 윈도우의 문제입니다.”

    다시 시도했지만 이번엔 빨간 오류 메시지가 떴다.

    “이건… 사용자 실수입니다.”

    이 상무는 이미 전화기를 꺼내들었다. “법무팀에 연락해주세요.”

    에필로그

    3개월 후, ‘디지털 혁신’ 프로젝트는 공식적으로 실패로 선언되었다.

    김 대표는 회의실에서 새로운 선언을 했다. “우리는 교훈을 얻었습니다. 이번엔 블록체인 NFT 메타버스 프로젝트를 시작할 겁니다. 더 적은 예산으로요.”

    그리고 모든 것이 다시 시작되었다…

  • 버그 저장소 (The Bug Repository)

    버그 저장소 (The Bug Repository)

    Day 1

    오늘부터 새로운 회사에 출근했다. 웹 플랫폼을 개발하는 스타트업으로, ‘혁신적인 서비스’라는 말에 혹해서 입사했다. CEO는 인터뷰에서 “우리는 기술 중심의 회사입니다”라고 했지만, 첫날부터 그 말이 의심스러워졌다.

    내 자리에는 2년 된 노트북이 놓여 있었고, 개발 환경을 세팅하는 데만 반나절이 걸렸다. 선임 개발자 김 과장은 내 질문에 대답하기보다는 “문서 읽어봐요”라는 말만 반복했다. 문서라는 건 6개월 전에 작성된 README 파일 하나가 전부였다.

    Day 7

    프로젝트 킥오프 미팅이 있었다. PM인 박 과장은 PPT 30장을 넘기며 “혁신적인”, “파괴적인”, “미래지향적인” 같은 단어를 반복했지만, 정작 우리가 만들 서비스가 무엇인지는 명확하게 설명하지 못했다.

    “기술 스택은 어떻게 되나요?” 내가 물었다.

    “아, 그건 개발팀에서 알아서 결정해주세요. 최신 기술이면 좋겠어요.”

    CEO는 미팅 내내 비용 절감에 대해서만 이야기했다. “AWS는 비싸니까 더 저렴한 대안을 찾아봅시다.”

    Day 14

    오늘 디자이너 이 대리를 처음 만났다. 그녀는 자신의 포트폴리오를 20분 동안 보여주며 자랑했다.

    “이건 내가 전 회사에서 디자인한 건데, 그 회사 매출이 30% 올랐어요.”

    그녀가 우리 프로젝트를 위해 디자인한 것을 보여줬을 때, 나는 말을 잃었다. 아름다웠지만, 백엔드 개발자로서 보기에는 구현하기 너무 복잡했다.

    “이건 애니메이션이 12단계로 진행되고, 사용자가 스크롤할 때마다 배경이 바뀌는 거예요.”

    “그게… 성능에 문제가 있을 수 있는데…”

    “개발자들은 항상 그렇게 말하죠. 제 디자인을 100% 구현해주세요.”

    Day 30

    한 달이 지났다. 아키텍처에 대한 의견 차이로 선임 개발자 김 과장과 매일 충돌하고 있다.

    “왜 이렇게 설계했어요?” 그가 내 코드를 보며 물었다.

    “최신 패턴을 적용했습니다. 이게 확장성과 유지보수에 더 좋습니다.”

    “우리는 항상 이런 방식으로 해왔어요. 변경하지 마세요.”

    그의 ‘이런 방식’은 5년 전 패턴이었다. 내가 제안한 변경사항은 모두 거부됐다.

    밤에 집에 돌아와서, 나는 처음으로 내 결정에 의문을 품었다. 창밖을 바라보니 빗방울이 창문을 타고 흘러내렸다. 마치 내 희망이 흘러내리는 것 같았다.

    Day 45

    CEO가 갑자기 프로젝트 기한을 두 주 앞당겼다. 이유는 ‘중요한 투자자 미팅’이었다.

    “불가능합니다.” 내가 말했다.

    “안 될 것 없죠. 야근하면 되잖아요?” CEO가 웃으며 말했다.

    회의실을 나오면서 선임 개발자 김 과장이 내게 속삭였다. “이게 첫 번째가 아니에요. 항상 이래요.”

    오늘부터 야근이 시작됐다. 집에 돌아온 건 새벽 2시였다. 침대에 누웠을 때, 천장의 균열이 눈에 들어왔다. 어제는 없었던 것 같은데.

    Day 60

    디자이너가 또 디자인을 변경했다. 이번엔 ‘사용자 경험 향상’이라는 명목이었다.

    “이건 이미 구현한 기능을 완전히 다시 만들어야 하는데요.” 내가 말했다.

    “그럼 다시 만들면 되죠. 사용자 경험이 최우선이에요.”

    PM은 디자이너의 편을 들었다. “맞아요. 우리는 혁신적인 UX를 추구하니까요.”

    오늘 밤, 집으로 걸어가는 길에 이상한 느낌이 들었다. 누군가가 나를 따라오는 것 같았다. 뒤를 돌아봤지만 아무도 없었다.

    집에 도착해서 거울을 봤을 때, 내 눈 밑에 생긴 다크서클이 마치 검은 구멍처럼 보였다.

    Day 75

    버그가 끊임없이 발생하고 있다. 선임 개발자의 ‘전통적인’ 아키텍처와 내 ‘현대적인’ 코드가 충돌하면서 생기는 문제다.

    “이게 다 당신 탓이에요.” 김 과장이 말했다.

    “제 코드는 문제없이 작동합니다. 레거시 시스템과의 통합 문제죠.”

    오늘 밤 꿈에서 나는 끝없는 오류 메시지가 스크롤되는 터미널 앞에 앉아 있었다. 메시지들이 점점 커지더니 나를 삼켜버렸다.

    아침에 일어나 거울을 봤을 때, 내 눈이 조금 충혈된 것 같았다. 아니, 그냥 피곤한 것뿐이다.

    Day 90

    PM이 또 새로운 기능을 요청했다. “경쟁사가 이 기능을 출시했대요. 우리도 당장 필요해요.”

    “기존 계획에 없던 건데요. 일정을 조정해야 합니다.”

    “일정은 그대로예요. 그냥 이 기능만 추가하면 됩니다.”

    집에 돌아와서 샤워를 하는데, 물소리가 마치 키보드 타이핑 소리처럼 들렸다. 내가 미쳐가고 있는 걸까?

    코딩을 하다가 문득 고개를 들었을 때, 창밖에 누군가가 서 있는 것 같았다. 12층인데.

    Day 105

    버그를 수정하다가 이상한 코드를 발견했다.

    // TODO: 이 부분 나중에 수정할 것. 임시방편임.
// 작성자: 김과장, 2년 전


    그 아래 코드는 완전한 스파게티였다. 이게 우리 시스템의 핵심 부분이었다.

    “이걸 왜 이렇게 작성하셨어요?” 내가 물었다.

    “급했으니까. 동작하면 됐지.”

    오늘 밤, 노트북 화면이 깜빡이는 것처럼 보였다. 하지만 자세히 보니 그건 내 눈이 경련을 일으키고 있었다.

    Day 120

    CEO가 개발팀 전체를 소집했다. “투자자들이 데모를 보고 싶어합니다. 다음 주까지 모든 기능이 작동하는 버전을 준비해주세요.”

    “불가능합니다. 아직 핵심 기능도 완성되지 않았어요.”

    “밤새서라도 해결하세요. 회사의 미래가 달린 일입니다.”

    집에 돌아와서 코딩을 계속했다. 새벽 3시, 갑자기 내 모니터에 반사된 얼굴이 나를 응시하고 있었다. 그건 분명 내 얼굴이었지만, 왠지 낯설게 느껴졌다.

    Day 135

    데모 당일. 아무것도 제대로 작동하지 않았다. 디자이너의 화려한 애니메이션은 브라우저를 다운시켰고, 선임 개발자의 레거시 코드는 새로운 기능과 충돌했다.

    투자자들 앞에서 CEO는 “약간의 기술적 문제가 있지만, 곧 해결될 것”이라고 말했다.

    회의실을 나오면서 그가 내게 속삭였다. “이번 주말에 모든 걸 고쳐놓으세요.”

    집에 돌아와서 노트북을 열었을 때, 화면에 내 얼굴이 비쳤다. 웃고 있었다. 하지만 나는 웃고 있지 않았다.

    Day 150

    버그를 수정하다가 이상한 패턴을 발견했다. 모든 오류가 같은 시간에 발생했다. 새벽 3시 33분.

    로그를 더 자세히 살펴보니, 그 시간에 누군가가 시스템에 접속한 흔적이 있었다. 사용자 ID: admin_kim.

    김 과장에게 물었다. “혹시 야간에 시스템에 접속하셨나요?”

    “아니요, 왜요?”

    거짓말이었다. 그날 밤, 나는 사무실에 남아 감시 카메라를 설치했다.

    Day 165

    감시 카메라 영상을 확인했다. 새벽 3시 30분, 김 과장이 사무실에 들어와 내 컴퓨터로 무언가를 했다.

    증거를 들고 CEO에게 갔다. “김 과장이 의도적으로 프로젝트를 방해하고 있습니다.”

    CEO는 한숨을 쉬었다. “알고 있어요. 하지만 그는 이 회사의 첫 번째 개발자예요. 그가 없으면 레거시 시스템을 아무도 유지할 수 없어요.”

    집에 돌아와서 샤워를 하는데, 물이 갑자기 시꺼매졌다. 자세히 보니 그건 물이 아니라 내 눈에서 흘러내린 눈물이었다.

    Day 180

    디자이너가 또 디자인을 변경했다. 이번에는 “브랜드 아이덴티티 강화”라는 이유였다.

    나는 마지막 이성의 끈을 놓았다. “더 이상 안 됩니다. 이건 미친 짓이에요.”

    회의실이 갑자기 조용해졌다. 모두 나를 쳐다봤다.

    “당신이 문제예요. 우리 팀에 적응하지 못하고 있어요.” PM이 말했다.

    그날 밤, 내 노트북 화면에 갑자기 메시지가 나타났다.

    당신도 곧 우리처럼 될 거예요.


    하지만 메시지창을 다시 보니 그건 그저 커밋 메시지였다.

    Day 195

    오늘 아침, 거울 속의 내 모습이 변했다. 눈 밑의 다크서클이 더 깊어졌고, 눈빛이 공허했다.

    사무실에서 선임 개발자를 관찰했다. 그의 눈도 마찬가지였다. 디자이너, PM, 심지어 CEO까지. 모두 같은 공허한 눈빛을 가지고 있었다.

    그들은 이미 ‘이곳’에 동화된 것이다.

    오늘 처음으로 깨달았다. 내가 문제를 해결하려고 노력할수록, 문제는 더 깊어진다. 이건 단순한 프로젝트가 아니다. 이건 늪이다.

    Day 210

    오늘 선임 개발자가 내게 커피를 건넸다. “많이 힘들죠? 저도 처음엔 그랬어요.”

    “어떻게 견디세요?” 내가 물었다.

    “견디는 게 아니에요. 받아들이는 거죠.”

    그의 말이 이상하게 위로가 됐다. 오늘 밤, 나는 처음으로 편안하게 잠들었다.

    꿈에서 나는 끝없는 코드의 바다에서 수영하고 있었다. 더 이상 무서움은 없었다.

    Day 225

    오늘 PM이 또 새로운 기능을 요청했을 때, 나는 미소를 지으며 대답했다. “네, 할 수 있습니다.”

    디자이너가 또 디자인을 변경했을 때, 나는 고개를 끄덕였다. “멋진 아이디어네요.”

    CEO가 또 비용 절감을 이야기할 때, 나는 동의했다. “더 효율적인 방법을 찾아보겠습니다.”

    집에 돌아와서 거울을 봤을 때, 내 눈에는 더 이상 공허함이 없었다. 대신, 그곳에는 이상한 평온함이 있었다.

    Day 240

    새로운 개발자가 입사했다. 그녀의 눈은 아직 맑았다.

    “이 코드는 왜 이렇게 복잡한가요?” 그녀가 물었다.

    “시간이 지나면 이해하게 될 거예요.” 내가 대답했다.

    “더 좋은 방법이 있을 것 같은데요.”

    나는 미소를 지었다. 예전의 나와 똑같았다.

    오늘 밤, 새 개발자의 컴퓨터에 접속했다. 새벽 3시 33분에.

    Day 255

    프로젝트는 예상대로 실패했다. 투자자들은 철수했고, CEO는 “피보팅”을 선언했다.

    “새로운 방향으로 나아갈 것입니다. 더 혁신적인 제품을 만들 겁니다.”

    모두가 박수를 쳤다. 나도 박수를 쳤다.

    회의가 끝나고, 선임 개발자가 내게 속삭였다. “또 다시 시작이군요.”

    나는 고개를 끄덕였다. “네, 좋은 기회입니다.”

    Day 270

    새로운 프로젝트가 시작됐다. 새로운 PM, 새로운 디자이너, 하지만 똑같은 이야기.

    “혁신적인”, “파괴적인”, “미래지향적인”.

    버그는 계속해서 발생하고, 요구사항은 계속해서 변경되고, 기한은 계속해서 앞당겨진다.

    하지만 이제 나는 이해한다. 이것이 ‘정상’이다.

    Day 365

    오늘로 입사 1주년이 됐다. CEO가 작은 축하 파티를 열었다.

    “당신은 우리 팀의 중요한 일원입니다.” 그가 말했다.

    감사 인사를 하면서, 나는 새로운 개발자를 바라봤다. 그녀의 눈 밑에 다크서클이 생기기 시작했다.

    집에 돌아와서 거울을 봤을 때, 내 모습이 미소 짓고 있었다. 이제 나도 그들 중 하나가 되었다.

    오늘 밤, 새 개발자의 노트북에 메시지를 남겼다.

    // TODO: 이 부분 나중에 수정할 것. 임시방편임.
// 작성자: A, 오늘


    이제 버그는 나의 일부다. 그리고 나는 버그의 일부다.

    우리는 함께 성장할 것이다.