티스토리 뷰
GDSC의 마지막 분기 활동으로 클린코드 스터디를 참여했다. 대학생 때 멋진 개발자는 클린코드를 필수로 읽어야 한다는 말을 듣고 책을 사놓기만 한지 N년... 클린코드 북리뷰 스터디원 모집이라는 글이 딱 눈에 띄어서 이번 기회에 완독을 해야겠다고 생각하고 첫 번째 스터디원으로 합류하게 되었었다.
클린코드 책이 앞 부분은 술술 넘어가지만 뒤로 갈수록 어렵기로 워낙 유명하기 때문에, 좀 더 잘 이해하기 위한 제로베이스 클린코드 강의를 함께 수강하는데 스터디원 모두가 동의했다. 그래서 아래 강의를 함께 수강하는 것으로 스터디를 했다.
https://zero-base.co.kr/category_dev_camp/selective_cleancode
아무도 그렇게 생각 안 하겠지만...-_- 당연히 광고 아님
https://github.com/shunnyjang/2022-02-CleanCodeBookReview-Study
깃헙 레포를 파서 책과 강의를 수강하고 내용을 마크다운으로 정리해서 각자의 브랜치에 올리는 걸로 스터디를 진행했다. 그리고 자유롭게 돌아가면서 이번 스터디 분량을 공부하고 어떤 점을 느꼈는지 공유하는 방식으로 스터디를 진행했다. 스터디장 분이 돌아가면서 매주 내용을 정리해서 발표하는 방식은 (비록 집중도를 올릴 수는 있어도) 스터디에 대한 재미가 반감되고 오히려 그 주차에 발표를 맡지 않은 사람들이 준비해오지 않을 것 같다고 선택한 방법이었는데 정말 탁월한 선택이 아니었나 싶다.
작년에 스타트업에서 1년 정도 백엔드 개발자로 일하면서 느낀 부분이 많았었다. 기획에서 채팅 자체 개발을 강조해서, 확장을 고려해 Node.js의 socket을 사용하려고 javascript와 node.js, express.js를 이용해서 개발했었다. DRF를 이용한 백엔드 개발 경험만 있던 나는 상대적으로 객체 지향 언어를 이용한 개발에 경험과 지식이 부족했고,, 그러다보니 모든 코드를 함수형으로 개발했었다. 그리고 TDD, DDD의 중요성을 깨닫지 못해서 유닛테스트를 하나도 안 짠 상태로 개발했었다.
그리고 계약기간을 마무리하고 나오게 되면서 내 코드를 다시 보는데.. 정말 하나도 모르겠는 거다. 내가 짠 코드인데 어디서 버그가 나고 어디서 문제가 생기는 지도 파악하기 어려웠다. 도대체 무슨 의도로, 무슨 생각으로, 왜 이렇게 짰는 지도 모르겠었다. (아무리 많은 개발자 분들이 유지, 보수에 대해 강조해도, 참 사람이라는 게 직접 경험해보지 않으면 그 중요성을 깨닫지 못 한다.) 그때부터 나의 실력에 대한 불안함, 새로운 데 재취업을 할 수 있을까라는 나쁜 생각들이 온통 머릿속에 가득했다. 주변 분들 중에 본인 회사에 추천을 해주겠다는 분들도 아주 조금 계셨는데 도저히 그 기대감을 만족할 수 없을 것 같아서 모두 물렀었다.
그때부터 좋은 코드와 구조에 대해서 밤을 새며 공부했다. 대체로 Java와 Spring 기반의 좋은 자료들이 많았고 이를 통해 객체 지향 언어와 테스트 코드의 중요성에 대해 알게 되었다. 그리고 Node.js를 이용한 서버 사이드 개발에서 취약한 부분인 구조에 대해서도 공부하게 되었다. (내 나름대로 구조를 설계한다고 설계했지만 객체 지향적으로 개발하지 않아서 보완해야 할 부분이 정말 많았다.) 그렇게 구조를 보완한 Node.js의 서버 사이드 프레임워크인 NestJS를 공부해야겠다고 생각했고, 내가 당장 실력 있는 자바 개발자가 될 수는 없어도 좋은 자바 글들을 이해할 순 있어야겠다고 생각해서 내일배움카드를 이용해 패스트캠퍼스의 Java&Spring 강좌를 수강하기도 했다.
클린코드는 자바를 이용한 객체 지향 언어에서의 클린 코드에 대해서 말한다. 앞 부분은 변수명, 함수명, 주석, 함수 짜는 법 등에 대해서 이야기 한다. 그리고 뒤로 갈수록 객체 지향 언어에서의 클린코드에 대한 내용이다. 그러다 보니 객체 지향 설계 원칙인 SOLID 법칙에 대해 여러 번 강조되고 클래스를 어떻게 짜는 게 좋은지와 같은 내용이 주를 이룬다. 그리고 예제 코드와 라이브러리도 모두 자바로 이루어져있다. 그렇다고 자바, 백엔드 개발자가 아니면 첫 부분만 읽어야 한다는 뜻은 절대 아니다. 클린코드에서 강조하는 건 바로 생산성, 누구든 언제든 다시 읽어도 이해가 되는 코드, 테스트 코드이다. 이 세 가지의 중요성을 두꺼운 책에서 계속 반복해서 강조하면서, 이 세 가지를 지킬 수 있는 방법들을 제시한다.
책의 내용들은 너무 감동적이었다. 위에서 나의 상황을 길게 설명한 이유는 이 책의 한 줄 한 줄 문장들이 낱낱이 나의 상황을 저격하는 것 같았다. 내가 마침 부족하다고 느꼈고 공부하던 내용들이 이렇게 집약적으로 오래 전에 책에 적혀있었다니.. 물론 미리 읽었다고 마음에 와닿진 않았겠지만 그래도 미리 읽었으면 개발하는데 방향성이 되지 않았을까 싶다.
하지만 책에서도 그렇고, 제로베이스에서 강의하신 개발자 분도 그렇고 또 강조하는 중요한 부분이 있다. 상황에 맞게 실용적으로 타협하자! 아무리 클린 코드 책에서 제시한 내용이며 모두가 좋다고 해도, 당장의 기획과 비즈니스에 맞지 않는다면 오히려 과한 오버헤드의 개발이 될 수 있다는 것이다. 댄이라는 개발자가 작성한 유명한 아티클 Goodbye, Clean Code를 꼭 마무리로 같이 읽으면 더 좋다.
클린코드에 너무 얽매이지 말자. 깨끗하고 중복없는 코드는 당연히 너무 좋다. 하지만 다른 팀원과 상의하지 않은 리팩토링은 정말 나쁜 업무 처리이다. 그리고 당장의 리팩토링이 완벽한 개선이라는 보장이 없다. 확장을 빠르게 할 수 있도록 개발할지, 깨끗하고 직관적으로 보이게 개발할지 등 어디에 중점을 두는 지가 중요하다. 클린코드는 하나의 전략일 뿐이다. 개발의 목적이 되어서는 안 된다.
클린 코드 책을 읽고선 코딩 테스트 마저 과하게 함수로 분리하고 변수명을 고민하는 나에게 방점을 찍은 아티클이다. 클린 코드에 너무 얽매이지 말자. 무엇이 가장 중요한지 매번 생각하고, 생산성이 높고 다른 팀원들과 잘 협업할 수 있는 방향으로 타협하자.
스터디를 진행하면서 많은 변화가 있었다. 스타트업에 살짝 상처 받은 나는 대기업 취업 준비를 한다고 개발을 조금(아니고 많이) 소홀히 했다. 그리고 스터디가 끝날 때 즈음에는 중견기업의 개발자로 취업이 되었다. 참 세상은 요지경. 예상대로 되는 게 하나도 없다. 스터디 처음 시작할 때 끝나는 날짜를 보면서 저 때까지 내가 취업이 되어 있을까라는 불안함에 살짝 정신이 돌아버릴 것 같았는데 전혀 예상했던 회사는 아니지만 감사하게도 나를 좋게 봐준 회사와 분들이 계셔서 스터디가 끝나기 전 비교적 나쁘지 않은 조건으로 들어가게 되었다. 그리고 클린 코드 북리뷰 스터디를 통해 좋은 코드를 짜기 위해 노력하는 사람이 되었을 때 돈을 받고 일하는 개발자가 되었다. 사실 깨닫지 못했는데 이렇게 회고를 쓰다보니 얼마나 감사한 일인가 느껴지고 주책맞게 눈물 한 방울 흘릴 것 같다. 하지만 난 잘 울지 않지.
아무튼 결론적으로 뿌듯하고 성장이 있던 스터디였다. 올해도 이렇게 성장이 있었구나라는 생각이 들어서 이 회고를 쓰는데 좀 벅차오른다.
제로베이스 강의에서 마지막으로 리팩토링 책을 추천해주셔서 클린코드 완독에 대한 뿌듯함이 사라지기 전 책을 구매하던가 해서 공부하려고 한다. 다음은 리팩토링 북리뷰로 꼭 돌아오길.