어쩐지 요즘 블로그를 회고만 쓰는 것 같다. 일이 바쁘다보니 막히는 부분을 공부해도 정리할 시간이 도무지 나지 않는다. 이번 프로젝트 분량만 얼추 마무리되면 신경 썼던 부분들을 블로그에 다뤄볼 수 있지 않을까.
개발 측면에서 골치 아픈 것은 중요한 기능을 개발할 때보다 부가적인 기능을 간섭 없이 완성하는 데에 있다고 생각한다. 이번 주는 크리티컬한 기능을 작업하진 않았다. 일반 사용자가 판단하기엔 사소하고 자잘한 기능이지만 그럼에도 꼭 있어야 하는 부분들이 주된 태스크였다.
처음엔 간단하게 작업할 수 있을 거라 여기며 착수했는데 막상 시작하니 만만한 일이 아니란 걸 깨닫게 되었다. 기존 기능을 위해 작업한 코드와 충돌하며 새로운 코드가 제대로 동작하지 않은 일들이 빈번하게 벌어진 것이다.
덕분에 전에 작업한 코드들을 계속 뜯어봐야 했는데 분명 내가 작성한 코드임에도 불구하고 시간이 지난 만큼 초면처럼 느껴졌다. 그러다 뜻밖의 수확도 얻었다. 전에는 구현에 급급해 넘어갔던 코드 중 복잡하고 어려운 것을 리팩토링할 기회가 주어진 것이다.
기존 코드와 새로운 코드가 모두 동작하기 위한 환경을 만들기 위해 적용 범위를 확인하고 테스트하면서, 결국 기능 간 간섭 문제는 더 세세한 설계와 구체적인 테스트가 필요하다는 것을 깨달았다.
현재는 테스트코드가 있다고, 로컬에서 구동해 봤다고 넘어가는 게 아니라 테스트해야 하는 부분을 리스트업하고 하나하나 체크하며 진행하고 있다. 덕분에 뒤늦게 문제를 발견하는 일이 많이 줄어들었다.
개발을 하다보면 정답이 없다는 걸 느끼곤 한다. 하나를 개발해도 A부터 Z까지 다양한 방법이 있기 마련이다. 그리고 우리는 진행 중인 프로젝트에 가장 적합한 기술과 방법을 선택해야 한다.
임시저장 기능을 구현하기 위해 서치하며 많은 고민을 했다. 로컬 스토리지에 저장해서 불러와 쓰는 방법을 선택할까? 아니면 temp 테이블을 만들어서 db에 접근할까?
전자는 다른 pc환경에선 임시저장을 사용할 수 없다는 단점이 있었고, 후자는 설정한 주기 별로 db를 계속 업데이트해야 한다는 단점이 있었다.
처음 욕심난 것은 db에 접근하는 방법이었다. 큰 서비스에서 블로그 글쓰기나 메일 같은 기능을 위와 같은 구조로 되어 있기 때문이었다.
그러나 내 고민을 들은 동료가 "우리 서비스에 가장 적합한 방법을 선택하는 게 좋겠다"고 조언해 주었다. 고민 끝에 지금 내가 담당하는 솔루션은 이용자가 pc를 옮겨가며 사용하지 않을 가능성이 크다고 판단했다. 업무할 때 사용하는 솔루션이기에 대부분 회사에서 지급한 노트북이나 데스크탑을 이용할 것이다.
고로 나는 욕심을 접어두고 빠르게 구현할 수 있는 로컬스토리지를 선택했다. db에 접근하여 임시저장하는 방법은 1차 배포가 끝나고 여유가 생기면 작업할 수 있다. 지금은 더 중요한 기능에 집중하는 것이 나았다.
마감일에 쫓기며 작업하다 보면 팀원이 도움을 청했을 때 대응하기 곤란할 때가 있다. 내 일도 급한 나머지 다른 사람을 도울 시간을 내기 어렵다. 마감이 다가오며 우리 팀의 말수가 급격하게 줄어든 건 이러한 이유일 것이다.
나의 일을 빠르게 처리하고, 다른 사람도 바쁘니 도움은 최대한 청하지 않는다. 내 선에서 어떻게 해서든 해결해 본다. 이런 생각이 앞서니 더욱 말을 아끼게 되었다.
그러다 팀원 한분이 며칠 간 끙끙대던 에러를 함께 해결해달라고 요청하셨다. 처음에는 나와 둘이서 디버깅을 시작했는데 어느새 팀 전체가 그 에러를 고민하게 됐다. 팀이 모두 달라붙자 에러를 파악하고 고치는 데 3시간 정도 걸렸다.
신기한 건 그 에러를 고치고 다시 내 일을 시작한지 얼마되지 않아서 나에게도 같은 에러가 발생한 것이었다. 만약 팀원이 공유하지 않았다면 나도 며칠을 해결하느라 골머리 썩였을지도 모를 일이다.
이후 우리 팀은 하루 이상 고민한 문제는 즉각 보고하여 다 함께 들여다보기로 했다. 바쁜 만큼 아직 도움을 청하기 조심스럽기는 하지만 하나하나 해결하다 보니 팀워크가 무럭무럭 자라나는 게 느껴진다.