개발 팁

프로젝트속에서 발견한 것

Razelo 2022. 1. 19. 16:51

요즘 백엔드 프로젝트를 진행하면서 꽤나 코딩에 열중하며 지내고 있다. 정말 많은 것들을 배운 시간이라는 생각이 들었다. 거의 마무리가 되었고(?) 이제 최종적으로 어느정도 테스트를 거치고 ec2에 배포하면 끝이다. 물론 이후에도 수정해야할 사항들이 많다. 다만 최소한의 핵심기능들이 돌아가게끔이라도 만들어놓고 이후에 추가적으로 코드를 리팩토링하고 추가 요구사항들을 추가할 일이 남아있다. 사실 완성본이라기 보다는 프로토타입에 가깝다. 후순위로 미뤄둔 기능들은 아직 구현도 하지 않았기 때문이다. 애초에 팀의 목표 자체가 빠른 출시였기 때문에 사실 다른 무엇보다도 빠르게 개발해서 일단 결과물을 만들어낸다는 점에 우선순위를 두었다. 

 

이렇게 코딩에 열중한게 정말 오랜만이라는 생각이 들었다. 그러면서 문득 내가 지속성보다는 밀도를 중시하지 않았나 싶다. 마치 특정 분야에 관심이 생기면 그 순간은 호기심에 몰두하지만 이내 흥미를 잃거나 다른 사정으로 인해 금방 손을 떼게 되는 것처럼 말이다. 하지만 밀도보다 중요한 것은 지속성이라는 생각이 들면서 앞으로 꾸준한 개발을 하겠다는 다짐을 하게 되었다.

 

또한 단지 기술 자체에 대한 지식이 중요한 것이 아니라 어떻게 깔끔하게 사용하고 어느 부분을 주의하고 통상 대부분의 사람들은 어떻게 사용하는지에 대한 표준을 익히는 것 또한 정말 중요하다는 것을 느끼게 되었다. 나 혼자 개발하는 것이 아니기 때문이다. 또한 나중에 나에게 주어지게 될 코드가 내것이 아닐 수도 있고 다른 사람이 받게될 코드가 내가 작성한 스파게티코드일 수도 있기 때문이다. 그래서 처음으로 그저 어떻게 해야 돌아가게 만들까에 대한 고민이 아니라 코드 자체에 대한 고민을 하게 된 계기라고 생각한다. 

 

이번 프로젝트 이전까지 단 한번도 느긋한 자세로 개발을 해본 적이 없었다. 많은 팀프로젝트의 경우에 시간에 쫓겨서 품질은 뒤로 한채 오직 구현에 목표를 두고 급하게 만들어왔었다. 그러다보니 말도 안되는 코드를 작성하게 되고 이후에는 흔히 말하는 땜질을 자주 하게 되었다. 그리고 이후에 리팩토링은 한다고는 말했지만 하는둥 마는둥해서 프로젝트를 던져놓고 다른 관심사에 빠지곤 했다. 그런데 이번 프로젝트를 하면서 구현 api들의 개수가 수십개를 넘어가며 코드가 길어지다보니 정말 흔히 말하는 클린코드가 얼마나 중요한지에 대해 알게 되었다. 왜냐면 정말 고생했기 때문이다. 다른 사람은 둘째치고서라도 나 스스로가 정말 고생했다. 가끔 소프트웨어의 품질에 대해 언급하면서 특정 부분을 고쳤을때 그 여파가 다른 곳으로 전파되어서는 안되게끔 만들어야한다는 말을 자주 한다. 이에 반하는 코드를 너무 많이 작성했었고 이번 프로젝트에서 마치 철퇴를 맞은 기분이었다. 여지껏 가지고 있었던 좋지 않은 습관에 대해 마치 벌이라도 받은 것 같았다. 그렇기에 깔끔한 코드를 만드는것에 대해 생각하는 습관을 들이고자 다짐했다. 

 

다양한 사람들을 만났고 당연히 의견충돌도 많았다. 하지만 이번에도 다행인터라 좋은 분위기를 유지하려 노력했던 행동들은 그나마 효과가 있었다. 기술적인 부분들에서 서로에게 답답한 점도 있었을 것이고 나도 다른 분들에게는 물론이고 다른 분들도 내게 불만을 가졌을 것이다. 이부분은 누구나 그럴 것이라고 생각한다. 자신이 아닌 다른 타인과 오랜 기간 이야기를 나누는 동안에 누구나 일치하지 않는 부분이 있기 때문이다. 그럼에도 불구하고 재밌었다. 나와 다른 생각을 가진 사람들을 만나는 것은 어찌보면 아주 조금의 스트레스도 존재하지만 95퍼센트의 흥미로움이 있는 것 같다. 그저 서로 다른 사람들끼지 모여서 갑자기 덜컥 주어진 문제에 대해 고민해보고 해결하는 과정이 재밌을 따름이다. 그리고 가장 흥미로울때는 나보다 훨씬 열정적인 사람을 볼때이다. 그런 사람을 바라보면서 어떻게 저런 신박한 아이디어를 낼까에 대한 생각을 하다보면 그 순간에 일종의 사명감같은 것을 느끼게 되는 것 같다.

 

