[태그:] 창작

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

    프로젝트 "디지털 혁신"

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

    제 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, 오늘


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

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

  • 어느 소프트웨어 프로젝트의 최후

    어느 소프트웨어 프로젝트의 최후

    1월: 시작의 달

    프로젝트 킥오프 미팅이 열렸다. 김치운 CEO는 회의실 전등 중 절반을 껐다.

    “전기세도 아껴야죠. 어차피 PPT 화면은 밝으니까 볼 수 있잖아요? 그리고 이 프로젝트, 예산이 빠듯하니 개발자들 야근할 때 치킨은 일주일에 한 번만 시켜주세요. 나머지는 컵라면으로.”

    박무지 CTO는 미팅 후 기술 스택을 발표했다.

    “저희는 안정적인 시스템을 구축하기 위해 Visual Basic 6.0과 Access 데이터베이스를 사용하겠습니다. 클라우드? 그게 뭐죠? 우리 지하실에 서버 두 대 놓으면 충분합니다. Docker? 컨테이너? 그런 거 필요 없어요. 그냥 exe 파일 하나면 돼요.”

    정꽉막 수석 개발자는 고개를 끄덕였다.

    “맞습니다. 프레임워크 같은 건 다 부질없어요. 직접 다 코딩하는 게 최고죠. ORM? 그런 거 쓰면 SQL 실력이 퇴화합니다. 모든 쿼리는 스트링으로 직접 만들어야 합니다.”

    이변덕 클라이언트는 요구사항 문서를 내밀며 미소지었다.

    “간단합니다. 그냥 재고관리 시스템이에요. 아, 그리고 작은 기능 몇 개만 추가하겠습니다. 고객 관계 관리, 공급망 최적화, 머신러닝 기반 수요 예측, 블록체인 기반 투명성 시스템… 별거 아니에요.”

    2월: 첫 번째 균열

    개발팀 회의실. 김치운 CEO가 분노하고 있다.

    “뭐라고요? 개발 서버가 필요하다고? 그냥 여러분 노트북에서 작업하면 되잖아요! 왜 돈을 낭비해야 합니까? 그리고 IDE 라이센스는 팀당 하나로 충분해요. 돌아가면서 쓰세요.”

    박무지 CTO는 API에 대한 질문을 받고 눈을 깜빡였다.

    “REST API? SOAP API? GraphQL? 그런 거 다 필요 없어요. 우리 때는 텍스트 파일로 데이터 주고받았어요. 그게 훨씬 단순하고 효율적이에요. 클라이언트가 txt 파일을 FTP로 올리면, 우리 시스템이 5분마다 체크해서 처리하면 됩니다.”

    정꽉막 수석 개발자는 주니어 개발자의 코드 리뷰 중이었다.

    “왜 환경설정을 외부 파일로 빼냈죠? 그냥 코드에 직접 써넣으세요. 배포할 때 수정하면 되잖아요. 그리고 이 비밀번호는 왜 변수로 뺐어요? 그냥 쿼리 안에 직접 넣으세요. ‘SELECT * FROM users WHERE password=”admin1234″‘ 이렇게요. 단순하게 가야 버그가 적어요.”

    이변덕 클라이언트는 오후에 갑자기 나타났다.

    “아, 작은 변경사항이 있어요. 모바일 앱도 같이 개발해주실 수 있죠? iOS랑 Android 둘 다요. 예산은 그대로고요. 아, 납기일도 그대로입니다.”

    3월: 부정의 단계

    김치운 CEO가 경비 보고서를 검토하고 있다.

    “개발자들이 왜 이렇게 많은 커피를 마십니까? 한 사람당 하루에 두 잔이면 충분하지 않나요? 그리고 이게 뭡니까, ‘기술 서적 구입’? PDF로 불법 다운로드하면 되잖아요!”

    박무지 CTO는 보안 감사 보고서를 덮으며 한숨을 쉬었다.

    “암호화가 필요하다고요? 우리 시스템은 아무도 해킹할 수 없어요. 누가 왕국마트 재고관리 시스템에 관심이 있겠어요? SSL? HTTPS? 그런 거 설정하려면 시간이 너무 많이 걸려요. 그냥 HTTP로 갑시다.”

    정꽉막 수석 개발자는 1만 라인짜리 단일 파일 코드를 자랑스럽게 보여주고 있었다.

    “이게 바로 효율성입니다. 파일 하나로 모든 기능을 구현했어요. 함수 이름은 a1, a2, a3로 간단하게 지었고, 주석은 불필요한 용량 낭비라서 전부 제거했습니다. 깔끔하죠?”

    이변덕 클라이언트가 전화로 요청했다.

    “아, 그리고 음성인식 기능도 넣어주세요. 직원들이 마이크에 대고 ‘우유 몇 개 남았어?’ 이렇게 물어보면 시스템이 대답해주는 거예요. 간단하잖아요?”

    4월: 분노의 달

    김치운 CEO가 프로젝트 미팅에서 발언했다.

    “인력 충원이요? 절대 안 됩니다. 오히려 지금 인원도 많아요. 한 명이 세 사람 몫을 하면 되는데 뭐가 문제인가요? 요즘 애들은 너무 나약해요. 제 시절에는 72시간 연속 근무가 기본이었어요.”

    박무지 CTO는 시스템 설계도를 보며 미소지었다.

    “멀티스레딩이요? 그런 복잡한 개념은 필요 없어요. 싱글스레드로 충분합니다. 동시에 100명이 접속해도 순서대로 처리하면 되죠. 기다리면 되는데 뭐가 문제인가요?”

    정꽉막 수석 개발자는 주니어의 코드를 다시 작성하고 있었다.

    “이런 쓸데없는 ‘디자인 패턴’이란 건 다 지워버리세요. MVC? Repository? 그런 거 없이 그냥 if-else로 모든 게 가능해요. 이렇게 500줄짜리 if-else 구문이면 모든 경우의 수를 처리할 수 있습니다.”

    이변덕 클라이언트는 미팅 마지막에 손을 들었다.

    “아, 맞다! VR 기능도 추가해주세요. 직원들이 VR 고글을 쓰고 가상 창고를 돌아다니며 재고를 확인할 수 있게요. 다음 주까지 프로토타입 보여주실 수 있죠?”

    5월: 협상의 시기

    김치운 CEO는 마침내 타협점을 찾았다.

    “좋아요. 서버를 한 대 더 구매하겠습니다. 단, 개발자들의 모니터는 24인치에서 22인치로 다운그레이드하고, 사무실 에어컨은 28도로 고정합니다. 균형을 맞춰야죠.”

    박무지 CTO도 현실을 조금 받아들이기 시작했다.

    “Java 8을 사용해보겠습니다. 물론 Java 1.4가 더 안정적이지만… 시대에 맞춰가야 하니까요. 단, 스프링은 절대 안 됩니다. 프레임워크는 개발자를 나약하게 만들어요.”

    정꽉막 수석 개발자는 드디어 변수를 사용하기 시작했다.

    “좋아요, 하드코딩된 값 중 일부를 상수로 뺐습니다. 이제 만족하시나요? 단, 이 상수들은 ‘a’, ‘b’, ‘c’로 이름 붙일 겁니다. 의미 있는 변수명은 타이핑하기 너무 귀찮으니까요.”

    이변덕 클라이언트는 요구사항 변경에 대한 비용을 지불하기로 동의했다.

    “알겠습니다. 추가 요구사항에 대해 비용을 지불할게요. 원래 예산의 3% 추가요. 단, 기능은 200% 늘릴 거예요. 공정하죠?”

    6월: 우울의 심연

    김치운 CEO는 재무 보고서를 보며 창백해졌다.

    “어떻게 이럴 수가… 개발자들 건강검진을 왜 해줘야 합니까? 아프면 그만두면 되잖아요! 그리고 이게 뭡니까, ‘정신건강 상담’? 개발자는 코드만 작성하면 됩니다. 감정 같은 건 필요 없어요!”

    박무지 CTO는 시스템 장애 보고서를 읽고 있었다.

    “백업이 왜 필요한가요? 장애가 나면 처음부터 다시 입력하면 됩니다. 사람이 실수를 통해 성장하는 법이에요. 그리고 테스트 서버가 왜 필요해요? 실제 서버에서 바로 테스트하면 더 현실적이잖아요.”

    정꽉막 수석 개발자는 2시간 동안 디버깅을 한 후 문제를 발견했다.

    “여기 문제가 있었네요. ‘if (a == 1 && b == 2 || c == 3 && d == 4 || e == 5 && f == 6 || g == 7 && h == 8 || i == 9 && j == 10)’ 구문에서 괄호를 빼먹었어요. 이런 실수하면 안 되는데… 그래서 주석은 쓸모없다니까요!”

    이변덕 클라이언트는 갑자기 사무실에 들이닥쳤다.

    “전체 UI를 다시 디자인해야 할 것 같아요. CEO가 파란색을 싫어한다고 하네요. 모든 파란색을 보라색으로 바꿔주세요. 아, 그리고 내일 임원들에게 시연이 있어요. 준비되셨죠?”

    7월: 수용의 시작

    김치운 CEO는 회사 전체 미팅을 소집했다.

    “여러분, 안타깝게도 우리는 이 프로젝트에서… 이익을 내지 못할 것 같습니다. 하지만 걱정 마세요! 다음 두 달간 급여는 ‘경험’으로 대체하겠습니다. 이력서에 쓸 수 있는 소중한 경험이죠!”

    박무지 CTO는 처음으로 인터넷 검색을 시작했다.

    “‘클라우드 컴퓨팅이란’… ‘도커 초보자 가이드’… ‘현대적 소프트웨어 개발 방법론’… 음, 이런 게 있었군요. 하지만 아직도 Excel VBA가 최고라고 생각합니다.”

    정꽉막 수석 개발자는 코드 리팩토링을 시도했다.

    “함수로 분리해봤어요. 이제 각 함수가 3000줄밖에 안 됩니다. 훨씬 깔끔하죠? 그리고 변수명도 ‘a1’, ‘a2’ 대신 ‘var1’, ‘var2’로 바꿨습니다. 너무 혁신적인가요?”

    이변덕 클라이언트는 마지막 미팅에서 폭탄을 투하했다.

    “저희가 다른 회사와도 같은 시스템을 개발 중이에요. 혹시 더 빨리, 더 저렴하게 만들어주실 수 있나요? 아니면 계약을 취소해야 할 것 같은데…”

    8월: 프로젝트의 종말

    김치운 CEO의 사무실은 비어 있었다. 책상 위에는 쪽지 하나.

    “해외 출장 중. 연락 불가. 급한 일은 없을 것.”

    박무지 CTO는 서버실에서 발견되었다.

    “이상해요… 서버 온도가 80도까지 올라갔는데 왜 시스템이 다운되죠? 우리 때는 이런 적 없었는데… 아, 냉각 시스템이 필요하다고요? 그냥 창문 열면 되잖아요!”

    정꽉막 수석 개발자는 마지막 커밋 메시지를 남겼다.

    “final_final_REAL_FINAL_v3_USE_THIS_ONE_PLEASE.java 파일 추가. 버그 수정. 아마도.”

    이변덕 클라이언트는 법무팀과 함께 도착했다.

    “납기일을 지키지 못했으니 계약서에 따라 위약금을 청구하겠습니다. 아, 그리고 지금까지 개발된 모든 코드의 소유권은 저희에게 있어요. 내일까지 모든 서버와 코드를 이전해주세요.”

    에필로그: 3개월 후

    왕국마트 본사. 이변덕 클라이언트가 새로운 개발업체와 미팅 중이다.

    “아주 간단한 프로젝트예요. 그냥 재고관리 시스템이에요. 예산? 이전 업체의 절반으로 생각하고 있어요. 납기일? 3개월이면 충분하죠? 아, 그리고 작은 기능 몇 개만 추가하려고 합니다…”

    그리고 어딘가에서, 김치운과 박무지, 정꽉막은 새로운 회사를 설립하고 있었다.

    회사명: “효율적 시스템 개발”
    슬로건: “우리는 다르게 일합니다”

  • 어느 평범한 오후의 소녀

    어느 평범한 오후의 소녀

    어느 평범한 화요일 오후였다. 별다른 일정도 없이 나는 그저 길을 걷고 있었다. 지하철역에서 나와 사무실로 향하는 길. 매일 같은 시간에 걷는 그 익숙한 길이었다. 하늘은 맑았고, 바람은 적당했다. 그날따라 특별히 다른 점은 없었다.

    그때였다. 건너편 인도에서 걸어오는 소녀를 보았다. 짧은 머리, 작은 키, 귀에 걸린 하얀 이어폰. 그녀는 내가 아는 소녀가 아니었다. 전혀 모르는 사람이었다. 그런데 무언가가 나를 멈춰 세웠다. 아마도 그녀의 걸음걸이였을까. 혹은 바람에 살짝 흩날리는 머리카락의 모양새였을까. 그것은 마치 재즈 연주 중에 갑자기 나타났다 사라지는 즉흥 연주처럼 섬세하고도 명확한 무언가였다.

    내가 20대 초반에 알았던 한 소녀, H를 떠올리게 했다. 내 친구 K의 여동생이었다.

    K와 나는 대학 1학년 때부터 친구였다. 같은 문학 수업을 들었고, 같은 재즈 바에서 아르바이트를 했다. 자연스럽게 친구가 되었고, 가끔 그의 집에 놀러 가곤 했다. 그의 집은 역에서 멀지 않은 조용한 주택가에 있었다. 낡은 2층 주택의 2층을 그의 가족이 세 들어 살고 있었다.

    처음 H를 만난 것은 비 오는 일요일 오후였다. K와 함께 레코드 가게에 갔다가 돌아오던 길이었다. 집으로 들어서자 그녀는 창가에 기대어 책을 읽고 있었다. 작은 키에 단정한 단발머리. 하얀 티셔츠와 청바지를 입고 있었다. K가 우리를 소개했다. 그녀는 조용히 고개를 숙여 인사했지만 그녀의 눈은 날카로웠다. 마치 모든 것을 꿰뚫어 보는 듯한 시선이었다.

    “내 동생이야. 고등학교 3학년.”

    그녀는 책을 덮고 부엌으로 향했다. 뭔가 준비하는 소리가 들렸다. 잠시 후 녹차 두 잔을 들고 나왔다. 하나는 나에게, 하나는 K에게. 그녀 자신을 위한 차는 없었다.

    “차가 식기 전에 마셔.”

    그녀는 그렇게 말하고는 다시 창가로 돌아가 책을 읽기 시작했다. 무라카미 류의 <69>였다. 고등학생이 읽기에는 조금 강한 소설이라고 생각했지만, 그것은 내 문제가 아니었다.

    K의 방에서 우리는 새로 산 재즈 레코드를 들었다. 마일스 데이비스의 “Kind of Blue”. 그 앨범이 흐르는 동안 창문 너머로 비가 내리는 소리가 들렸다. 가끔 H가 부엌에서 움직이는 소리도 들렸다. 커피를 내리는 향기가 방 안까지 스며들었다.

    “너희 부모님은?” 내가 물었다.
    “주말마다 할머니 댁에 가셔. 나와 동생은 집을 지키고.”

    그것이 우리의 첫 만남이었다.

    그 후로 나는 종종 K의 집에 놀러 갔다. 대부분은 함께 음악을 듣거나 책에 대해 이야기하기 위해서였다. 그리고 매번 H는 그곳에 있었다. 언제나 책을 읽거나, 공부를 하거나, 가끔은 빵을 굽기도 했다. 그녀는 말수가 적었지만, 가끔 내뱉는 말은 항상 정확했다. 그녀의 눈은 늘 무언가를 찾고 있는 것 같았다.

    어느 날, K가 아르바이트를 하러 나간 사이 우리는 우연히 집에서 단둘이 있게 되었다. 나는 K를 기다리며 거실의 소파에 앉아 있었고, H는 부엌에서 뭔가를 하고 있었다.

    “커피 마실래?” 그녀가 물었다.
    “응, 고마워.”

    그녀가 커피를 내려 가져왔다. 그리고는 내 옆에 앉았다.

    “오빠는 항상 책을 가지고 다니네.”
    “어, 버릇이야.”
    “무슨 책인데?”
    “무라카미 하루키의 “상실의 시대“야.”
    “읽어봐도 돼?”

    나는 책을 건넸다. 그녀는 책을 받아들고 무작위로 페이지를 펼쳤다. 그리고 몇 문장을 읽었다.

    “‘모든 상실된 것들은 다른 형태로 되돌아온다’ … 정말 그럴까?”
    “글쎄, 난 그렇게 믿고 싶어.”
    “나는… 잘 모르겠어. 상실된 것들은 그냥 사라지는 것 같은데.”

    그녀의 목소리에는 어떤 쓸쓸함이 있었다. 나는 그때 처음으로 그녀의 내면에 깊은 무언가가 있다는 것을 느꼈다. 17살의 소녀라고 하기에는 너무 깊은 생각을 하는 사람이라고.

    그 후로 K가 없을 때, 우리는 종종 책과 음악에 대해 이야기했다. 그녀는 놀라울 정도로 많은 책을 읽었고, 재즈에 대해서도 꽤 알고 있었다. 어떤 때는 내가 레코드를 가져가면 함께 들었다. 그녀는 눈을 감고 음악에 빠져들곤 했다.

    K는 우리가 가끔 이야기한다는 것을 알고 있었지만, 특별히 신경 쓰지 않았다. 그에게 H는 그저 ‘귀찮은 여동생’일 뿐이었으니까. 하지만 나에게 H는 점점 더 특별한 존재가 되어갔다. 그녀의 날카로운 통찰력, 조용한 웃음, 그리고 가끔 보이는 예상치 못한 장난기까지.

    우리의 비밀스러운 만남은 계속되었다. 어떤 날은 K가 수업이 있을 때 일부러 그의 집에 들렀다. H는 항상 그곳에 있었고, 마치 내가 올 것을 알고 있었다는 듯이 문을 열어주었다.

    한번은 그녀의 학교 앞에서 우연히 마주친 적도 있었다. 그녀는 교복을 입고 있었다. 하얀 블라우스와 남색 치마. 평소와는 다른 모습이었다. 친구들 사이에서 그녀는 웃고 있었다. 나를 발견하고는 잠시 놀란 표정을 지었지만, 곧 자연스럽게 인사했다.

    “안녕하세요, 선배.”
    “어, 안녕.”

    그녀의 친구들이 호기심 어린 눈으로 나를 쳐다봤다. 나는 뭐라고 설명해야 할지 몰라 그저 미소만 지었다.

    “우리 오빠 친구야,” H가 설명했다. 그리고는 내게 속삭였다. “여기서 만나면 이렇게 불러야 해.”

    그녀는 윙크를 하고는 친구들과 함께 걸어갔다. 나는 그 자리에 멈춰 서서 그녀가 사라질 때까지 바라보았다.

    그해 여름, H는 대학 입시 준비로 바빠졌다. 우리의 만남은 줄어들었지만, 가끔 도서관에서 우연히 마주치기도 했다. 그럴 때마다 우리는 커피를 마시며 잠시 이야기를 나눴다. 그녀의 꿈은 작가가 되는 것이었다. 소설을 쓰고 싶다고 했다.

    “언젠가 내 소설을 읽어줄 거야?”
    “당연하지. 첫 번째 독자가 되고 싶어.”

    그녀는 웃었다. 창문 너머로 비치는 햇살이 그녀의 얼굴을 비추었다. 그 순간, 그녀는 더 이상 내 친구의 여동생이 아니라 한 사람의 젊은 여성으로 보였다.

    그러나 모든 것이 그대로 유지되지는 않았다. H는 대학에 합격했고, 나는 졸업 후 회사에 취직했다. K는 대학원에 진학했다. 우리는 서서히 각자의 길을 걷게 되었고, 만남은 점점 뜸해졌다.

    마지막으로 H를 본 것은 그녀가 대학에 입학한 후였다. 우연히 서점에서 마주쳤다. 그녀는 더 성숙해 보였고, 머리도 조금 길어져 있었다.

    “오랜만이야,” 그녀가 말했다.
    “그러게. 대학 생활은 어때?”
    “재미있어. 문예창작과에 들어갔어.”
    “꿈을 이루고 있구나.”
    “아, 그리고 오빠에게 줄 게 있는데…”

    그녀는 작은 노트를 건넸다. 열어보니 손글씨로 쓴 짧은 소설이 있었다. 제목은 ‘오후의 재즈’였다.

    “아직 미완성이야. 하지만 언젠가 완성해서 책으로 내고 싶어.”
    “기대할게.”
    “그럼, 이만 가볼게. 다음에 또 봐.”

    그녀는 손을 흔들고 사라졌다. 그것이 우리의 마지막 만남이었다.

    그 후로 20년이 넘는 시간이 흘렀다. 나는 회사를 옮겼고, K와도 연락이 끊겼다. H에 대한 소식도 들을 수 없었다. 간혹 그 시절을 떠올릴 때면, 마치 꿈처럼 아득하게 느껴졌다.

    그리고 오늘, 그 소녀를 거리에서 보았다. 물론 H는 아니었다. 하지만 그 순간, 오래전 잊고 있던 기억들이 파도처럼 밀려왔다. H와 함께했던 조용한 오후들, 재즈 음악, 커피 향, 책에 대한 대화들. 그리고 그녀의 날카로운 눈빛과 부드러운 미소.

    젊음은 그렇게 지나간다. 마치 재즈 연주의 한 프레이즈처럼. 순간적으로 우리를 사로잡았다가, 다음 소절이 시작되면 기억 속으로 사라진다. 하지만 그 멜로디는 어딘가에 남아있다. 우리가 미처 인식하지 못하는 곳에서, 계속해서 울리고 있다.

    나는 발걸음을 멈추고 잠시 그 소녀를 바라보았다. 그녀는 내가 보고 있다는 것도 모른 채 길을 건너 사라졌다. 마치 기억 속의 H처럼.

    다시 걸음을 옮기며 생각했다. H는 지금쯤 어떻게 지내고 있을까. 작가가 되었을까. 아니면 전혀 다른 길을 걷고 있을까. 그녀가 건네준 노트는 이사를 여러 번 하면서 어딘가에 묻혀 버렸다. 하지만 그녀의 이야기의 제목만은 선명하게 기억난다. ‘오후의 재즈’.

    어쩌면 그것이 우리의 이야기였는지도 모른다. 한 오후에 흐르는 즉흥적인 재즈처럼, 순간적이고도 강렬했던. 그리고 기억 속에서만 계속되는.

    사무실로 향하는 발걸음이 가벼워졌다. 창문 너머로 비치는 오후의 햇살이 따뜻했다. 마치 그 시절의 햇살처럼.

  • 그렇게 프로젝트는 저승으로 간다.

    그렇게 프로젝트는 저승으로 간다.

    첫 번째 징후는 미묘했다. 클라이언트 미팅에서 요구사항이 “조금 변경”된다는 말이었지. PM의 얼굴에 스친 불안한 표정, 새벽 2시에 울리는 카카오톡 알림, 커피 컵이 점점 더 커져가는 현상…

    “범위가 조금 확장됐습니다. 추가 비용 없이 해결 가능하죠?”

    3월이 되자 첫 번째 개발자가 사표를 냈다. 그는 떠나며 아무 말도 하지 않았다. 그저 노트북을 반납하고 조용히 사라졌을 뿐. 하지만 모두가 알고 있었다. 이건 시작에 불과하다는 것을.

    4월, 기획 문서가 17번째 개정판을 맞이했다. 그때쯤 시스템 아키텍트는 머리카락이 절반쯤 빠져있었다. “이럴 거면 차라리 처음부터 다시 만드는 게 빠를 것 같아요.”

    5월, 회의실은 이제 임시 숙소가 되었다. 개발팀장의 눈에는 핏발이 서고, 프로젝트 문서함은 종이의 무게를 견디지 못해 휘어지기 시작했다.

    “납기일은 절대 미룰 수 없습니다. 주말에 조금만 더 힘내봅시다.”

    6월, 야근 수당 예산이 바닥났다. 대신 피자와 치킨이 공급됐다. 개발자들의 몸무게는 평균 7kg 증가했고, Git 커밋 메시지는 점점 더 욕설에 가까워졌다.

    “이거 되는 거 맞아?”
    “모르겠다. 그냥 돌리자.”
    “제발 터지지만 말아라.”

    7월, 클라이언트는 갑자기 새로운 담당자를 투입했다. 그는 이전 요구사항을 전혀 모른다며 새로운 방향을 제시했다. QA팀은 집단 우울증에 빠졌다.

    8월, CEO는 “잠시 현금 흐름에 문제가 있다”며 급여일을 연기한다고 발표했다. 회계팀의 표정은 이미 장례식장의 분위기였다.

    9월, 클라이언트는 일정 지연에 대한 페널티를 언급하기 시작했다. 법무팀이 비상 소집됐고, 프로젝트 폴더는 갑자기 백업본이 여섯 개씩 생겨났다.

    10월, 회사 주차장에는 중고차 매매상의 명함이 여기저기 놓여있었다. PM은 출근하지 않은 지 3일째. 그의 책상 서랍에서 수면제 빈 병이 발견됐다.

    11월, 회사는 “구조조정”이라는 단어를 사용하기 시작했다. 하지만 모두가 알고 있었다. 배는 이미 침몰하고 있었고, 구명보트는 부족했다.

    12월, 사무실 전등이 하나둘 꺼져갔다. 전기세를 아끼기 위해서였다. 프로젝트 서버는 마지막 숨을 내쉬듯 느려졌고, 클라이언트의 전화는 더 이상 받지 않았다.

    새해 첫날, 사무실 문은 잠겨 있었다. 출입문에는 작은 종이 한 장.

    “폐업 신고 완료”​​​​​​​​​​​​​​​​