TL:DR: 오늘날 소프트웨어 엔지니어가 된다는 것은 끊임없는 배움의 속도를 받아들여야 한다는 것을 의미합니다. 핵심 언어와 프레임워크부터 복잡한 프런트엔드(React, TypeScript), DevOps 관행(Docker, Ansible), 클라우드 인프라(AWS, Terraform), 심지어 관리 기술까지 그 범위는 계속 확장되고 있습니다. 건설과 같은 고도로 전문화된 분야와 달리 소프트웨어는 개인이 방대한 영역을 커버해야 하는 경우가 많아 역할 간의 경계가 모호한 경우가 많습니다. 이는 도전적이기는 하지만 이 분야의 역동적인 특성을 보여주는 증거이기도 합니다.
소프트웨어 엔지니어링의 끝없는 기술 트리 탐색하기
소프트웨어 엔지니어링 분야에서 요구되는 엄청난 속도와 폭넓은 지식에 대해 자주 생각하게 됩니다. 다른 대부분의 직업도 마찬가지일까요? 솔직히 가끔 궁금할 때가 있습니다. 소프트웨어 엔지니어의 여정은 끊임없는 적응과 학습의 연속이며, 정말 독특한 종류의 직업적 '광기'라고 할 수 있습니다.
솔직히 말해서 훌륭한 소프트웨어를 구축하는 것은 까다로운 일입니다. 먼저 몇 가지 프로그래밍 언어와 필수 도구에 능숙해야 합니다. 하지만 이는 단지 입장권일 뿐입니다. 기업들은 루비 온 레일즈, 장고, 라라벨 등 특정 기술 스택에 익숙하기를 당연히 기대합니다. 그런 다음에는 (가끔씩 레이아웃이 깨지는 이유에 대해 머리를 긁적거리면서도) 충분히 배웠음에도 불구하고 숙달이 영원히 불가능하다고 느껴지는 그 자체의 세계인 CSS가 있습니다.
자바스크립트는요? 사실상 피할 수 없습니다. 운이 좋다면 오래된 애플리케이션을 유지하면서 jQuery를 약간만 사용하는 정도일 수도 있습니다. 하지만 기술은 가만히 있는 법이 없습니다.
위대한 블러링: 풀스택 및 데브옵스 시작하기
어느 날 Facebook의 한 팀이 React를 개발합니다. 갑자기 이것이 최신 소프트웨어 인터페이스를 구축하는 '올바른' 방법이라고 집단 지성이 선언합니다. 하지만 많은 기업이 이 새로운 접근 방식이 필요함에도 불구하고 백엔드 팀과 함께 전담 프론트엔드 전문가를 고용하는 것을 주저합니다. 그리고 그렇게 '풀스택 엔지니어'가 표준이 됩니다. 그래서 React에 뛰어들고, 타입이 중요하기 때문에 타입스크립트를 추가하고, Redux를 사용하여 상태 관리와 씨름하고(또는 컨텍스트 API의 복잡성을 탐색하고), 린터 및 포맷터와 함께 웹팩, esbuild 또는 롤업과 같은 빌드 도구를 구성하게 됩니다. 트렌드를 거스르고 싶으신가요? 가능하지만 빠르게 변화하는 스타트업에서는 최신 프레임워크에만 능통한 신입사원을 멘토링해야 할 수도 있습니다.
하지만 확장은 프런트엔드에서 멈추지 않습니다. 시스템 관리자를 기억하시나요? 과거에는 (지금은 옛날 이야기처럼 느껴지지만!) 서버가 원활하게 실행되도록 하고 데이터베이스, 업데이트 및 배포를 관리하는 인프라의 수호자였습니다. 그러다가 데브옵스 운동이 시작되었습니다. 부분적으로는 효율성과 비용 절감에 힘입어 운영, 배포 및 인프라 관리에 대한 책임이 엔지니어링 팀으로 옮겨가기 시작했습니다. 이제 Docker를 마스터해야 합니다. 애플리케이션이 단순한 바이너리일지라도 구성 관리를 위해 Ansible이 필요할 수 있으며, 복잡한 SystemD를 탐색하려면 행운을 빕니다.
클라우드 등반 및 그 이상
아직 절반도 오지 않았습니다! 다음은 AWS, Azure, GCP 등 클라우드입니다. 단순한 인간처럼 GUI에서 클릭만 할 수 있는 것이 아니라 코드형 인프라(IaC)가 필요합니다. 따라서 프로그래밍 방식으로 리소스를 프로비저닝하고 관리하려면 Terraform 또는 Pulumi를 학습 목록에 추가하세요.
성공을 거두어 매니저로 승진하셨나요? 축하드립니다! 이제 타임라인 예측, 업무 위임, 사양서 작성, 성과 검토, 제품 전략 회의에서 의미 있는 기여 등 완전히 새로운 분야를 배워야 합니다. 회사 규모가 크게 확장되지 않았다면 이 모든 일을 하면서도 여전히 기술적인 업무를 직접 수행해야 할 수도 있습니다.
점점 더 거칠어집니다. 최근 한 채용 담당자가 Rails, Hotwire, 네이티브 모바일 개발(iOS/Android) 분야에서 <시니어급> 기술을 갖춘 엔지니어를 찾고 있는 것을 보았습니다. 이왕이면 커널과 컴파일러 개발도 해보는 건 어떨까요?
전문화는 어디로 갔나요?
소프트웨어의 복잡성은 점점 더 커지는데, 이는 대부분 정당한 이유가 있습니다. 하지만 다른 복잡한 사업도 생각하게 됩니다. 집을 짓는 데는 건축가, 토목 기술자, 배관공, 전기 기술자, 벽돌공, 인테리어 디자이너, 지붕공, 측량사 등 전문가로 구성된 팀 전체가 참여합니다. 한 사람이나 작은 회사 한 곳이 이 모든 것을 마스터할 수 있을 것이라고 기대하기는 어렵습니다.
하지만 소프트웨어 분야에서는 심도 있는 전문성보다는 다재다능함에 대한 기대가 더 큰 경우가 많습니다.
미래에는 희망이 있을지도 모릅니다. AI와 LLM의 발전으로 결국에는 단순한 프롬프트에서 복잡한 애플리케이션을 생성하여 이러한 근본적인 복잡성을 상당 부분 처리할 수 있게 될지도 모릅니다. 핵심적인 문제 해결 측면에 더 집중할 수 있다는 점에서 반드시 나쁜 것만은 아닐 것입니다.
그때까지 소프트웨어 엔지니어의 삶은 스릴 넘치고 때로는 압도적이지만 항상 진화하는 끊임없는 배움의 여정입니다. 이는 우리 분야의 역동성을 보여주는 증거이며, 솔직히 말해서 이 분야를 흥미진진하게 만드는 이유 중 하나입니다.
계속 학습하고, 계속 구축하세요!