새로운 기술은 언제나 가슴을 뛰게 만든다
혹시 그런 적 있지 않은가? 지금 잘나가는 새로운 기술이나 툴을 우리 팀에 도입하지 않으면 생산성을 놓칠 것 같은 기분이 들 때 말이다. 요즘은 최신 AI 툴이 그런 경우일 것이다.
특히 스타트업 같은 소규모 신생 조직에서 일하는 개발자라면 더더욱 그럴 수 있다. 나도 예전에 스타트업에서 새로운 기술 도입에 앞장섰던 경험이 있다.
당시 블록체인 개발자 겸 백엔드 개발자였던 나는 자동화에 푹 빠져있었다. 블록체인 노드 배포 자동화, CI/CD, 컨테이너 배포 자동화와 같은 기술들과 마주치면 꼭 현업에서 사용하고 싶었다.
하지만 그때 팀의 기술 스택은 나의 목마름을 채워주지 못했다. 그래서 내가 직접 서치하고 사용법을 익혀 팀에 새로운 툴들을 도입하기 시작했다. 블록체인 테스트 노드 배포는 ganache-cli, CI/CD는 Jenkins, 컨테이너 배포 자동화는 AWS ECS 였던 걸로 기억한다.
감사하게도 팀원들이 나의 의견을 존중해줬기에 도입은 순조롭게 진행되었다. 실제 손수 진행하던 배포 작업들이 자동화되어 생산성이 올라갔다는 팀원들의 평가도 받았다. 내적으로 나의 어깨가 양껏 올라간 것은 덤이었다.
그런데 문제가 생겼다. 기술이 팀원들에게까지 닿는 데에는 시간과 노력이 별도로 필요했던 것이다. 이게 무슨 말이냐?
급할수록 돌아가야 했다
나는 당시 백엔드 개발자였고 새 툴들을 도입하기 전에 충분히 공부했다고 생각했다. 그건 맞았다. 그런데 새로 도입하는 툴들은 나만 사용하는 것이 아니었다.
내 옆에서 함께 일하던 다른 백엔드 개발자, 프론트엔드 개발자, 머신러닝 모델 개발자는 나의 도입 의견에 공감하여 동의를 했지만 그 툴에 대해 나만큼 알지 못했고 현실적으로 그럴 수도 없었다. 각자 맡은 업무가 있으니까.
그런데 이미 도입된 툴은 각 팀원들에게도 영향을 줬다. 지금 생각해보면 당연한 이야기인데 당시에는 의욕이 앞서 놓쳤다. API 서버를 개발하는 백엔드 개발자와 리액트 컴포넌트를 수정하는 프론트엔드 개발자, 머신러닝 모델을 개발하는 엔지니어 모두 자신의 작업물이 실제 운영 중인 서비스에 잘 반영되는지 확인하려면 새로 도입된 CI/CD 툴과 배포 자동화 툴을 어느정도 이해하고 있어야 했던 것이다.
문제점이 발견되었으니 해결할 차례다. 나는 시간이 될 때마다, 그리고 질문이 올 때마다 팀원들에게 Jenkins와 AWS ECS에 대해 알려줬다. 머지 않아 사무실 옆 회의실을 빌려 몇 개월 동안 주 1회 1~2시간 동안 강의를 하기도 했었다. 오히려 새 기술 도입 후 나를 포함한 팀원들이 싱크업(Sync-up)을 하느라 업무 시간을 적지 않게 할애해야 했던 것이다.
그나마 다행인 점이 하나 있었다면, 회사의 사업 방향이 바뀐 덕분에 블록체인 관련 툴은 얼마 안 되어 더 이상 사용하지 않게 되었다는 것이다.
이런 상황을 봤을 때 과연 새로운 기술 도입으로 생산성이 높아졌다고 할 수 있을까? 나는 새로운 기술을 도입하는 게 나쁘다고 이야기하려는 게 아니다. 팀의 상황을 충분히 고려하고 준비해야 자연스러운 도입이 가능하다는 걸 말하고 싶은 것이다.
지금의 내가 그때로 돌아간다면 어떻게 했을까?
팀에게 필요한 기술인가? 팀원들에게 준비가 되었는가?
Jenkins와 AWS ECS만 놓고 생각해본다면, 일단 AWS ECS 먼저 도입하고 Jenkins 도입은 좀더 미룰 것 같다.
이건 팀의 우선순위를 고려한 것이다. 당시 팀에서 가장 골칫덩어리는 아무도 모르게 죽어버리는 서버였다. 정부 과제를 수행하고 발표하는 것이 핵심 업무였던 터라 개발했던 웹서비스가 발표 중에 갑자기 동작을 멈추면 큰일이었다.
그렇기 때문에 컨테이너를 자동으로 재시작할 수 있고 오토스케일링 기능도 가지고 있던 AWS ECS는 팀의 최우선적으로 도입이 필요한 기술이었다고 생각한다.
솔직히 말하자면 당시 우리 팀에게 Jenkins는 꼭 필요한 기술이 아니었다. 이미 AWS 기반으로 서버를 운영하고 있었기 때문에 CI/CD 툴이 필요하다면 AWS의 관련 서비스를 고려할 수는 있었겠지만, ECS와 같은 컨테이너 관리 툴만큼이나 필수적이진 않았다. 물론 빌드 테스트와 린팅 같은 수작업을 자동화할 수 있었으나 당시 잘나가는 기업들이 사용하고 있다는 말에 따라한 느낌이 없지 않아 있었다.
그리고 팀에게 꼭 필요해서 도입해야 하는 기술이 있다면 팀원들의 관련 지식 상황을 고려해 사전 학습이 필요한 부분을 정의해 팀원들에게 공유하고, 실습을 진행하는 시간을 미리 계획했을 것 같다.
당시 팀원들에게 AWS ECS에 대해 알려줄 땐 체계가 없었고 팀원들도 미리 스스로 학습할 기회가 없었기 때문에 제대로 도입되는 데에 몇 달이라는 시간이 소요되었다고 생각한다.
그때로 돌아간다면 AWS ECS를 도입하기 전에 팀원들에게 컨테이너와 컨테이너 상태 관리가 왜 필요한지 미리 공유하고, 회사의 지원을 받아 각자 간단한 앱을 컨테이너로 빌드 후 ECS를 통해 배포하는 핸즈온 시간을 가져볼 것 같다. 머리로 이해하는 것과 손으로 직접 만져본 것은 차원이 다르니 말이다. 이렇게 하면 추후 들어오는 팀원들의 질문에 대응하기도 더 쉬웠을 것 같다.
맺음말
지금까지 나의 지난 경험을 통해 새로운 기술을 도입할 때 고려해야 할 점들을 살펴봤다. 요즘은 왠만해서는 AI가 알아서 해준다고도 하지만, 조직의 문제는 계속 바뀌고 우리도 그에 맞춰 움직여야 하는 경우가 많다.
그렇기 때문에 새로운 문제를 해결해줄 새로운 툴과 기술은 계속 나올 것이며, 우리는 계속해서 새로운 툴을 도입할지 고민할 것이다. 이때 내가 공유한 경험과 기준점이 조금이나마 참고가 되길 바란다.