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

software developers

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개월이면 충분하죠? 아, 그리고 작은 기능 몇 개만 추가하려고 합니다…”

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

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

Comments

댓글 남기기