Back to Insights교육 및 기술 개발

아름다운 광기: 소프트웨어 엔지니어링의 끝없는 기술 트리 탐색하기

Mercury Technology Solutions2025년 4월 14일4 min read

TL:DR:오늘날 소프트웨어 엔지니어가 된다는 것은 끊임없는 학습의 속도를 받아들이는 것을 의미합니다. 핵심 언어와 프레임워크에서 프론트엔드의 복잡성(React, TypeScript), DevOps 관행(Docker, Ansible), 클라우드 인프라(AWS, Terraform), 심지어 관리 기술에 이르기까지 그 범위는 계속 확장되고 있습니다. 건설과 같은 고도로 전문화된 분야와는 달리, 소프트웨어는 종종 개인이 광범위한 분야를 다루기를 기대하며, 역할 간의 경계가 흐려집니다. 도전적이지만, 이는 우리 분야의 역동적인 본질을 증명하는 것입니다.

끝없는 소프트웨어 엔지니어링 기술 트리 탐색하기

나는 종종 반성합니다: 소프트웨어 엔지니어링 세계에서 요구되는 지식의 속도와 폭. 다른 대부분의 직업에서도 이렇게 일까요? 솔직히 가끔 궁금합니다. 소프트웨어 엔지니어의 여정은 끊임없는 적응과 학습의 과정으로, 정말 독특한 종류의 전문적인 "광기"라고 할 수 있습니다.

솔직히 말하자면: 훌륭한 소프트웨어를 만드는 것은 힘든 일입니다. 몇 가지 프로그래밍 언어와 필수 도구에 대한 숙련도가 필요합니다. 하지만 그것은 단지 입장권일 뿐입니다. 기업들은 그들의 특정 기술 스택에 대한 친숙함을 기대합니다. 아마도 Ruby on Rails, Django, Laravel 또는 전혀 다른 것일 수 있습니다. 그리고 CSS는 그 자체로 하나의 우주로, 마스터하기가 영원히 손이 닿지 않는 것처럼 느껴지지만, 그럭저럭 사용할 수 있을 만큼은 배우게 됩니다(가끔 레이아웃이 깨지는 이유에 대해 머리를 긁적이기도 하면서).

자바스크립트는요? 사실상 피할 수 없습니다. 운이 좋다면, 아마도 오래된 애플리케이션을 유지보수하는 것일 뿐일 것입니다. 하지만 기술은 좀처럼 가만히 있지 않습니다.

대혼란: 풀스택 및 DevOps의 등장

어느 날, 페이스북의 한 팀이 React를 개발합니다. 갑자기 집단 지성이 이것이 현대 소프트웨어 인터페이스를 구축하는 "올바른" 방법이라고 선언합니다. 그러나 많은 기업들은 이 새로운 접근 방식이 필요함에도 불구하고 백엔드 팀과 함께 전담 프론트엔드 전문가를 고용하는 것을 주저합니다. 그렇게 해서 "풀스택 엔지니어"가 보편화됩니다. 그래서 React에 뛰어들고, 타입이 중요하니 TypeScript를 추가하고, Redux를 사용하여 상태 관리를 다루거나, 컨텍스트 API의 복잡성을 탐색하고, webpack, esbuild 또는 Rollup과 같은 빌드 도구를 구성하고, 린터와 포매터를 설정합니다. 트렌드에 저항하나요? 가능하지만, 최신 프레임워크에만 능숙한 신입 사원을 멘토링해야 할 수도 있는 빠르게 움직이는 스타트업에서는 힘들 수 있습니다.

하지만 확장은 프론트엔드에서 그치지 않습니다. 시스템 관리자 기억하시나요? 예전에는 그들이 인프라의 수호자였고, 서버가 원활하게 작동하도록 보장하며, 데이터베이스, 업데이트 및 배포를 관리했습니다. 그러다 DevOps 운동이 시작되었습니다. 효율성과 비용 절감을 부분적으로 추구하면서, 운영, 배포 및 인프라 관리의 책임이 엔지니어 팀으로 이동하기 시작했습니다. 이제 Docker를 마스터해야 합니다. 애플리케이션이 간단한 바이너리라 하더라도, 구성 관리를 위해 Ansible이 필요할 수 있으며, SystemD의 복잡성을 탐색하는 것은 행운입니다.

