이상과 현실 사이, 삶을 최적화하는 우아한 타협
내 머릿속에는 두 명의 자아가 산다. 한 명은 완벽한 비율과 색을 꿈꾸는 디자이너고, 다른 한 명은 지독할 만큼 현실에 충실한 개발자다. 둘은 하루에도 수십 번씩 회의 테이블을 엎는다.
디자이너(Designer)는 늘 과감한 상상을 들고 나타난다.
"버튼은 눌리는 순간 물방울처럼 퍼지며 은은하게 빛나야 해. 페이지 전환은 중력이 스치듯 묵직해야 하고. 시스템 폰트 대신, 이 유려한 커스텀 서체를 쓰자. 아름다움이 곧 기능이야."
그러면 개발자(Dev)는 현실 세계의 조건을 들이밀며 깊게 한숨을 쉰다.
"그거 구버전 브라우저에서 깨져요. 모바일 프레임도 못 버티고요. 커스텀 폰트? 로딩 지연 0.5초. 그리고 마감은 사흘 남았습니다. 구현 불가능입니다."
이 지긋지긋한 논쟁은 비단 모니터 앞에서만 벌어지지 않는다. 일상의 결정 앞에서도 두 자아는 똑같이 맞부딪친다.
나의 '내면의 디자이너'는 언제나 화려한 인생 시안을 가져온다.
"3개월 동안 죽어라고 이 프로젝트를 끝내자. 그 보수로 세계 여행을 가고, 돌아오면 바다가 보이는 곳에서 한 달 살기를 해보자. 아침엔 수영, 저녁엔 글쓰기. 픽셀 하나 어그러짐 없는 삶."
그러면 '내면의 개발자'가 시니컬하게 엑셀 시트와 통장 잔고를 들이민다.
"그 돈을 다 쓰게요? 보험료, 자동차세, 종소세까지 내면 리소스 부족입니다. 404 Not Found. 당신의 노후가 존재하지 않습니다."
어릴 적엔 디자이너의 목소리가 압도적으로 컸다. 꿈은 크고 선명했고, 현실의 제약 따위는 코딩 몇 줄로 해결할 수 있는 버그처럼 보였다. 하지만 나이를 먹고 현실이라는 레거시 코드가 차곡차곡 쌓이면서, 개발자의 목소리가 커지기 시작했다. "안 돼", "위험해", "비효율적이야." 그 말들이 꿈을 압사시키곤 했다.
디자이너가 이기면 대책 없는 몽상가가 되어 통장이 텅 비고, 개발자가 이기면 삭막한 기능주의자가 되어 가슴이 텅 빈다. 그런데 이상하게도, 좋은 프로덕트는 어느 한쪽의 승리에서 나오지 않는다. 디자이너의 고집만으로도, 개발자의 효율만으로도 완성되지 않는다. 두 자아가 치열하게 부딪치다 멈추는 지점, 그 미세한 균열에서 비로소 형태가 잡힌다.
우리는 그걸 타협이라 부르지만, 실은 '최적화'에 가깝다. 서로를 조금씩 잃어가며, 동시에 조금씩 얻어가는 과정. 현실주의자 개발자는 실패를 두려워한다. 에러 로그가 뜨는 순간 심장이 덜컥한다. 그래서 늘 안전한 선택을 한다. 익숙한 패턴, 검증된 라이브러리, 안정적인 구조. 하지만 디자이너의 불가능한 요구가 없다면, 기술은 제자리에서 한 발도 움직이지 않는다.
욕을 하면서도 코드를 짜다 보면, 어느새 그 불가능을 구현 가능한 상태까지 끌어올린 자신의 손을 보게 된다. 결국 이상주의자의 무모함은 현실주의자의 능력을 확장시키고, 현실주의자의 제약은 이상주의자의 폭주를 붙잡아 구조를 만든다.
인생도 마찬가지다. 너무 예쁜 설계를 붙들면 현실이 버티지 못하고, 너무 안전한 구현만 고수하면 내면의 색감이 바래진다. 나는 둘 모두의 언어를 듣는 일에 점점 익숙해진다. 이상이 속삭이는 문장과 현실이 들이미는 에러 메시지 사이에서, 가능한 해석을 찾아 코드를 고쳐 쓰는 일.
지금 이 글도 그렇다. 이상은 '세상을 울리는 문장'을 원하지만, 현실은 욕심을 내려놓고 적당한 선에서 마무리하라고 말한다. 그래서 나는 타협한다. 완벽하진 않아도, 일단 발행 버튼을 누른다. 버그가 조금 있으면 어떤가. 인생은 어차피 끊임없는 유지보수의 과정인데.
나는 아마 이 두 자아를 평생 달래며 살게 될 것이다. 그러나 그 싸움이 지속되는 것은, 내가 여전히 나아가고 있다는 뜻이기도 하다. 작동은 늘 미완의 상태에서 일어난다. 아름다움과 제약 사이, 그 좁은 틈에서.