brunch

You can make anything
by writing

C.S.Lewis

by 서초량 Oct 10. 2023

퇴고하기엔 너무 멀리 왔네

퇴고. 글을 지을 때 여러 번 생각하여 고치고 다듬음. 또는 그런 일. 고치고 다듬는다. 개발에서도 비슷한 용어가 있다. 리팩토링. 결과의 변경 없이 코드의 구조를 재조정함. 하는 일은 퇴고와 똑같다. 고치고 다듬는다. 단, 실행했을 때 결과에는 변경이 없어야 한다.


내가 전문 작가는 아니지만 그래도 예상해 보건대, 책 한 권 분량의 원고를 쭉 쓰고 한꺼번에 퇴고하기는 어려울 것이다. 가장 작은 단위의 글 한 편에 대해 퇴고하고, 그다음 글을 퇴고하는 방식으로 진행하겠지. 나중에 전체적으로 확인해야 할지언정.


리팩토링도 마찬가지. 개발을 다 끝내고 전체 코드를 한꺼번에 고친다는 건 말이 안 된다. 양이 매우 방대하기 때문이다. 그럼 어떻게 하느냐. 클린 코드처럼 리팩토링도 유명한 책이 있다. ‘리팩토링’이라는 책이다. 읽어보진 않았지만 리뷰를 봤을 때, 책에서는 언제 리팩토링하라고 가이드라인을 제시하는 모양이다. 비슷한 작업이 세 번 반복될 때. 기능을 추가할 때. 버그를 수정할 때. 코드 리뷰할 때.


네 가지 모두 내가 개발하면서 만났던 상황. 그때마다 나는 리팩토링을 했던가? 아니, 하지 않았다. 애초에 그 상황일 때 리팩토링해야 한다는 것도 몰랐다. 그 말인즉슨, 코드를 정리해야지 생각하면서도 언제 해야 할지는 몰랐다는 이야기다. 방금 무지한 자신에게 나조차도 놀랐다.


회사에 다니며 수많은 ‘퇴고 타이밍’을 만났지만 놓치고 놓쳐서 끝내 너무 멀리 와 버렸다. 코드를 고치려고 했더니 어디서부터 건드려야 할지도 모를 만큼 방대하고 복잡했다. 이거 건드리면 다른 일 못 하겠다. 리팩토링은 또 기약 없이 미뤄졌다. 


이렇게 놔둬도 괜찮은가? 전혀 괜찮지 않다. 이대로 계속 개발을 진행하면 무슨 일이 일어나느냐. 갈수록 개발하기 힘들어진다. 코드 짜다가 짜증이 치솟는 경험을 할 수 있다. 이유를 알기 위해선 리팩토링의 목적을 알아야 한다.


리팩토링의 목적은 코드를 이해하기 쉽게, 유지 보수하기 쉽게 만드는 것이다. 그렇게 코드를 고쳐 놓으면 나중에 수정이 용이하고, 버그도 빨리 찾을 수 있고, 새로운 기능을 추가하기도 쉽다. 자연히 개발 속도도 빨라진다. 이런 이점 때문에 리팩토링이 꼭 필요하다.


반대로 리팩토링하지 않고 계속 개발하면? 수정 사항 있을 때마다 고생하고, 버그가 있는데 찾지를 못하고 코드 위를 헤매게 된다. 새로운 기능 추가하려는데 앞선 코드의 비효율적인 부분을 발견했지만 그대로 따르는 사태가 벌어진다. 당연히 개발 속도도 느려졌을 것이다. 불편하고, 고생하면서 개발하니까 하는 사람도 답답하다.


정확히는 내가 답답했다. 고쳐야겠다는 생각이 자꾸 드는데 하지는 못하니까. 코드를 보고 리팩토링해야겠다는 생각이 드는 것을 ‘코드에서 악취가 난다’고 비유한다. (유명한 비유다. 다만, 나는 실무에서 한 번도 들은 적이 없다) 그 비유를 따르면 내가 작업하고 있는 코드는 곳곳에서 악취가 진동하고 있었다. 


‘나는 지금 쓰레기를 만들고 있는 건가.’


그래서 한 번은 처음부터 뜯어고치고 싶다고 팀장님께 말씀드린 적이 있다. 도저히 개발하기 불편해서 안 되겠다고. 시간이 들어도 고치고 넘어가야겠다고.


“그건…. 일단 두고 다음에 새로 작업하자.”


팀장님도 고치느니 아예 새로 만드는 게 빠르다고 생각하신 모양이었다. 그사이 나는 코드를 건드리지 못하고 다른 곳으로 이직하고 말았다. 


악취를 풍기던 코드는 어떻게 되었을까. 고쳐졌을까? 아니면 폐기되었을까? 내 손을 떠나 버린 지금도 여전히 신경 쓰이고 눈앞에 아른거린다.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari