[출처] https://brunch.co.kr/@yoobstudio/2
컴퓨터공학 등을 전공한 대학생들이 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 을 미리 익혀두면 좋을 것이라고 생각됩니다.)