사람들은 백엔드 개발자를 프레임워크 단위로 구분하고 있는 것 같습니다. 이러한 기준은 채용시장에서 비롯된 것 같은데요, 기업에서는 백엔드 개발자를 채용할 때 스프링, 노드제이에스, 장고처럼 특정 프레임워크 경험이 있는 개발자를 찾습니다. 그리고 이런 형태로 구분해서 사람을 뽑는 것은 기업 입장에서는 꽤 효율적인 일입니다. 현재 구축된 프레임워크에 대한 배경 지식이 있어야 즉시 투입이 가능한 인력이 되기 때문이죠. 사람을 찾는 기업 입장에서는 회사에 적응하는 기간에 프레임워크 지식을 습득하는 기간까지 포함되는 것을 바라지는 않을 것입니다.
B사의 채용공고 입니다
하지만 요즘 들어 프레임워크 단위로 개발자를 채용할 수는 있어도 칼로 무 자르듯이 나눌 수는 없다고 느낍니다. 이 말은 백엔드 개발자가 반드시 한 가지 프레임워크에만 국한되는 능력을 갖고 있는 것은 아니라는 뜻이기도 합니다. 최근 제가 일하는 팀에서는 주로 사용하던 프레임워크와 관련이 없는 Django 프로젝트를 진행했습니다. 프로젝트 초기에는 모두 장고에 경험이 없었기 때문에 팀원끼리 개발에 필요한 지식을 공부하는 시간이 필요했습니다. 그런데 짧은 학습 기간을 거치고 나자 처음부터 장고를 했던 사람들인 것처럼 일을 하기 시작했습니다. Spring 개발자로 쭉 살아왔고 파이썬 언어에 대한 기초지식만 있었던 것을 생각하면 정말 빠른 적응기간이었죠.
사실 이런 경우는 이번이 처음이 아닙니다. 한평생 Java 개발자로 살아오신 분이 파이썬 프로젝트를 능숙하게 잘 해내신 경우도 봤고 마찬가지로 Nodejs 만 해오셨던 분은 Spring 코드를 읽고 어려움 없이 개발하는 경우도 봤습니다. 이러한 사례가 누적되면서 프레임워크로 개발자를 구분하는 것은 축구로 비유하면 세부 포지션으로만 선수를 구분하는 것과 비슷하다고 여기게 됐습니다. 대표팀에서 원톱, 플레이메이커, 좌우 측면 공격수로 뛸 수 있는 손흥민을 소속팀 토트넘에서 주 포지션인 왼쪽 윙포만 할 줄 아는 선수라고 보는 것과 비슷합니다.
멀티 플레이어가 더 각광을 받는 것처럼 개발자도 하나의 프레임워크만 잘해도 좋지만 다재다능할 수 있다면 더욱 좋을 것입니다. 그러면 다양한 프레임워크에서도 잘할 수 있으려면 어떤 능력이 필요할까요? 저는 기본기가 가장 중요하다고 생각합니다. 이것도 축구와 비슷합니다. 축구에서 골키퍼를 제외하면 공격수든 미드필더든 수비수든 어느 포지션에서든 볼을 소유하고 드리블, 패스 능력이 중요합니다. 이 세 가지 능력이 출중한 선수는 어느 포지션에서 뛰든 평균 이상은 합니다. 물론 전문적으로 플레이하기 위해선 시간과 노력이 필요하지만 기본기를 갖춘 사람과 그렇지 못한 사람의 실력차이는 꽤 크죠.
책을 다시 본 적은 없지만 끊임없이 복습하게 됩니다
그러면 개발자에게 필요한 기본기란 뭘까요? 저는 CS 전공 지식과 아키텍처 능력이라고 생각합니다. 학교에서 배우는 운영체제, 네트워크, 알고리즘, 데이터베이스는 모든 것을 이해하기 위한 출발점입니다. 사전 지식이 뒷받침되지 않으면 새로운 것을 배우더라고 깊게 이해하지 못하고 수박 겉핥기 식이 될 수밖에 없죠. 이것은 마치 AtomicInteger 라이브러리를 배워도 Race Condition에 대해서 모른다면 제대로 사용한다고 말할 수 없는 것과 동일합니다. Java에서 Race Condition을 경험해 본 사람은 파이썬에서도 지식만 익히면 금방 능숙하게 다룰 수 있게 됩니다. 반면 어느 언어에서도 제대로 다룬 경험이 없다면 무엇도 제대로 할 수 없게 되죠.
다음은 아키텍처입니다. 우리가 사용하는 프레임워크는 모두 아키텍처의 철학을 담고 있다고 봐도 무방합니다. 스프링은 DI를 손쉽게 사용하기 위해 만들어졌고 Django는 MTV 패턴을 이용해서 구현했습니다. 카프카는 Producer - Consumer 패턴을 응용할 때 적합한 메시지 큐입니다. 이러한 아키텍처는 특정 프레임워크의 전유물이 아닙니다. 이 말은 곧 다른 프레임워크에서도 동일한 아키텍처를 볼 수 있다는 뜻이죠. 아키텍처에 대한 지식이 튼튼하다면 앞으로 마주하게 될 프레임워크도 수월하게 익힐 수 있게 됩니다. 실제로 한평생 Spring만 하신 분이 금방 장고에 적응하게 된 이유도 두 프레임워크에서 공통적인 부분을 발견했기 때문입니다.
기본기를 중시하라는 말은 왠지 모르게 교장선생님의 훈화 같은 느낌이 듭니다. 그리고 CS 전공지식을 복습하는 것보다는 새로운 라이브러리를 익히는 것이 실무에 더 직접적으로 도움이 될 것이라는 생각이 듭니다. 물론 저도 그렀고요. 하지만 일하다 보면 기본기가 부족해서 꽤나 고생을 했던 적이 많습니다. 이해를 하는데 시간도 오래 걸리고 설계를 할 때도 중요한 부분을 놓치게 되곤 합니다. 다소 고리타분한 말이지만 더 괜찮은 개발자가 되기 위해선 기본기를 꾸준히 복습하는 자세가 중요하다고 여겨집니다.