어째 프로젝트를 할때마다 배우게 되는 것은 기술적인 내용보다는 그외의 내용에 대해 더 많은 것을 배우게 되는 것 같다. 하지만 어째 그런점이 싫지만은 않은 이유는 기술은 언젠가 시간이 지나 레거시가 되겠지만 기술 외적인 배움은 어째 평생 내게 도움이 될 것 같은 느낌이 들기 때문이다. 

 

하지만 말은 이렇게 해도 클린코드를 장바구니에 담았다. 왜냐면 이번에 했던 고생을 다시 하고 싶지 않아서... 

 

직접 코드를 짜봐야 안다는 말이 있다. 어느 부분에서 애매하고 어느 부분에서 까다로운지를 알아야하기 때문이다. 다른 사람이 짜놓은 코드를 이해하는 것도 좋지만 내가 직접 짜는 것이 가장 좋다. 그런 면에서 이번 프로젝트는 내게 정말 많은 도움이 되었다. 사실 프로젝트를 진행하면서 A의 기여도가 어느정도 되고 B는 어떠한지 그리고 그에 비해 나는 어떠한지에 대해 따져묻는 것을 좋아하지 않는다. 내가 느리다면 다른 분들에게 양해를 구할 수도 있고 또는 도움을 받을 수도 있다. 이번 프로젝트에서는 내가 빠르게 끝낼 수 있었기에 다른 분께 양해를 구해서 그분의 몫까지 내가 작성해도 되는지에 대한 허락을 구했고 좀 더 많은 분량의 코드를 작성할 수 있었다. 이 점에서 오히려 좋았다. 만약 이것이 회사의 업무였다면 이정도로 좋아했을지는 의문이다. 하지만 이번 한달 동안은 여유시간이 있어서 마음껏 코딩해보기로 생각한 터라 정말 그렇게 할 수 있어서 좋았다.

 

예전에 교수님께서 하신 말씀이 기억난다. 아직도 그분이 하신 말씀들 중 여러 구절이 생각나서 매순간마다 그분께서 하셨던 말씀이 다른 뜻으로 받아들여지면서 내게 가르침을 주는 것 같다. 말씀 중에 오히려 많은 할당량을 받게 되는 것에 기뻐하라는 말씀이 있었다. 그런 기회는 흔치 않고 또한 혼자서 모든 파트를 맡을 기회가 생기면 그 또한 흔치 않은 기회라고 하셨다. 오히려 그런 기회가 있으면 나서라고 하셨다. 이번 프로젝트를 하면서 그 말씀이 맞았다는 생각이 들었다. 이전에 고민해볼 기회가 없었던 문제들에 대해서 고민해볼 기회가 되었으며 어떻게든 구현하려 애쓰면서 어찌되었든 땜질이라도 하면서 내가 쓰는 기술에는 이런것도 있고 저런것도 있는지에 대해 알아볼 수 있었던 것 같다. 물론 아직 완벽하게 끝난 것은 아니다. 프론트를 맡으신 분들께서 바쁜 사정이 생겨 프론트는 잠시 중단된 상태이다. 그럼에도 불구하고 재밌었다는 점과 많은 것을 배웠다는 점에는 변함이 없다.

 

아무리 프로젝트가 성공적이라 하더라도 팀원들 모두에게 악영향을 끼쳤다면 그것이 성공적이라고 말할 수 있을까 싶다. 오히려 모두가 즐겁게 임할 수 있었던 프로젝트가 더 성공적인 프로젝트이지 않을까. 물론 프로젝트의 실질적인 성공자체가 중요한 것은 맞다. 하지만 그럼에도 불구하고 모두에게 악영향을 끼친 프로젝트는 성공이라고 부를 수 없다는 생각이 든다. 

어떤 일을 꾸준히 할 수 있으려면 두가지가 필요하다고 생각한다. 재미와 프로의식이다. 아직 프로도 아니고 너무도 부족한 수준이기에 후자는 말할 수 없지만 적어도 전자는 말할 수 있을 것 같다. 재미를 느낀다면 오래할 수 있는 원동력이 될 수 있다.

 

결론: 재밌게 하자! 

 

반응형