탐욕은 안전장치가 필요하다.

한 줄이 문제였다. 정말 딱 한 줄이 문제였다. 많은 시간 코드를 읽고 검토하고 테스트를 수백번 했는데 결국 딱 한줄이 문제였다.

1code: TYPE === "unknown" ? "0" : code;

이 한 줄이 처음부터 마음에 들지 않았던건 아니었다. 기능 개발하느라 정신이 없었고 신경도 안썼다. 하지만 코드를 수십번 읽으면서 코드가 눈에 읽고 나니 탐욕이 생겼다.

'저 unknown은 더이상 쓰이지 않는데...'

코드 리뷰를 올리기 전부터 지울까 말까 고민하다가 결국 수정했다.

1code: TYPE === code;

사실 code는 이미 타입이 있다. string. 그런데 마치 함수는 나에게 선심이라도 쓰듯 code를 자연스럽게 boolean에서 string으로 바꿔 돌려주었다. 함수의 행동은 모두에게 재앙이었다. 아니 내 행동이 재앙이 된거지. 그리고 결제 데이터에 code는 무조건 "false"로 저장되어 결국 레포트에 아무것도 올라오지 않았다.

탐욕스러운 딱 한 줄. 탐욕이 문제였던 걸까? 아니면 나의 탐욕을 보장해 줄 안전장치가 부족했던걸까. 나는 범죄 현장에 다시 찾아갔다. 함수에 type도 잘 지정 되어있었다.

1const makeSale = (props: Cart): SaleData => {};

'return 타입까지 지정되어있는데 형변환이 일어났다고?'

코드를 까보니 실재로 return 되고 있는 것은 any였다. 이게 어떻게 가능하지? 이게 가능했던 이유는 한줄이 문제였다.

1let saleData;
2
3if(props.condition === "TAKEOUT"){
4 saleData = {...}
5}
6return saleData

함수 내부에 saleData가 타입 체크가 되고 있지 않았다. 그러다보니 if로 분기되어있는 함수 내부에서 어떤 값을 넣어도 typescript는 경고해주지 않았다. 타입인듯 타입아닌 그 무엇에 가까운.

탐욕을 실현하고자 할 때 담보되어야 하는 것

사실 개발을 하다보면 할인 관련 로직을 넣어야하는데 중앙집중적이지 않아 전방위적으로 살펴보고 수정해야 할 때 꼭 내가 좋아보이는 것을 탐닉하고자 하는 나의 탐욕 때문이라기 보다 탐욕적이어야 성공하는 개발이라고 생각한다. 하지만 그 욕망을 이루기 위한 충분한 시간은 주어지지 않는 경우가 많아 내 탐욕이 정당하다는 것을 증언해 줄 증인을 섭외할 시간이 충분치 않아 1줄로 인해 탐욕이 들통나는 경우가 많다. 그런 일이 없기 위해 나는 개발자가 탐욕적인 코드를 작성할 때 함께 탐욕스러운 사람들이 될 사람이 필요하다고 생각한다. 다시 말하면 팀 차원의 공감대가 필요하다. 나 혼자 탐욕적이면 탐욕을 부리다 나는 무너지고 만다. 모두가 탐욕스러운 개발자 혹은 탐욕을 허용하는 분위기 또는 규칙이 가장 중요하다고 생각한다. 공감대 그리고 공감대로 부터 파생된 환경이 없다면 일단 동료와 함께 차분히 이야기를 해보는 것이 좋을 것 같다. 그 이후는 정하기 나름이다. 테스트 코드 작성하기, QA 팀과 협의를 통한 테스트 자동화, 리펙토링 등등. 만약 팀이 함께 탐욕을 허용해주지 않는다면 탐욕스러운 당신은 공회전하는 슈퍼카에 불과하다. 기름 먹는 하마. 그때부터 탐욕은 낭비가 된다고 생각한다.