어느 라이브러리를 사용할까
현재 진행중인 Zigoom 프로젝트에서 Websocket을 사용중인데, client-side와 server-side에서 사용할 때 어떤 라이브러리를 사용하면 좋을지 고민을 많이 했다.
그런데 사실 이 내용은 "프로젝트를 구성할 때, 어떤 프레임워크/라이브러리를 사용해야하는지"와같은 일반적인 맥락으로도 보일거라 생각한다. 그래서 이에 대한 생각을 작성해본다.
좋은 라이브러리가 뭔데?
좋은(또는 괜찮은) 라이브러리/프로젝트란 그저 Star 수가 많은 OSS(Open-source Sofeware)가 좋을까? 또는 그저 많이 사용한다고(점유율이 높다고) 좋은 걸까?
이전에 Log4j 사태가 화두가 된 적이 있었다. 마인크래프트, 트위터 등 전 세계적으로 많은 문제가 발생한 사건이었다. 그런데 Log4j는 매우 활발히 관리되고 있던 프로젝트이지않은가?
가장 현실적인 것은
물론 그렇다고 모든 기능을 라이브러리/프레임워크 없이 구현하기에는 공수가 많이 드는 법이다(사실상 매우 어렵다고 보는게 맞다). 그래서 최대한 이슈 트래킹을 하며, 업데이트 하고 관리하는 것이 가장 현실적인 방안이라 생각된다.
익숙한 것과 익숙하지 않은 것
일단, 익숙한 기술은 확실히 익숙지 않은 것보다 큰 장점을 가진다. 이전에 이와 관련해 개인적으로 정말 좋아하는 민호님께 여쭤본 적이 있었다. 한창 swc 뽕에 취하던 때라, 이걸 컴파일러로 사용해보는게 어떻겠냐는 질문이었다. 마찬가지로 pnpm도 캐싱 때문에 여쭤봤었다. 은근 신기술에 관심 많은 학생으로 보이고 싶은 마음이 있었다. 혹은 이를 모르셨다면, 감히 권해보고싶었다.
그런데 돌아온 대답은, 내가 얼마나 무지하고, 부족하고, 그리고 개발이라는 걸 모르는지 제대로 일깨워주었다. 이를 두 가지로 요약하면 다음과 같다.
1. 준비 됐나?
첫 번째로, 새로 나온, 빠르다고 하는 그런 기술을 프로덕션에서 사용할 준비가 됐냐는 것이다. 이건 비단 그 기술의 성숙도만을 의미하는 게 아니다.
기존의 서비스에 잘 녹아들 순 있는지, 의존성 충돌이 발생하지는 않는지(혹은 현재 그 문제가 해결 중인 상황인지)도 중요하다. 하지만 가장 중요한건 현재 꾸려진 개발팀 내에서 그 기술을 사용할 준비가 되었는가이다. 개발팀의 실력을 평가절하 하는게 아니다. 가령, babel
과 yarn
에 대한 높은 수준의 지식으로 별 문제 없이 프로덕션에 사용중이라면, 큰 이슈가 없고서야 당장 옮길 필요가 없다. 차근히 다른 기술을 습득하며 장단점을 대조하고 선택하면 되는 문제다.
이와 관련해 토스ㅣSLASH 22 - 미친 생산성을 위한 React Native 영상을 추천한다. 왜 현재 개발팀과 기술 선택이 중요한지 아주 잘 보여주는 예시라 생각된다.
2. 쓸 줄 아는 것
새로운 기술을 그저 좋아보인다고 무턱대고 사용할 순 없다. 그저 Getting Started
수준으로만 사용할 줄 아는 것이라면, "쓸 줄 아는 것" 과는 거리가 있기 때문이다. 무 턱대고 사용하게 되면, 만약 해당 기술에서 문제가 발생했을 때 꽤나 많은 시간을 수정하는 데에 할애해야 하기 때문이다. 그리고 이건 개발팀에 너무 큰 마이너스 요인이다.
그리고 현재 프로덕션에서 사용 중인 기술을 대체하는 것이라면 더더욱 올바르게 사용할 줄 알아야 한다. 그렇지 않고서는 빌드조차 제대로 되지 않을 수 있다.
추가로, 새로운 기술을 팀원 전체가 습득해야하는 기회비용 또한 고려해야하는 요소이다.
이런 것들을 고려해보면, 당시의 나는 패기'만' 넘치는 철없는 학생이었던 것 같다. 팀원분들이 사용할 줄 몰라서, 혹은 몰라서 사용하지 않았던 게 아니었다.
그래서 내가 사용하는 것은
익숙하면서 자주 접해본 기술이 가장 디버깅 하기 빠르고, 이슈 트래킹도 수월하다고 생각한다. 그래서 익숙한 것들 중에서는, 다음은 문서화와 커뮤니티라고 생각한다.
문서화가 잘 돼 있고, 커뮤니티가 잘 구성 돼 있다면 Best이다. 이전에 TypeORM을 사용했던 적이 있는데, joinMapAndMany
였던가? 문서화가 엉망으로 돼 있어 시간을 꽤나 소모한 기억이 있다. 그래서 그때의 기억 때문에 최근에는 Prisma를 사용 중이었다. 그런데 이 또한 Validation과 관련한 편의성 떄문에 다시 TypeORM을 사용할지도 모르겠다. (이제는 업데이트 됐겠지)
하지만 그럼에도 여전히 OSS 세계에는 항상 주의를 기울일 필요가 있고, 따라서 각 라이브러리마다 까볼 줄 알아야 하고(by 민호님), 그러려면 언어나 프레임워크의 구조, 나아가 전공지식이 결국에는 중요해지는 것 같다.