클라우드 및 그 너머로 올라가기

우리는 아직 절반도 오지 않았습니다! 다음은 클라우드입니다 - AWS, Azure, GCP. 단순히 GUI에서 클릭하는 것으로는 안 됩니다; 코드로서의 인프라(IaC)가 필요합니다. 따라서 Terraform이나 Pulumi를 학습 목록에 추가하여 프로그램적으로 리소스를 프로비저닝하고 관리해야 합니다.

성공을 거두고 관리자 승진? 축하합니다! 이제 배우고 익혀야 할 새로운 분야가 있습니다: 일정 추정, 작업 위임, 사양 작성, 성과 검토 수행, 제품 전략 회의에서 의미 있게 기여하기. 그리고 회사가 크게 성장하지 않았다면, 당신은 여전히 기술 작업을 수행하면서 이 모든 일을 해야 할지도 모릅니다.더욱 혼란스러워집니다. 최근에 한 채용 담당자가 Rails, Hotwire, 그리고 네이티브 모바일 개발(iOS/Android)에서 "시니어 레벨" 기술을 가진 엔지니어를 찾고 있는 것을 보았습니다. 그럼 커널 및 컴파일러 개발도 추가하면 어떨까요?전문화는 어디로 갔나요?

소프트웨어의 복잡성은 종종 좋은 이유로 증가합니다. 하지만 이는 다른 복잡한 작업에 대해 생각하게 만듭니다. 집을 짓는 것은 건축가, 토목 엔지니어, 배관공, 전기기사, 벽돌공, 인테리어 디자이너, 지붕공, 측량사 등 전문 팀이 필요합니다. 한 사람이거나 심지어 한 작은 회사가 모든 기술을 마스터할 것이라고 기대하지는 않을 것입니다.그런데 소프트웨어에서는 기대가 종종 깊은 전문화보다는 하이퍼 다재다능함에 기울어지는 경향이 있습니다.어쩌면 미래는 희망을 품고 있을지도 모릅니다. 아마도 AI와 LLM의 발전이 결국 간단한 프롬프트에서 복잡한 애플리케이션을 생성할 수 있게 해줄 것이고, 이 기본적인 복잡성을 처리할 수 있게 될 것입니다. 그것은 나쁘지 않은 일일 수 있으며, 우리가 핵심 문제 해결 측면에 더 집중할 수 있게 해줄 것입니다.그때까지 소프트웨어 엔지니어의 삶은 흥미롭고 때로는 압도적이지만 항상 진화하는 지속적인 학습의 여정으로 남아 있습니다. 이는 우리 분야의 역동성을 증명하는 것이며, 솔직히 말해 그것이 얼마나 흥미로운지를 만드는 부분입니다.계속 배우고, 계속 만들어 나가세요!

Where Did Specialization Go?

Software complexity grows, often for good reasons. But it makes me think about other complex undertakings. Building a house involves architects, civil engineers, plumbers, electricians, bricklayers, interior designers, roofers, surveyors – a whole team of specialists. You wouldn't expect one person or even one small company to master all those trades.

Yet, in software, the expectation is often leaning towards hyper-versatility rather than deep specialization.

Perhaps the future holds promise. Maybe advances in AI and LLMs will eventually allow us to generate complex applications from simple prompts, handling much of this underlying complexity. That wouldn't necessarily be a bad thing, allowing us to focus more on the core problem-solving aspects.

Until then, the life of a software engineer remains a thrilling, sometimes overwhelming, but always evolving journey of continuous learning. It's a testament to the dynamism of our field, and frankly, part of what makes it so exciting.

Keep learning, keep building!

Originally published on MTS Blog & Research