이전 글에서 개발자 분야에 대해 간략하게 설명했었는데 조금 부족한 듯하여 이 중 가장 개발자가 많은 분야 두 곳을 좀 더 자세히 알아보고자 한다. 개발자가 가장 많은 분야는 모바일 앱과 웹 개발 분야이다. 프론트엔드, 백엔드 개발로 나뉘며 이 두 분야의 개발을 모두 잘하는 개발자를 풀스택 개발자라고 말하기도 한다.
프론트엔드 개발자
1. 모바일 앱 개발자
1.1 네이티브 앱
네이티브 앱이란 특정 플랫폼에 최적화된 프로그램을 말하며 개발 소스와 실행 파일이 완전히 분리된 형태를 띄고 있다. 일반적으로 C/C++과 같은 컴파일 언어를 사용한다. 컴파일(Compile)과 링킹(Linking) 과정을 통해 최종적으로 해당 플랫폼에 맞는 기계어로 된 바이너리 파일을 만든다.
프로그래밍 언어를 익히는 게 좀 어렵고 대체적으로 개발 기간이 긴 편이지만, 스크립트 언어로 다룰 수 없는 플랫폼 구석 구석을 다룰 수 있기 때문에 난이도가 높은 앱을 만들 수 있으며 실행 속도도 월등히 빠르다. 무엇보다 내가 생각하는 가장 큰 장점은 유행을 타지 않는다는 것이다. 다른 스크립트 언어를 다루더라도 C/C++과 Java 계열의 언어는 알고 있는 것이 개발자로 사는데 많은 도움이 될 것이다.
모바일 플랫폼은 크게 iOS와 Android로 양분되어 있으며 각각 사용하는 주요 프로그래밍 언어는 C와 Java이다. Java 계열은 정확히 말하면 컴파일 언어는 아니다. JVM(Java Virtual Machine)에서 구동되는 중간 형태의 언어를 만드는데 편의상 같은 범주에 포함시켰다.
스위프트(Swift)나 코틀린(Kotlin)은 다음 기회에 보다 자세히 다뤄보기로 하겠다.
- iOS: Objective-C, Swift
- Android: Android(Java), Kotlin
1.2 크로스플랫폼 앱
네이티브 앱이 기술적으로나 성능적으로 우수한 것을 알지만 모든 앱이 높은 기술적인 난이도와 성능을 요구하진 않는다. 그보다는 동일한 룩앤필, 적은 개발자, 짧은 개발 기간이 더 중요할 수 있다. 한 개의 소스로 두 플랫폼 모두 구동 가능한 크로스플랫폼 개발 환경을 선택하는 이유다.
단점은 아무래도 두 플랫폼 모두 지원해야 하니 공통적으로 구현 가능한 일반적인 형태의 개발만이 가능하며 각 플랫폼의 장점을 충분히 살리기 어렵다는 점, 앱의 성능이 네이티브 앱에는 못 미친다는 점, 그리고 네이티브 앱 개발을 해왔던 사람만이 느낄 수 있는 점일지 모르겠으나 디버깅이 생각보다 골치가 많이 아프다는 점을 들 수 있겠다.
- 리액트네이티브: 페이스북에서 UI를 만들기 위해 컴포넌트 기반의 개발 방식을 사용하여 만든 일종의 모바일용 라이브러리이다. 자바스크립트를 그대로 사용할 수 있기 때문에 웹개발자의 접근성이 용이하다.
- 플러터: 구글에서 개발한 오픈 소스 모바일 애플리케이션 개발 프레임워크. 다트(Dart)라는 약간 생소한 언어를 사용하는데 구글에서 이미 사용중이고 크로스플랫폼의 한계인 성능과 속도가 많이 개선된 최근 트랜디한 프레임워크 중 하나이다.
1.3 하이브리드 앱
하이브리드 앱은 크로스플랫폼 앱의 범주에 포함되므로 이제는 더이상 사용하지 않는 용어라고 봐도 무방하다. 과거에 네이티브 앱, 웹 앱과 구분지어 하이브리드 앱이라는 용어를 많이 사용하였는데 웹 앱이란 그냥 모바일 브라우저에서 실행되는 것을 말하고 하이브리드 앱은 내부는 웹 형식으로 개발하고 껍데기를 네이티브 앱의 형태로 만들어 웹 개발로 접근하기 어려운 부분을 보완하는 형태로 사용되었다.
2. 웹 개발자
웹 개발자란 간단하게 정의하자면 웹 사이트를 개발하는 개발자이다. 우리가 웹브라우저를 통해 보는 화면을 개발하는 사람이다. 웹은 앱과 다르게 혼자 스스로 동작하는 경우가 거의 없다. 대부분 서버와 요청(Request)과 응답(Response)이라는 약속된 형식의 통신을 통해 동작하게 된다. 예전에는 단순하고 정적인 웹 페이지가 전부였지만 최근에는 네이티브 앱에 버금가는 기능이 구현 가능할 정도로 많은 기술의 변화가 있었다. 덕분에 개발자는 훨씬 더 많은 공부를 해야 한다. 좋지만 힘들다.
웹 개발자가 되기 위해서는 많은 노력이 필요하다. 네이티브 앱 개발이 깊이 있는 공부가 중요하다면 웹 개발은 깊이도 중요하지만 넓게 공부하는 것이 무척 중요하다. 네이티브 앱 개발의 선택지는 어느정도 정해진 것에 반해 웹 개발은 엄청나게 많은 선택지가 있기 때문이다. 개발자는 개발을 잘하는 것도 중요하지만 적재 적소에 맞는 개발 프레임워크를 선택하는 것도 매우 중요하다.
초보 개발자라면 와닿지 않는 얘기일 수 있어서 웹 개발자가 되기 위한 로드맵을 먼저 설명하고 이후에 간단히 웹 프레임워크를 소개하도록 하겠다. 로드맵은 최소한의 소개만을 담았다. 순서와 키워드만 기억하고 상세한 내용은 차차 학습하면 될 것이다.
2.1 웹 개발자 로드맵
- HTML, CSS, JavaScript: HTML은 문서의 구조, CSS는 구조에 기반한 꾸미기, JavaScript는 동적인 요소 개발을 각각 담당한다. 웹 개발의 가장 기초적인 부분이므로 반드시 학습하고 넘어가야 한다. 기초적인 내용뿐만 아니라 HTML5의 개념 및 JavaScript의 ES6+ 특징에 대해서도 많은 학습이 필요하다.
- Node.js: JavaScript 런타임. JavaScript는 원래 웹브라우저 환경에서만 구동이 가능하지만 웹브라우저 바깥에서도 사용 가능하게 만들어 놓은 것이 Node.js이다. 많은 사람들이 Node.js를 서버사이드 스크립트 언어를 지칭하는 것으로 오해를 하는데 절대 아니다. 런타임이다. 런타임이란 프로그램을 실행할 수 있게 만들어 놓은 환경이라는 뜻이다.
- NPM: Node.js 기반의 패키지를 관리할 수 있는 도구이다. 앞으로 웹 개발을 하게 되면 밥 먹듯 마주하게 될 도구이므로 잘 알아두어야 할 것이다. yarn도 같은 용도로 사용되므로 같이 알아 두는 것이 좋을 것이다.
- Webpack: 여러 파일을 하나로 묶어주는 번들러. 웹 어플리케이션을 구성하는 여러 파일들(HTML, CSS, JavaScript)을 하나로 묶어주는 자바스크립트 번들러이다. 효율적인 배포와 관리를 가능하게 한다.
- 웹 프레임워크: 대표적인 웹 프론트엔드 프레임워크는 Angular, React, Vue.js가 있으며 이 중 React가 최근까지 가장 많이 개발자들의 사랑을 받고 있는 듯하다.
백엔드 개발자
백엔드 개발은 프론트엔드 개발의 반대되는 쪽을 개발하는 것이다. 즉, 사용자에게 보이지 않는 뒤쪽을 개발하는 것이며 데이터베이스와 서버 프로그램 등을 주로 담당하게 된다. 백엔드 개발자는 프로그래밍 외에 데이터베이스, 웹서버, 네트워크 등에 관한 기술이 필요하다.
화면에 보이는 부분을 개발하지 않고 최종 사용자 단말에 의존적이지 않기 때문에 백엔드 개발자는 굳이 네이티브 앱과 웹 개발을 나눌 필요가 없다. 다만 딱 잘라서 백엔드 개발자는 프론트엔드 웹 개발 지식 없이 백엔드 개발만 할 수는 없기 때문에 프론트엔드 웹 개발에 관한 내용도 모두 같이 학습해야 한다.
앞서 언급한 프론트엔드 웹 개발자 로드맵 부분을 참고하기 바라며 여기에 더해 주요 백엔드 프레임워크도 간단히 살펴 보겠다. 참고로 백엔드로 분류했지만 대부분 프론트엔드도 같이 다루기 때문에 풀스택 프레임워크라고 말하기도 한다.
- 익스프레스(Express): node.js 기반의 프레임워크. 자바스크립트 기반이라 배우기가 비교적 쉬움.
- 스프링(Spring): Java 기반의 프레임워크로 엔터프라이즈급 웹 개발에 많이 사용됨. 오래되고 안정적이다. 레퍼런스가 많아 대기업, 공공기관, 금융관련 기업 등에 많이 사용된다. 개인적으로 Java를 좋아하지 않아 멀리했었는데 우리나라에서는 프리랜서 포함 스프링 개발자는 나이가 50대가 넘어서도 엄청 잘 팔린다. 늙어서 개발자로 먹고 살 걱정 안하려면 꼭 참고하시라.
- 장고(Django): 파이썬(Python) 기반의 프레임워크.
- 루비온레일즈(Ruby on Rails): 루비(Ruby) 기반의 프레임워크.
- ASP닷넷프레임워크(ASP.NET Framework): 마이크로소프트 닷넷 기반의 프레임워크.
핑백: 프로그래밍 언어, 무엇부터 배워야 할까?