
"야생"이라 불리던 스타트업에서 7년을 구르다, 소위 '네임드' 대기업으로 이직했을 때 저는 솔직히 자신감이 넘쳤습니다. 트래픽? 받아봤고. 배포? 눈 감고도 하니까요. 하지만 첫 출근 후 배정받은 프로젝트의 저장소를 `git clone` 하고 나서, 저는 식은땀을 흘려야 했습니다.
그곳엔 최신 유행하는 MSA나 깔끔한 Kotlin 코드가 아니라, 10년 전 선배들이 남긴 거대한 모놀리식(Monolithic) 자바 코드 덩어리가 떡하니 버티고 있었거든요. 주석은 끊겨 있고, 변수명은 암호 같았으며, 비즈니스 로직은 스파게티처럼 얽혀 있었습니다. 마치 **해독 불가능한 고대 문서**를 마주한 기분이었죠.
오늘은 화려한 신기술(TV 같은 기술)에 현혹되지 않고, **'사울 벨로(Saul Bellow)'의 소설처럼 밀도 높고 진흙탕 같은 현실(레거시)을 마주하며 성장하는 법**에 대해 이야기하려 합니다.
### 📺 화려한 'TV 문학' vs 진흙탕 묻은 '진짜 문학'
개발자 커뮤니티를 보면 항상 새로운 기술이 쏟아집니다. "이제는 Rust다", "Next.js가 답이다" 같은 외침들이죠. 저도 스타트업 시절엔 그런 기술 스택이 개발자의 실력인 줄 알았습니다. 마치 2000년대 초반, 화려하고 자극적인 소재로 무장했던 'TV 드라마 같은 소설'들이 유행했던 것처럼요.
하지만 대기업의 레거시 시스템은 달랐습니다. 그건 사울 벨로의 소설 **<오기 마치의 모험(The Adventures of Augie March)>** 같았습니다.
> **"스탕달은 위대한 소설이란 '거울을 들고 길을 걷는 것'이라 했다. 그 거울은 푸른 하늘의 진주 같은 아름다움뿐만 아니라, 발아래 진흙 웅덩이의 오물까지도 비춘다."**
우리가 유지보수해야 하는 시스템이 딱 이렇습니다. '클린 코드'라는 이상적인 하늘만 비추는 게 아니라, **현실의 비즈니스 요건, 예외 처리, 더러운 데이터 보정 로직이라는 '진흙 웅덩이'**를 그대로 담고 있습니다.
저는 처음에 이 진흙탕을 혐오했습니다. "왜 코드를 이렇게 짰지?"라고 욕하기 바빴죠. 하지만 그 10년 묵은 코드가 회사의 막대한 매출을 지탱하고 있다는 걸 깨달은 순간, 태도를 바꿔야만 했습니다. 코드를 '새로 짜는' 게 아니라 '읽어내는' 능력이 필요했습니다.
---
### 🛠️ 레거시라는 '고전'을 읽는 3단계 생존 루틴
사수가 없어도, 문서가 없어도 이 거대한 시스템에서 살아남기 위해 제가 몸으로 부딪치며 정립한 3가지 루틴을 공유합니다.
#### 1. AI를 '번역기'가 아니라 '역사가'로 활용하세요 (with Cursor & Git Blame)
많은 주니어 분들이 **Cursor**나 **ChatGPT**에 코드를 붙여넣고 "이거 해석해 줘"라고만 묻습니다. 하지만 레거시 코드의 핵심은 `What`(무엇을 하는가)이 아니라 `Why`(왜 이렇게 짰는가)에 있습니다.
* **Bad:** "이 함수가 하는 일을 설명해 줘." (문법적 해석에 그침) * **Good:** (`git blame`으로 5년 전 커밋 메시지를 확인한 뒤) "2019년 블프 트래픽 대응을 위해 캐싱 로직을 우회한 것 같은데, 이 코드가 현재의 Redis 구조에서도 유효한지 검증해 줘."
AI에게 맥락(Context)을 주입하세요. 코드가 작성된 시점의 기술적 한계나 비즈니스 상황을 추론하게 만들면, AI는 단순한 코딩 도우미가 아니라 훌륭한 '시스템 고고학자'가 됩니다.
#### 2. '진흙 웅덩이(Edge Case)'를 사랑하세요
사울 벨로가 낙태 시술의 적나라한 도구와 감정, 정치적 상황까지 세밀하게 묘사했듯, 우리도 코드 속의 가장 **'지저분한 부분'**을 직시해야 합니다.
* `try-catch` 블록이 비정상적으로 깊은 곳 * `if (user.type == "VIP" && date < "2020-01-01")` 같은 기괴한 하드코딩 * 주석으로 `// 절대 건드리지 마시오`라고 적힌 부분
이런 곳들이야말로 비즈니스의 **'돈이 되는 로직'**이 숨어 있는 곳입니다. 클린 코드로 리팩토링하겠다고 무턱대고 들어내지 마세요. 그 지저분함 속에 회사가 10년간 겪은 시행착오와 방어 기제가 녹아 있습니다. 저는 이 부분을 분석하면서 비로소 '코드'가 아닌 '비즈니스'를 이해하게 되었습니다.
#### 3. 정치적 판단(기술 편식)을 버리세요
"자바는 낡았어", "모놀리스는 악이야" 같은 기술적 편견은 벨로를 '보수주의자'라고 낙인찍고 읽지 않는 것과 같습니다. 벨로가 젊은 시절 좌파였고 평생 복잡한 사상을 품었던 것처럼, 레거시 시스템도 당시에는 최선의 선택이었습니다.
* **MSA 전환?** 무조건 정답이 아닙니다. 트랜잭션 관리가 복잡해질 수 있습니다. * **MyBatis?** JPA보다 쿼리 최적화에 유리했던 맥락이 있을 수 있습니다.
**"이 기술은 구리다"**는 판단을 멈추고, **"이 시스템은 어떤 문제를 해결하기 위해 이 구조를 택했나?"**를 질문하세요. 그 순간 여러분은 '코더'에서 '엔지니어'로 한 단계 진화합니다.
---
### 🚀 마치며: 우리는 모두 '밀레니얼 벨로비안'이 되어야 한다
처음엔 낡고 투박해 보이던 그 거대한 코드 덩어리가, 이제는 제게 어떤 안정감을 줍니다. 마치 인도 여행 중 만난 사울 벨로의 책이 작가에게 위로를 주었듯이 말이죠. 화려한 신기술(TV)도 좋지만, 때로는 묵직한 레거시(문학)가 개발자의 영혼을 더 단단하게 만듭니다.
지금 당장 이해할 수 없는 코드를 마주하고 계신가요? 막막하고 도망치고 싶으신가요? 괜찮습니다. 그건 여러분이 못나서가 아니라, 그 코드가 **'현실의 복잡함'**을 담고 있기 때문입니다.
오늘도 묵묵히 `git log`를 뒤지며 진흙탕 속에서 진주를 찾고 있을 여러분을 응원합니다. 저도 옆에서 같이 삽질하고 있으니까요. 우리, 쫄지 말고 끝까지 파헤쳐 봅시다.


