IT이야기/입코딩2017. 8. 8. 13:28

-프로그래머(Programer)의 종류

프로그래머에는 어떤 종류가 있는지 한번 알아보겠습니다.

좀 해깔리기는 한데, 사용하는 언어로 JAVA 개발자, PHP 개발자, 닷넷 개발자를 나누기도 하지만 개발자 종류로서는 웹 개발자이고 SI업무나 SM 업무를 할수 있습니다.

물론 JAVA를 사용한다고 꼭 웹을 만드는 게 아니라 모바일이나 응용프로그램을 만들기도 합니다.

어떤 어떤 분야에 프로그래머가 있는지 한번 알아 보겠습니다.



'프로그래머'라는 단어 하나로 간편하게 통칭하여 부르고 있긴 하지만, 프로그래머에도 여러 분야가 있습니다. 

고급 언어와 툴을 다룰 줄 아는게 전부인 프로그래머 부터, 저급 언어까지 다룰 줄 아는 프로그래머까지 그 스펙트럼은 어마어마하게 넓습니다. 

또 소수의 코어파트 프로그래머들이 있는가 하면, 다수의 양산형 프로그래머인 코더가 있습니다.

컴퓨터 프로그래밍 기술에 능숙한 사람들은 유명세를 타기도 하지만, 이러한 관심을 받는 대상은 보통 소프트웨어 공학자 집단으로 국한됩니다. 

그리고 종종 저명한 프로그래머들 중에는 "해커"라는 이름으로 불리는 사람들도 있습니다.

프로그래머라는 직종이 이런 넓은 스펙트럼을 가지고 있기 때문에 단순히 뭉뚱그려 부르기에는 상당히 무리가 있습니다. 

비유를 하자면 트럭, 택시, 버스, 중장비기사를 전부 뭉뚱그려 '운전자'라고 표현하는 것과 같습니다.


-알고리즘 개발자

응용수학자 및 물리학자들이 많이 분포해있는 분야입니다. 

특정 상황에서 더욱 효율적인 알고리즘을 만들어내고 이를 수학적, 논리적으로 증명하는 게 주 목적입니다. 

사람들은 이들은 프로그래머/엔지니어라고 부르기보단 박사/연구자라 보는 경향이 있습니다. 실제 프로그래밍은 최소한도로만 수행하거나 아예 수행하지 않습니다.

프로그래밍 언어는 대부분 한 종류 이상 능숙하게 다룰 수 있기는 하지만 결과물을 프로그램으로 발표하는 게 아니라 논문으로 주로 발표하는 것도 큰 차이입니다. 

프로그래밍 언어를 다룰 줄 아는 것도 정말 순수하게 도구로써 다루는 것이지 그것이 생계 수단이 아닙니다. 

이상을 보면 알겠지만 국내외적으로 보통 프로그래머로 부르지 않고 과학자 또는 교수로 더 흔히 부릅니다.


저희 학과 교수님들도 프로그래밍과는 거리가 먼, 수학 전공자이신 분들도 있었습니다.

한글 문서로 손코딩하시던게 생각나네요. 알고리즘 쪽은 완전 전문가이시겠죠.



-보안 개발자

해킹 및 정보보안 관련 기술들을 다루는 프로그래머를 의미하며, 이를 위해서는 많은 기반 지식이 필요합니다. 

필요하면 서버 등의 플랫폼의 보안성 향상을 위해 툴을 준비하거나 서버 프로그래밍 자체를 튜닝하고 감시할 체제를 준비해야 하기 때문에 보통 고급 개발자입니다. 

업무에 비해 책임이 막대하며 특히 보안사고가 터지면 모든 책임을 뒤집어쓰는 직종이기 때문에 IT업계에서도 대우가(급여가 아닌) 상당히 좋지 못합니다.

OS, 네트워크(TCP/IP)에 대해 매우 심도깊은 이해가 필요하고 C언어를 매우 잘 다룰 줄 알아야 합니다. 최소한 한 종류 이상의 어셈블리어를 다룰 수 있어야 합니다. 

현대 암호학에 대해서는 개념 정도는 알고 있어야 하며(암호 알고리즘을 만들 줄 알아야 하는 건 아닙니다.) 높은 수준의 리버스 엔지니어링실력도 요구됩니다.

이상이 정상적인 보안 개발자의 얘기고, 좀 비정상적인 보안 개발자는 운영 중인 시스템을 지속적으로 모니터링하다가 보안침해 의심사고 발생시 신속하게 조치해서 차단하고 이미 입은 피해를 파악해 복구하는 일을 합니다. 

왜 비정상적이라고 하냐면 이런 직업은 원래 개발자가 아니라 '오퍼레이터'라고 부르기 때문입니다. 

