개발의 종류와 유형에 대해 이야기를 해보려고 합니다. 개발을 처음 배우시는 분들이 개발의 종류에는 어떤것이 있는지, 어떤 분야를 내가 배워야 할지에 대한 참고가 되었으면 좋겠습니다.
코딩, 개발의 목적
컴퓨터, 스마트폰, 스마트워치 등을 포함한 모든 전자기기에서 프로그램이라는 것이 작동합니다. 출퇴근길에 찍는 교통카드를 인식하는 기기, 지하철의 자동개폐도어, 지하철내의 도착역 안내 시스템, 지하철 운행제어 시스템 등 우리는 프로그램들 속에서 살아갑니다.
이 프로그램(소프트웨어, 애플리케이션)을 만드는 일련의 작업이 바로 ‘개발’이며, 우리는 이 프로그램을 만들기 위해 개발을 배우고 공부합니다.
선택과 집중으로 배우기
개발을 배우기 시작하며, 보통 첫단계로 코딩을 배우게 됩니다. 코딩이라는 큰 산을 열심히 오르다보면 또 다른 큰 산이 나타나게 되는데요. 바로 광범위한 개발의 영역입니다.
위에서 언급한 방대한 프로그램의 분야가 개발이라는 것을 공부하는 입장에서는 큰 부담으로 다가오기도 합니다. 공부를 해가면서, 개발의 종류와 범위를 함께 알아간다면, 내가 어느 분야에 집중을 하고 어떤 공부를 해야할 지의 범위를 좁힐 수 있을 것입니다.
개발의 종류
개발을 한가지 기준을 가지고 종류로 분류하기에는 애매한 부분이 있습니다. 상황과 목적에 따라 여러가지 기준에 맞춰서 이야기를 하곤 하는데요. 그 기준을 아래와 같이 정리하여 보았습니다.
- 프로그램 종류별
- 플랫폼별
- 기술(언어)별
- 역할별
각각의 구분에 따라 아래에서 좀 더 살펴보도록 하겠습니다.
(1) 프로그램 종류별
어떤 종류(목적)의 프로그램을 만들지에 따라 개발의 종류가 분류됩니다. 우리가 만들려고 하는 프로그램은 그 목적과 용도에 따라 종류가 천차만별일 것입니다.
게임, 문서작성 프로그램(한글, 워드, 엑셀 등), 검색엔진(네이버 검색, 구글 검색 등), 실생활 프로그램(날씨, 메모, 할일관리, 가계부 등), 기업관리프로그램(ERP 등), 메일시스템, 의료용, 산업용, 공장자동화 프로그램 등등
게임을 개발하는 경우 ‘나는 게임 개발을 하고있다.게임 개발자다’라고 말할 수 있겠죠.
(2) 플랫폼별
프로그램은 특정 플랫폼(프로그램이 구동되는 기반 시스템, 인프라) 위에서 작동합니다. 어디서 실행을 할 지에 따라 필요한 기술도 달라지고, 구현방식도 달라지게 됩니다.
- 데스크탑 (윈도우, 맥OS 등)
- 스마트폰/태블릿 (안드로이드, iOS 등)
- 웹
- 기타 전자기기
데스크탑
데스크탑은 우리가 일반적으로 사용하는 PC(또는 노트북)를 말합니다. 이 데스크탑에는 기본적으로 운영체제(윈도우 또는 맥OS 등)가 탑재되어 있는데, 우리는 그 위에서 작동하는 프로그램들을 사용하게 됩니다. 예를 들면 윈도우에서 실행하는 워드나 엑셀 프로그램, 포토샵, 영상제작 프로그램들 모두가 데스크탑 애플리케이션이 되겠습니다.
스마트폰
스마트폰 내부에 기존에 PC에서 사용하던 프로그램 파일을 복사한다고 해서, 그 프로그램을 스마트폰 위에서 실행하고 똑같이 사용할 수는 없겠죠? 보통 프로그램은 PC용 스마트폰(태블릿)용으로 나눠지게 되고, 각 프로그램을 만들기 위한 기술도 달라집니다.
웹
웹은 우리가 사용하는 인터넷을 말합니다. PC를 켠 뒤 우리는 ‘인터넷 익스플로러’ 또는 ‘크롬’ 등 인터넷브라우저를 먼저 실행시키고, 브라우저 안에서 네이버나 다음, 구글에 접속합니다. 그리고 수많은 홈페이지와 사이트, 웹애플리케이션에 접속하며 인터넷 상에 구현된 프로그램들을 사용하게 됩니다.
※ 참고 : 인터넷 브라우저 자체는 데스크탑 애플리케이션입니다. 웹 애플리케이션이 브라우저를 통해 접속되기 때문에, 웹을 데스크탑 애플리케이션이 아닐까 라고 혼동할 수 있는데, 웹은 인터넷이라는 가상공간을 통해 사용자에게 제공된다는 점에서 그 차이가 있습니다. 개발의 영역에서 데스크탑용 애플리케이션과 웹 애플리케이션은 그 구분이 정확하게 나뉘어집니다.
기타 전자기기
PC나 스마트폰 이외에도 우리는 무수히 많은 프로그램들 속에서 살아가고 있는데요. 특정 전자기기 위에서 작동하는 프로그램은 PC나 스마트폰과는 또 다른 기술영역을 가지고 있습니다. (임베디드라는 용어를 사용하기도 합니다.)
(3) 기술(언어)별
개발에는 많은 기술이 존재합니다. 광범위한 분야의 기술을 모두 지니고 있는 개발자도 있고, 특정 기술을 굉장히 전문적으로 수행하는 개발자도 있는데요. 기본적으로 개발 언어에 따라 본인의 개발 분야를 이야기하곤 합니다. Java 개발자, C 개발자, Swift 개발자 등. 이처럼 자신이 주로 사용하는 언어를 자신이 하는 개발의 종류를 소개할때 말하게 됩니다.
언어 이외에도 특정 목적을 가지는 기술이 많이 존재하기 때문에, 그 기술을 대표적으로 이야기하기도 합니다. (ex. 검색엔진 개발자)
(4) 역할별
개발을 하는 과정에는 여러 역할이 존재합니다. 간단한 프로그램 같은 경우에는 개발자 한명이 혼자 모든 영역을 맡아서 하기도 하지만 프로그램의 크기가 커지고 범위가 넓어지게 되면, 그 역할을 나누어서 개발을 하는 것이 효율적입니다.
프로그램 사용자가 처음 접하게 되는 화면 단계의 개발에 집중하는 디자이너, 퍼블리셔, 프론트엔드 개발자가 있습니다. 그리고 화면에는 보여지지 않지만, 데이터를 중앙관리하고, 기능을 수행하고, 보여줄 데이터를 제공해주는 등 역할을 하는 백엔드 개발자가 있습니다.
나는 ㅇㅇ개발자입니다
위에서 설명해드린 개발의 종류에따라, 나는 A개발자다, B개발자다라고 소개를 하게 됩니다. 하지만 종류가 워낙 다양하고 기술도 겹치는만큼 한가지의 종류만으로 하는일을 소개하기는 애매하기도 하기때문에, 자신의 전문분야를 하나가되든 여러개가되든 같이 말하곤합니다.
예를 들어보면 이렇게 말합니다. “저는 웹개발자인데, 스프링을 주로 쓰고, 프론트엔드단도 기본 이상은 할줄 압니다.”
지금 개발분야를 결정해야 하나?
개발을 시작하기 전, 내가 배울 분야를 미리 다 정해놔야 하나요? 그건 그때그때 다를 것 같습니다. 어떤 명확한 목적을 가지고 있다면, 그 분야의 일종의 커리큘럼(테크트리?)를 따라 필수적인 것만 선택하여 배우는 것이 효율적이겠지요.
하지만 이것저것 호기심이 많고, 전반적인것을 다 알고싶을때는 되는대로 공부를 다 해보는 것도 본인에게는 만족스럽지 않을까 싶습니다.
정리
이번 글에서는 개발의 종류에 대해 정리를 해보았습니다. 중요한 점은 공부를 하면서 너무 방대한 범위에 겁먹지 말고, 내가 하고싶은 관심분야에 집중을 하며, 차근차근 공부해나가는 것이 중요할 것 같습니다.
※ 덧. 워낙 범위가 방대한 만큼, 제가 빼먹은 부분도 많을 것 같습니다. 부족한 부분은 점차 보완해보도록 하겠습니다.