개발분야를 크게 나누어 보면 웹과 앱이 있다. 그래서 웹개발자와 앱개발자로 나뉜다. 웹개발은 웹브라우저에서, 앱개발은 핸드폰에서 돌아가는 프로그램 개발하는 것을 뜻한다.
예전에는 pc만 있었고 윈도 os와 맥 os로 나누어진다. 그래서 윈도용 프로그램과 맥용 프로그램이 따로 있다. 윈도 개발자와 맥 개발자도 따로 있다.
그러다가 인터넷이 등장하면서 브라우저라는 게 생겼다. 보통 브라우저는 윈도나 맥을 가리지 않는다. 심지어 핸드폰 종류도 가리지 않는다. 그래서 한참 웹개발이 대세였다.
하지만 핸드폰이 생기면서 이제는 앱이 대세다. 크게는 안드로이드폰과 아이폰으로 나뉜다. 그래서 안드로이드 개발자와 ios개발자로 구분된다. 안드로이드폰용 앱은 예전에 자바로 개발했다가 지금은 코틀린이라는 구글에서 개발한 자체 언어로 한다. 아이폰은 오브젝티브-C언어에서 지금은 스위프트라는 언어를 쓴다.
처음 개발을 시작할 때 윈도용 프로그램 언어인 비주얼베이식으로 병원용 차트 프로그램을 만들었다. 좀 더 고난도 프로그램은 비주얼 c++이라는 언어로 개발한다. 지금도 아마 그럴 것이다.
회사가 인수되면서 막내였던 나는 잘리고, 먼저 나갔던 동기 소개로 웹과 cd로 기업정보를 서비스하는 회사에 취직하면서 '윈도 개발자'에서 '웹 개발자'로 넘어갔다. 그 회사의 서비스 개발언어가 php다. 지금도 php를 주로 다룬다. 오래 일하다 보니, 개발자가 갑작스럽게 나가면 땜빵하느라 자바로 이루어진 jsp와 안드로이드 앱 유지보수도 한다.
웹개발 언어는 크게 자바 기반의 jsp와 윈도 기반의 asp, 오픈소스 기반의 php로 나뉜다. 그래서 jsp개발자, asp개발자, php개발자로 나뉜다. 자바가 미국이라면, php는 중국 같은 느낌이다. 무료라 많이 쓰는데 사람들이 약간 무시하는 느낌이다. 중소기업에서 많이 쓴다.
서버는 리눅스, 웹 애플리케이션 서버(WAS)는 nginx, 디비는 mysql, 보통 요렇게 세트로 많이 묶어서 쓴다. 이른바 약자로 LNPM이다. 공통점은 오픈소스로 다 무료 프로그램이다. 그러니 돈 없는 중소기업에서 많이 쓴다.
돈 많은 대기업에서는 유닉스 또는 MS서버, 상용 WAS로는 제우스, 웹로직 등이 있고, 디비로는 유명한 오라클이나 MS-SQL서버가 있다. 다 유료다. 또한 매우 비싸다. 비싼 이유는 문제가 생겼을 때 해당 업체로부터 유지보수를 받을 수 있다. 물론 무료 유지보수 기간이 끝나면 또 돈을 많이 내야 한다.
오픈소스 프로그램들은 문제가 생기면 자기가 알아서 해결해야 한다. 그래서 공짜다. 물론 나중에 개선된 버전이 업데이트되기도 한다. 그전까지는 어쩔 수 없이 꼼수를 동원하든, 서버 사양을 높이든 다른 방법을 찾아야 한다. 그게 튜닝과 최적화다.
개발 분야를 다른 각도로 또 나누면 프런트와 백엔드 개발이 있다. 그래서 프런트엔드 개발자, 백엔드 개발자로 나뉜다. 간단히 말하면 눈에 보이는 부분을 개발하는게 프런트 엔드고, 눈에 보이지 않는 부분을 개발하는게 백엔드다. 백엔드는 디비를 많이 다룬다고 생각하면 쉽다. 주로 디비를 이용해서 비즈니스 로직을 짠다. 비즈니스 로직은 데이터를 생성, 표시, 저장, 변경하는 부분을 말한다. 백엔드 중에서도 db만 전문적으로 다루는 사람을 DBA(database administrator)라고 따로 구분하기도 한다. 그만큼 중요하다.
어느 정도 규모가 있는 서비스에서는 백엔드가 중요하다. 내 생각에 80%쯤 된다고 보면 맞는 거 같다. 대부분 개발자의 실력은 프런트 보다 백엔드에서 갈린다. 초보자들이 개발하면 사람이 조금만 몰려도 서비스가 뻗는다. 보통은 디비를 어떻게 다루느냐에 달려 있다.
대기업들은 이렇게 직군 별로도 팀과 사람이 나뉘어 있고, 프런트와 백엔드도 나뉘어져 있고, 웹과 앱 개발자도 나뉘어 있다. 중소기업은 구분이 없다. 이것저것 할 수 있는 건 다한다. 다하는 사람을 전문 용어로 풀스택 개발자라고 한다.
만약 자녀들이 개발자가 되기를 원한다면 분야를 정해야 한다. 웹개발을 할지 앱개발을 할지 웹개발을 한다면 자바기반으로 할지, 다른 걸 할지, 앱개발을 한다면 안드로이드를 할지 ios를 할지, 또는 프런트 개발을 주로 할지 백엔드 개발을 주로 할지에 따라 공부해야 하는 분야가 달라진다. 게임 개발은 잘 모르지만 분야가 또 다르다.
가끔 개발자들을 컴퓨터 고치는 사람으로 생각하는 사람들이 많다. 우리 회사도 인터넷 안되고, 자기 노트북에서 뭐가 안되면 다 나한테 물어본다. 그럼 나도 모르는 건 검색해서 알려준다. 심지어 오피스나 한글 프로그램 깔아달라고 오기도 한다.
또한 몇몇 사람들은 개발자는 모든 걸 개발할 수 있는 걸로 안다. 피시랑 모바일이랑 디바이스가 다르면 각자의 os가 다르고, 개발언어가 다르다. 같은 os개발이라도 자기가 모르는 다른 언어로 개발됐으면 수정하기 어렵다. 일단 남이 짠 코드는 다 어렵다. 그래서 새로 개발하는게 나을 때도 있다. 간혹 내가 짠 코드도 시간이 지나면 헷갈린다. 아무튼 다 할 줄 안다는 건 한 사람이 영어도 하고 중국어도 하고 스페인어도 할 줄 안다는 것과 비슷하다.
대부분의 사람은 영어 하나도 제대로 하기 어렵다. 개발자도 마찬가지다. 프로그램 '언어'라고 하는 이유가 다 있다. 언어마다 문법이 다르고 용어가 다르다. 대개의 경우 영어를 잘한다고 중국어도 잘 할 수 없다. 물론 예외는 있다. 다국어 능통자가 있는 것처럼, 한 가지 언어에 능통하면 다른 언어를 배우기가 더 쉬울 수 있다.
이 바닥에서 20년쯤 짬밥을 먹다 보니, 개발이란 끝없는 문제 해결의 연속인 것 같다. 개발자로 오랫동안 살아남는 방법은 문제가 해결될 때까지 하는 방법 밖에 없는 거 같다. 머리가 안 좋으면 몸이 고생하는 건 맞다. 하지만 재능도 결국 태도 같다. 될 때까지 하면 대부분 해결된다. 지금까지 개발하면서 배운 건 그런 자세와 태도다.
너무 빠르게 하드웨어도 바뀌고, 소프트웨어도 바뀌니 정신없다. 항상 공부해야 한다. 가만히 내버려두면 뻑나거나 갑자기 서비스가 안 될 수 있다. 왜 이렇게 외부 라이브러리 버전(오픈소스 프로그램 집합)은 또 바뀌고, 빨리 지원 종료를 하는지 그동안 잘 쓰던 서비스가 무용지물이 안되려면 또 수정해야 한다. 특히 모바일 앱이 심하다. 안드로이드는 몇 달에 한번씩은 있는 것 같다.
얼마 전에 트위터가 일론 머스크에게 인수되면서 갑자기 api를 유료화하겠다고 선언하고 한 달안에 수정하라고 해서 난리가 났었다. 보통은 최소 6개월에서 1년 정도는 유예기간을 주기 마련인데, 지금은 보류되긴 했지만 이 일로 일론 머스크에 대한 환상이 깨졌다.
길게 설명했는데 말하고자 하는 바는 개발자를 그냥 개발자라고 퉁쳐서 부르기에는 너무 세분화되어 있고, 분야가 좀 많다. 그리고 컴퓨터 고치는 사람이 아니다. 제발 조금이라도 개발자를 이해하는데 이 글이 도움 되었으면 좋겠다.
물론 내가 아는 범위의 개발자에 관한 일부만 설명한 거다. 내가 모르는 분야가 더 많다.
난 리눅스 기반 서버에서 php라는 언어를 주로 하는 웹개발자이면서, 프런트와 백엔드를 다루고, 가끔 자바로 jsp 서비스 와 안드로이드 앱을 유지보수하면서, 서버와 네트워크, 보안까지 이것저것 다 조금씩 발 담그고 있는 중소기업 월급쟁이 개발자다.