국내에 이런 오퍼레이터 전문 육성 코스가 없어서 다들 프로그래밍을 하다가 이쪽으로 넘어오는데 전공 지식을 거의 활용할 수 없어서 기초부터 새로 배워야 하는 경우가 부지기수입니다. 

오퍼레이터는 프로그래머의 하위 분류가 아니라 이웃 분류입니다. 

동등한 전문성을 갖추고 있는 반면 그 전문 영역이 별로 겹치지 않습니다. 오퍼레이터가 전사라면 프로그래머는 대장장이. 칼을 들고 싸우는 직업이냐 칼을 만드는 직업이냐의 차이라고 하네요.


프로젝트에 들어 가보면 한 명씩 있으십니다. 일반 웹개발자들보단 단가가 쎄보이는데, 웹개발자들도 마찬가지지만 야근이나 주말 출근도 자주 하시는거 같습니다.



-빅데이터 분석가

빅데이터를 분석하고 해석합니다. 통계학과 컴퓨터공학을 둘 다 전공한 융합형 프로그래머에 속합니다. 

상당히 높은 수준의 수학 능력이 요구되는 반면 프로그래밍 실력은 그리 크게 요구하지 않습니다. 

사용하는 도구도 통계와 수치연산에 특화된 R이나 Python(NumPy)을 더 선호하고 데이터베이스에 대한 지식도 어느 정도 필요합니다.

전공 석사급 이상의 학력이 있으신 분들이 하시는걸로 알고 있습니다. 국내에서는 다룰 줄 아시는분도 별로 없고 다른 전문 프로그래머들도 그렇지만, 제법 단가를 많이 받는다고 들었습니다.



-소프트웨어 아키텍트(SA)

마이크로소프트의 정의에 따르면, 전략, 조직 역학, 프로세스, 커뮤니케이션, 리더십 등 관리능력과 엔지니어링에 대한 깊은 이해를 갖춘 개발 지휘자를 아키텍트라 부릅니다.

엄밀히 말하면 프로그래머가 아니라 기획자입니다. 조직 관리 능력, 리스크 관리 능력 같이 프로그래밍 능력과는 전혀 관계없는 분야의 지식을 요구합니다. 

건축 쪽의 아키텍트와 마찬가지로 현장(프로그래밍)을 모르는 채로 될 수 있는 직업은 아니지만 현장 지식만 잔뜩 쌓는다고 될 수 있는 직업도 아닙니다. 게다가 전문 교육을 이수하는 것만으로는 될 수 없고 경험이 아주 중요한 직종으로써 프로그래머판 도선사와 비슷하다고 합니다.



-게임 개발자

게임 개발자에는 게임 프로그래머만 있는게 아닙니다.

기획, 디자인, 사운드 등의 다양한 파트가 있으며 그중에, 게임 프로그래머가 있습니다.

게임 프로그래머는 프로그래밍을 통해 맵 디자인, 캐릭터 디자인, 사운드, 각종 시스템 등을 뒤섞어, 게임이라는 하나의 결과물을 만드는 직군입니다. 

게임을 만들때 필요한 핵심 인력중 하나입니. 사실상 게임을 만드는 데 있어 가장 귀중한 인력이라고 봐도 과언이 아닙니다. 엔딩크레디트에서는 보통 프로듀서-디렉터-프로그래머-아트-사운드-그 외 순서로 나옵니다.

게임을 만드는건, 게임을 하는것과 차이가 큽니다. 밥을 먹는거랑 밥을 만드는 것만큼의 차이랄까요.


게임 프로그래머를 세부적으로 나누면

게임플레이 프로그래머 (Gameplay Programmer)

물리 엔진 프로그래머 (Physics Programmer)

그래픽 / 렌더링 프로그래머 (Graphics / Rendering Programmer)

개발 도구 프로그래머 (Tools Programmer)

네트워크 프로그래머 (Network Programmer)

정도 되겠군요.


데이터베이스 관리자의 경우 프로그래머가 같이 도맡아 할 수도 있긴 하지만 대부분 데이터베이스 관리자를 따로 둡니다. 게임 개발자 직종으로써의 인식은 별로 없지만 굉장히 중요한 직종입니다. 특히 온라인 게임의 경우 그 중요도가 다릅니다. 새벽에도 전화오면 불려와서 처리 한다더군요.



-웹 개발자

웹 개발은 웹 상에서 사용되는 소프트웨어 개발과 웹페이지를 제작하는 분야입니다. 

웹 프로그래머는 이를 제작하는 개발자를 의미합니다.

현재 웹의 범위가 엄청나게 넓어져서, 수요도 많고, 공급도 많은 직종입니다.

'웹땔감' 등으로 비하하거나, 2000년대 제로보드랑 나모웹에디터로 홈페이지 만들듯이 아무나 할수 있다고 생각될수 도 있을거 같은데, 이 분야도 들어가면 끝을 모를 정도로 깊네요. 그 유명한 페이스북이나 아마존도 다 웹입니다.


