SW 업계에 처음 발을 들여놓는 사람들을 위한 안내
SW 개발 분야는 매우 다양하지만, 국내 시장은 그리 크지 않아서 몇 가지 분야로 나눠집니다. 일반적으로 업계에서 수요가 많은 포지션에 따라서 정리를 해 봤습니다. 아래 서술하겠지만 서로 독립적인 것은 아니며 겹치는 부분이 아주 많고, 그냥 제 맘대로 구분을 지어 놓았으니 자세한 내용은 직접 찾아보시는게 좋습니다.
프론트엔드는 넓은 의미로 보통 GUI 환경을 만드는 개발을 의미합니다만, 보통 프론트엔드 개발이라고 부르면 웹 프론트엔드를 의미하는 경우가 많습니다.
웹 프론트엔드 개발은 javascript 를 베이스로 하는 언어를 많이 사용합니다. 웹 프론트엔드 분야는 기술이 너무나 빨리 변하기 때문에 학교에서 배우는 걸로는 크게 쓸모가 없습니다. 왜냐면 학교에서는 angular, react, vue 를 비교해 보고 해당 기술들을 사용하여 웹 페이지 만들기 같은 프로젝트는 거의 안하기 때문입니다. 물론, 기초 지식 등이 중요합니다만, 웹 프론트엔드는 학교에서 배우는 것과 현업의 격차가 매우 큰 분야라고 할 수 있습니다.
인터넷 기업이나 스타트업에서 수요가 많으며, 특성 상 라이브러리나 프레임워크 활용은 쉬워 보이지만 그게 어떤 원리이고 왜 사용하는지 등에 관한 자세한 내용을 알아야만 훌륭한 개발자로 성장할 수 있습니다.
모바일 개발도 프론트엔드의 한 종류라고 볼 수 있는데, 일반적으로 모바일 개발이라 함은 iOS/Android 개발을 의미합니다. 때에 따라서 간단한 웹 프론트엔드 코딩도 할 줄 알아야 하는 경우가 많습니다.
iOS의 경우엔 Objective-C/Swift를 주로 사용하게 되며, Android의 경우엔 Java/Kotlin (코틀린은 아직은 광범위하게 사용되지 않는것 같지만) 을 주로 사용하게 됩니다. 모바일 개발자는 항상 수요가 많은데, 그만큼 공급도 많습니다. 그리고 단순 OS에서 제공하는 API를 쓸 줄 아는 걸로는 큰 경쟁력이 없으며, 여러가지 최적화 기법이나 알고리즘 등을 잘 알고 때에 따라 필요한 기능을 하는 라이브러리 정도는 만들어 낼 수는 있어야 경쟁력 있는 모바일 개발자라고 할 수 있습니다.
백엔드 분야는 서버 개발을 주로 의미하며, 큰 기업의 경우 개발과 운영이 나뉘어 있지만 작은 기업의 경우 운영까지 같이 하는 경우도 많습니다. 그래서 서버 개발 뿐 아니라 운영을 위한 툴이나 시스템도 개발할 줄 아는 것이 좋습니다.
국내에선 java를 많이 사용하지만, python, ruby, go, c#, c++, php 등도 많이 사용되며, 클라우드 서비스가 요즘에는 잘 되어 있고 많이 사용하게 되어서 이걸 잘 다루는 것도 경쟁력의 하나가 되고 있습니다. 서버 개발은 필연적으로 DB 를 다루는 일이 많기 때문에, 스키마 설계나 SQL 작성 등에 대한 지식도 필요하며, 최근에는 RDB 뿐만 아니라 NoSQL 계열에 대한 수요도 높기 때문에 해당 분야에 대한 지식과 경험이 중요해지고 있습니다. 멀티프로세싱, 병렬처리, 메모리 최적화 등도 매우 중요한 이슈라서 이에 대한 지식과 경험들이 경쟁력을 높일 수 있는 부분입니다.
풀스택 엔지니어는 프론트엔드와 백엔드를 모두 할 줄 아는 경우를 의미합니다. 하지만 일반적으로 풀스택이 포지션에 명시된 경우는 스타트업등의 작은 기업이 많기 때문에, 백엔드 쪽에 원하는 기술 스택이 좀 다를 수 있습니다. 백엔드 쪽은 빠른 개발 및 프로토타이핑에 유리한 python & django/flask 나 ruby & rails, javascript & nodejs 등을 선호하며, c++ 이나 java 기반 개발을 구하는 경우는 잘 없습니다.
(2020/3/6 업데이트: 국내에서 백엔드 개발은 원래 java 기반 spring framework 수요가 가장 많았는데, 최근에는 전 세계적으로 spring, spring boot 를 kotlin 으로 사용하는 회사들이 많이 생겨나고 있습니다. 백엔드 개발자를 희망하는 분이라면 spring과 kotlin 을 미리 익혀두면 좋을 것이라고 생각됩니다.)
게임 개발은 아주 큰 범위이며, 프론트엔드와 백엔드를 모두 포함합니다. 게임 프론트엔드의 경우 웹 기반 게임 개발은 수요가 거의 없습니다. 보통 모바일 게임과 PC/온라인 게임 개발 수요가 많으며, 일반적으로 게임 엔진을 사용하여 개발하기 때문에 유니티 등을 쓴다면 C# 기반 개발자를, PC/온라인 게임 개발의 경우 C++ 을 주로 사용하는 개발자의 수요가 많습니다.
게임 백엔드의 경우는 게임 서버 개발 뿐 아니라 로그 분석을 위한 백오피스 개발 등 아주 다양한 포지션으로 많이 있어서 특정하게 무엇을 한다고 이야기 하기는 힘들며, 게임회사의 구인 포지션을 보시면 아시겠지만 정말 다양하고 많은 분야의 사람이 일하고 있습니다.
임베디드 개발은 주로 소형 전자기기, 자동차, 기계, 공장, 센서 등 웹이나 PC 등을 제외한 수 많은 디바이스에 탑재되는 SW 개발을 의미합니다. 예전에는 핸드폰에서 돌아가는 프로그램도 임베디드 개발이라고 했는데, 스마트폰의 등장으로 앱 개발은 모바일 분야로 떨어져 나갔습니다. 다만, 스마트폰 앱 개발이 아닌 스마트폰에 올라가는 프레임워크 자체를 개발하는 경우는 임베디드 개발로 봅니다. 국내에는 주로 셋탑박스에 OS를 포팅하거나 전자기기등에 들어가는 디바이스 드라이버를 만드는 등의 일을 하는 제조사에서 임베디드 개발자의 수요가 꽤 있습니다.
주로 리눅스 환경에서 C/C++ 로 개발하며, OS level 까지 제어하는 경우가 많아서 OS/kernel 에 대한 깊은 지식이 요구됩니다. OS도 없는 상태에서 개발하는 경우도 있으며, 제한된 메모리와 프로세싱 퍼포먼스 환경인 경우가 많기 때문에 최적화를 잘 해야 하며, 그저 그런 임베디드 개발자와 뛰어난 임베디드 개발자는 Kernel을 얼마나 잘 이해하는가와 코드/알고리즘 최적화를 얼마나 잘 하는가로 나뉘는 경우가 많습니다.
SW지식 뿐 아니라 전자회로나 컴퓨터구조에 대한 지식도 필요하고 경우에 따라 납땜을 하거나 오실로스코프를 다루는 등의 일이 필요해서 컴퓨터공학보다는 전자나 전기공학 전공자들이 더 많은 편이며, 하드웨어와 소프트웨어를 둘 다 어느정도 잘 해야 하기 때문에 진입장벽이 좀 있습니다.
PC/Mac 등 데스크탑 네이티브로 돌아가는 프로그램을 만드는 경우를 의미하며, GUI 환경 프로그램을 만드는 것이니 사실 프론트엔드 분야중 하나입니다. Windows의 경우 C++/C#을, Mac의 경우 C++/Objective-C/Swift 를 주로 사용하는데, Qt 처럼 크로스플랫폼 개발도구를 활용하여 Windows/Mac/Linux 에 모두 동작하도록 하는 경우도 꽤 있습니다. 한국 특성 상 Mac이나 Linux 전용 프로그램 개발자 수요는 거의 없고, Windows 의 경우 좀 있는 편입니다. 다만, 요즘에는 모바일 개발이나 웹 개발의 수요가 훨씬 많기도 하며, 특정 환경에서 돌아가는 프로그램 개발보다는 모바일/웹앱 등으로 많이 옮겨가는 추세입니다.
일반적으로 SW 개발이라고 하기에는 애매한, 주로 연구 위주의 포지션 또한 많은데 그냥 퉁쳐서 알고리즘 모델링이라고 분류했습니다. 하지만, 사실 너무 광범위한 주제입니다. 데이터베이스에 대한 연구만 평생 하시는 분들도 많고, 프로그래밍 언어나 최적화 알고리즘만 평생 연구하는 경우도 있기 때문입니다.
다만, 제가 여기서 소개하고 싶은 분야는 요즘 핫한 인공지능과 관련된 포지션입니다. 몇 년 전만 해도 하둡을 잘 이해하는 data engineer, data scientist 등의 수요가 확 늘었다가, 최근에는 AI engineer/researcher 라는 포지션으로 수요가 옮겨갔습니다.
AI 관련 개발자는 머신러닝 기술을 잘 활용하여 데이터가 주어졌을 때 문제를 푸는 모델링을 주로 합니다. 예전에는 데이터마이닝, 음성, 비전, 자연어처리, 머신러닝 등이 모두 서로의 알고리즘을 사용하기는 해도 어느정도 나뉘었는데 요즘에는 딥러닝을 모두 다 사용하고 있으므로 다 퉁쳐서 AI 연구개발이라고 많이 부르고 있습니다. 딥러닝이 핫하긴 하지만 그 외의 여러가지 머신러닝 분야에서 발전해온 방법론들 또한 아직까지 중요한 부분을 차지하고 있으며 계속해서 발전하고 있습니다. 제가 대학원 때 부터 연구하던 분야도 이쪽이며 현재까지 계속 이쪽 분야에서 연구개발을 하고 있으므로 궁금하신 점은 메일 주시면 최대한 답변 드리도록 하겠습니다.
AI가 핫한만큼 수 많은 회사에서 구하고는 있지만, 몇몇 경우를 제외하고는 대학원 학위까지는 있어야 하는 경우가 많아서 수요에 비해 공급이 매우 제한적인 분야중 하나입니다. 다만 요즘에는 다양한 머신러닝 라이브러리가 쓰기 쉽도록 나와서 많은 프론트엔드/백엔드 개발자들도 이 분야에 발을 담그는 경우가 많습니다. 그런 경우 핵심 알고리즘 연구를 하는것은 쉽지 않겠지만, 기존에 나와있는 기술들을 활용하여 제품을 만드는 것은 크게 어렵지 않기 때문입니다.
그 외에도 여러 분야가 있지만, 보안 분야도 빼 놓을 수 없습니다. 다만 보안 분야는 웹 보안, 네트워크 보안, OS 보안, 프로그램 보안 등 여러 분야로 나뉘기도 하고, 국내에서는 해당 분야 회사들도 별로 없고 보안회사에서 진짜 해킹/보안 관련 일 하는 경우는 어릴 때부터 이미 두각을 나타낸 경우가 많아서 따로 설명하지는 않겠습니다.
제가 따로 설명드리고 싶은 것은 SI 개발입니다. SI는 외주라고 볼 수 있어서 사실 개발분야 중 하나라고 하기엔 좀 애매합니다만, 국내 SW 산업에서 엄청나게 많은 파이를 차지하고 있습니다.
SI 개발은 어느 정도 정형화된 틀에서 많이 벗어나진 않습니다. 주로 Java, Jsp, Spring 기반의 웹 프론트엔드/백엔드 개발이나 C# 등을 이용한 개발 프로젝트가 많습니다. 대기업 계열사 SI 를 제외하고는 대부분 짧은 납기일과 열악한 환경에서 배울 것도 없는 프로젝트를 하는 경우가 많습니다. SI 업계가 엉망인 이유는 여러가지인데, 그 이유중 하나는 SI 시장 규모가 그리 크지 않은데 국비지원 과정 등으로 인해 SI 만 하는 인력이 매우 많아서 그 작은 시장을 치열하게 나누어 갖는다는 점입니다. SI의 현실에 대해서는 조금만 검색해보면 수 많은 내용이 나오므로, 대기업 SI 가 아니라면 안 가는 것을 추천합니다.
컴퓨터공학 등을 전공한 대학생들이 SW 업계 상황등을 잘 모르는 경우가 너무 많아서 정리해 보았습니다. 더 궁금한 내용이 있으시면 메일 주시면 최대한 답변 해드리겠습니다.