웹 프로그래머는 크게 두 종류로 나누는데, 백 엔드(Back-end) 개발자와 프론트 엔드(Front-end) 개발자로 구분합니다. 백 엔드와 프론트 엔드 구분은 기업, 조직마다 나누는 경우도 있고 아닌 경우도 있으나 대체적으로 안정적으로 프로젝트를 운영하는 집단은 두 가지를 구분합니다.


1)프론트 엔드(Front-end) 개발자

사용자에게 보여지는 화면을 개발, 주로 HTML, CSS를 활용하여 웹 디자인을 웹 페이지로 구현하는 개발자입니다. 

디자인 시안을 그대로 구현하는 작업이라는 특징 때문에 조직에 따라 프론트 엔드 작업을 웹 디자이너에게 업무를 맡기는 경우도 있습니다. 

최근 핵심 사항으로는 HTML4에서 HTML5로의 변화에 따라 반응형 웹이 유행하고 있으며 여러 버전의 브라우저에서 모두 호환될 수 있는 웹 표준을 중시하는 문화가 퍼진 상태입니다.

해외에서는 퍼블리셔라는 표현 보다는 프론트 엔드라고 쓰는거 같더군요. 두 부분이 어느정도 겹치는 업무가 있긴한데 한국에서 쓰는 퍼블리셔 개념은 아닌거 같습니다.


2)백 엔드(Back-end) 개발자

웹 상에서 사용되는 소프트웨어나 웹 페이지가 기능적으로 동작하도록 구현하는 개발자입니다. 여기서 기능이란 해당 소프트웨어가 가진 목적 구현을 위한 모든 환경을 의미합니다. 

즉, 클라이언트의 기능 뿐만 아니라 서버 개발도 해당됩니다. 

예를 들어 웹 페이지로 계산기를 만든다고 했을 때, 계산기 인터페이스는 프론트 엔드의 영역이지만, UI 뒤에 숨겨져 있는 계산기 알고리즘과 원리는 백 엔드의 영역이라고 생각하면 됩니다. 

주로 HTML, CSS, Javascript, jQuery 등 UI 영역뿐만 아니라 Java, JSP, PHP, Spring framework, 디자인 패턴 지식 등 다양한 기술이 요구됩니다.


3)풀 스택(Full-stack) 개발자

위의 프론트엔드와 백엔드를 모두 다룰 수 있는 개발자입니다. 의외로 그리 드물지 않습니다. 

프론트엔드나 백엔드나 사용하는 기술이 거의 비슷하고 서로 겹치는 게 많기 때문입니다. 

하지만 실상을 놓고 보면 자신을 풀 스택 개발자라고 소개하는 사람은 아직 본인의 전문 분야가 확립되지 않은 쉽게 말해 '신참' 개발자일 확률이 높습니다. 

그렇지 않다면 홈페이지 제작 프리랜서로 활동한 경력이 긴 일인기업 대표일수도 있습니다. 만약 후자라면 최소 3인분 이상을 해내는 슈퍼맨이라고 합니다.


-모바일 개발자

스마트폰 애플리케이션을 개발하는 사람입니다. 

2017년 7월 기준 가장 많이 사용되는 안드로이드, iOS 두 가지 모바일 운영체제의 소프트웨어를 개발하는 사람이라고 보면 됩니다. 

두 가지 OS를 모두 개발하는 사람도 있으나 조직의 규모나 개인의 역량에 따라 안드로이드 개발자, iOS 개발자로 구분하는 경우도 있습니다.


1)안드로이드 APP 개발

안드로이드는 Java를 기반으로 두고있는 언어이기 때문에 Java에 대한 지식이 필요하며 안드로이드 스튜디오 3.0부터 표준 언어로 채택하고 있는 Kotlin 또한 학습해야 합니다. 

안드로이드는 Eclipse로 개발이 가능했다가, 구글의 정책으로 안드로이드 스튜디오에서만 개발이 가능하도록 변경됐습니다. 저는 학부생 때 안드로이드 어플 제작 프로젝트로 이클립스에서 SDK 설치해서 만들었는데, 안드로이드 스튜디오를 쓰니 더 편해진거 같네요.


2)iOS APP 개발

iOS는 MacOS의 언어와 동일하게 Objective-C와 Swift에 대한 지식이 필요합니다. 

두 가지 언어의 컴파일러로는 대부분 MacOS의 Xcode를 사용하며 이는 MacOS에서 앱스토어를 들어가면 설치할 수 있습니다.


3)하이브리드 APP 개발

하이브리드라는 이름에서 생각할 수 있듯, 안드로이드와 iOS를 모두 호환 가능한 애플리케이션을 개발하는 것입니다. HTML5로의 발전, CSS3의 발전 등을 통해 제약이 많던 이전 웹 언어들과 달리 현재는 다양한 애니메이션과 기능이 추가되었고, 이를 활용해 OS의 제약 없이 개발하는 것입니다. 

그러나 안드로이드, iOS 언어에 비해 출력이 매끄럽지 않아서 대다수 스마트폰 앱으로 먹고사는 벤처기업은 하이브리드 앱을 개발하지 않고 네이티브 언어를 채택합니다. 

스마트폰 앱이 주력사업이 아닌 여러 대기업들의 경우엔 개발 비용을 줄이고자 하이브리드 APP을 많이 채택합니다. 오픈 소스로 Sencha등을 활용하는 편입니다.

뭔가 대단한게 아니라, app은 그냥 책갈피 정도나 받아오는 값을 보여주는 정도의 역활만 하고 나머지는 웹에서 다 처리하는 방식입니다. 모바일 웹이랑 네이티브 앱의 중간 정도 되는 역활이네요. 계속해서 주기적으로 업데이트 받아오는 쇼핑몰 같은게 아니면 그냥 네이티브로 작업하는게 좋을거 같습니다.


사실 임베디드 시스템 프로그래밍과 큰 상관은 없어 보입니다만,, 둠의 경우 호환성이 좋아서. 위와 같은 카메라나, 전화기 플레이 할 수 있다고 하더군요.


-임베디드 시스템

넓은 범주에서 정의하자면, 일반적인 목적으로 만들어진 컴퓨터가 아닌, 특수한 목적을 가지고 만들어진 프로그래밍 가능한 모든 컴퓨터를 의미합니다. 

PC는 임베디드 시스템을 구축하는 데 사용되긴 하지만, 그 외에도 수많은 용도로 사용될 수 있으므로 그 자체로 임베디드 시스템은 아닙니다. 하지만 컴퓨터와는 달리 어떤 특수한 목적만을 수행하기 위해 만들어진상 컴퓨터들

(전화기, 냉장고, 텔레비전, FAX 등)은 각자의 기능을 수행하기 위한 MCU를 가지고 있으며, 이것들은 특수한 목적을 수행하기 위한 컴퓨터이므로 임베디드 시스템이라고 할 수 있습니다. 

아두이노나 라즈베리파이 같은 임베디드 보드들 이름은 들어봤는데, 이것과 관련되어 있는지는 한번 찾아봐야겠네요.


학부생때는 임데디드 강의 시간에 요상한 키트에 리눅스 우분투에서 연결한 다음 프로그래밍한 것을 돌려보곤 했었는데 웹개발자를 하다 보니 쓸 일이 없네요.


-전산 정보 시스템

SI(시스템 구축)

SM(시스템 유지보수)

ERP

해당 항목들만 따로 포스팅해도 될만큼 이야기가 많기에 따로 포스팅하겠습니다.

국비지원 JAVA 학원에서 웹개발을 3개월 공부한뒤, 주로 가게 되는 분야입니다. 한 몇년 SI에서 굴렀던 적이 있는데, 왜그렇게 사람들이 꺼려하는지 알겠더군요.


-융합형

다른 전문분야의 인물이 자신의 지식을 활용하여 프로그래밍을 하는 경우도 존재합니다. 

의사가 직접 의료 프로그램을 통계화, 수치화한다든가, 국과수 직원이 치아 감별을 통한 개인 식별을 위한 프로그래밍을 한다든가, 이과 대학 교수가 모델링-시뮬레이션 툴을 만든다던가 하는 경우가 이에 속합니다.

이들에게 요구되는 능력은 프로그래밍 능력이 아니라 자기 분야의 전문성입니다. 

전문성과 달리 프로그래밍은 극도로 완벽하고, 정교하고, 간결한 수준으로 잘 할 필요는 없습니다. 

혹시 다소 불필요한 부분이 코드에 덕지덕지 붙어있다거나, 코딩하는 시간이 다소 오래 걸리거나 해도 크게 문제되지는 않습니다. 

이들에게 최우선으로 요구되는 사항은 전문성이고, 프로그래밍 능력은 그 다음이기 때문입니다. 

어차피 프로그램을 잘 짜서 성공하게 된다면, 그 다음부터는 프로그램 설계가 아닌 단순 코딩 정도는 양산형 프로그래머에게 맡겨도 됩니다.


-코더

좀 논란이 되는 구분인데, 보통 알고리즘을 사용할줄 알면 프로그래머, 복붇만 할수 있음 코더라고 한다고 합니다.

자기가 하면 프로그래머이고 남이 하면 코더로 보일수도 있죠.

나중에 따로 정리를 해보겠습니다.



출처 : 나무위키, 본인생각

Posted by Joseph514