19가지 유형의 개발자 파헤치기

* 이 글은 Lorenzo Pasqualis의 19 Types of Developers Explained를 번역한 글입니다.

소프트웨어 개발의 지형은 계속 변화한다. 소프트웨어 산업의 끊임없는 혁신 덕분에 새로운 전문화나 기술, 방법론은 몇 달에 한 번씩 꼭 나타난다. 그러다 보니 전문화된 개발자의 직무를 묘사하기 위한 용어는 비공식적인 전문용어가 되었고, 구인 광고와 회사 이름에도 드러난다.

사실 인터넷의 등장 이전에는 전문화라는 것은 존재하지 않았다. World wide web이 소프트웨어 엔지니어의 커리어를 포함해 우리 삶의 대부분을 바꿔놓은 것이다.

업계의 공식적인 용어 사전은 존재하지 않는다. 그렇다 보니 각 유형의 개발자가 가져야 하는 스킬을 이해하는 것은 초심자에게도, 일반 대중에게도 혼란스럽고 어려울 수 있다.

따라서 이 글에서는 일반적으로 알려진

19가지 유형의 개발자에 대해, 그들이 사용하는 기술에 대해, 그리고 그들이 가져야 하는 스킬에 대해

짧게 설명하도록 하겠다. 다만 각 용어의 정의는 직업에 대해 내가 이해하고 있는 바를 반영하고, 따라서 회사와 지역, 산업에 따라 정의가 다양할 수는 있다는 점을 감안해야 할 것이다.

소프트웨어 엔지니어들의 직무 타이틀은 Software Engineering Job Titles Explained를, 엔지니어링 리더십 역할에 대해서는 8 engineering leadership roles explained를 참고하였다.

1. 프론트엔드 개발자(aka 클라이언트 개발자)

프론트엔드 개발자는 미적인 부분과 레이아웃까지 포함하는 UI의 비주얼을 프로그래밍하는 개발자이다. 프론트엔드 개발자의 코드는 웹사이트 사용자의 웹 브라우저에서 움직인다.
프론트엔드 개발은 하위 레벨인 하드웨어와는 전혀 관계가 없는 상위 레벨의 작업이다. 프론트엔드 개발자는 컴퓨터 과학 이론보다 인간과 기계의 상호작용과 디자인 원리에 대한 이해가 필요하기 때문이다. 프론트엔드 개발자는 주로 브라우저 간의 호환 이슈를 해결하고 UI의 시각적인 표현의 디테일을 조정하는 일을 한다.
프론트엔드 개발 기술은 UI(User Interface), UX(User eXperience), CSS, JavaScript, HTML 및 기타 다수의 점차 증가하고 있는 UI 프레임워크들이다.

2. 백엔드 개발자(aka 서버 개발자)

백엔드 개발자는 최종 소비자로부터 멀리 있는 기계에서 운영하는 시스템이나 소프트웨어의 디자인, 실행, 기능적인 코어 로직, 성능, 확장성을 전문적으로 다루는 개발자이다.
백엔드 시스템은 굉장히 복잡해질 수 있지만, 그 복잡함이 사용자에게 보여지지는 않는다. 예를 들자면 구글 검색 엔진의 프론트엔드는 제목, 텍스트 박스, 두 세 개의 버튼을 가진 심플한 UI이다. 하지만 백엔드는 웹을 크롤링하고, 색인을 달고, 점점 증가하는 복잡한 메커니즘 배열에서 찾고자 하는 것을 잘 찾을 수 있도록 만들어야 하는, 엄청나게 복잡한 시스템이다.
백엔드 개발자는 Java, C, C++, Ruby, Perl, Python, Scala, Go 등의 프로그래밍 언어로 작업한다. 백엔드 개발자는 데이터베이스, 데이터 저장 시스템, 캐싱 시스템, 로깅 시스템, 이메일 시스템 등과 같이 방대한 서비스들과 통합할 줄 알아야 한다.

3. 풀 스택 개발자

풀 스택 개발자는 프론트엔드, 백엔드를 모두 하는 개발자이다. 따라서 완전히 작동하는 웹 어플리케이션을 구현하는 스킬을 가지고 있다.

4. 미들티어 개발자

미들티어 개발자는 브라우저에서 움직이는 non-UI 코드를 작성하고, 서버에서 움직이는 코어와 관계없는 코드를 구현하는 사람이다. 보통 미들티어는 시스템의 ‘배관’을 담당한다.
미들티어 개발자라는 용어는 프론트엔드 또는 백엔드에 특화되어 있지는 않아 풀 스택 개발자는 아니지만 둘 다 조금씩 할 줄 아는 사람을 칭하는 말이다. 커리어라기보다는 스킬 셋(skill set)을 말하는 것이기 때문에 소수의 엔지니어들만이 미들티어 개발자라는 타이틀을 가지고 있다.

5. 웹 개발자

웹 개발자는 웹사이트를 구현하는 데 특화된 소프트웨어 엔지니어이다. 웹 개발자는 프론트엔드 개발자이거나, 백엔드 개발자이거나, 미들티어 개발자이거나, 풀스택 개발자이다.
웹 개발은 90년대 후반과 2000년대 초반에 소프트웨어 엔지니어의 세계에 진입하는 굉장히 흔한 방법이었다. HTML/CSS의 기초 지식을 요구하기 때문에 관문이 낮기 때문이다. 초보 웹 개발자는 몇 개월 경험만으로도 생산 시스템으로 보내는 코드를 만들어 낼 수 있다. CS(컴퓨터 과학) 기반이 없는데 프로그래밍 세계에 진입하고 싶은 사람들에게는 매력적인 선택지이다.

6. 데스크톱 개발자

데스크톱 개발자는 데스크톱 운영체제(Mac OS, Windows, Linux 등)에서 운영되는 소프트웨어 어플리케이션을 작업하는 개발자이다.
80년대에는 흔한 개발자 유형 중에 하나였다. Turbo Pascal, Turbo C, Visual Basic, Quick C, Visual Studio, Delphi와 같이 저렴한 개발 환경 덕분에 인기가 많았다.
데스크톱 개발자들은 보통 Cocoa, XAML, WinForms, Gtk 등과 같은 GUI Toolkit을 사용한다.

7. 모바일 개발자

모바일 개발자는 스마트폰과 태블릿 같은 모바일 기기에서 운영되는 어플리케이션의 코드를 짜는 개발자이다. 모바일 개발은 2000년대 초와 스마트폰 시장의 급성장 이전에는 거의 듣도 보도 못한 영역이었다. 그 전에는 모바일 개발은 임베디드 개발 영역의 일부분으로 여겨지곤 했다.
모바일 개발은 iOS와 안드로이드같은 모바일 운영 체제, 그리고 그 운영 체제에 쓰는 소프트웨어의 개발 환경과 프레임워크의 복잡성을 이해한다. Java, Swift, Objective-C를 사용한다.

8. 그래픽 개발자

그래픽 개발자는 rendering, lighting, shadowing, shading, culling, management of scenes를 하는 소프트웨어에 전문인 개발자이다. 그들은 게임과 비디오 프로덕션 산업의 기술을 통합하는 책임이 있다.
그래픽 개발은 고급 수학, 컴퓨터 과학에 지식이 필요한 레벨이 낮은 개발에 속한다. 상업적, 오픈 소스 프레임워크와 시스템의 도입으로 비교적 접근하기 쉬워지고 있다. 예를 들어, 정말 적은 수의 사람들이 처음부터 shader를 쓸 줄 알아야 하게 되었다.
DirectX, OpenGL, Unity 3D, WebGL의 프레임워크를 사용한다. 더 능력있는 그래픽 개발자들에게는 low-level 개발은 C, C++, Assembly를 알아야 한다.

9. 게임 개발자

게임 개발자라는 용어는 게임을 구현하는 데에 전문인 개발자를 가리키는 포괄적인 용어이다. 게임 개발자들은 다른 카테고리에 속할 수도 있지만, 그들을 게임 개발자라고 부르는 것은 인게이지먼트와 상호적인 게임 경험을 디자인하고 실행하는 것에 관해 구체적인 지식과 기술을 가지고 있기 때문이다.
게임 개발자들은 DirectX, OpenGL, Unity 3D, WebGL과 같은 프레임워크를 사용하고, C, C++, Java 등의 프로그래밍 언어를 사용한다. 예전에는 Adobe Flash가 웹 게임의 표준 플랫폼이었지만, Flash가 버림받고 나서는 JavaScript와 HTML5가 새로운 표준이 되었다. 모바일 기기에서는 Swift와 Java를 활용한다.

10. 데이터 사이언티스트

데이터 사이언티스트는 데이터를 분석하는 소프트웨어 프로그램을 구현한다. 그들은 통계 분석, 머신 러닝, 데이터 시각화, 예측 모델링을 책임진다.
데이터 사이언티스트들은 SQL, R, Python 등을 사용한다.

11. 빅 데이터 개발자

빅 데이터 개발자는 데이터 웨어하우스, ETL(Extract Transform Load) 시스템, 관계형 데이터베이스, 데이터 레이크 관리 시스템 등의 시스템에 있는 방대한 양의 데이터를 저장하고 추출하는 소프트웨어 프로그램을 구현한다.
빅 데이터 개발자는 MapReduce, Hadoop, Spark와 같이 방대한 양의 정보를 배포, 저장, 처리하는 프레임워크와 시스템과 SQL, Java, Python, R과 같은 언어에 능숙하다.

12. 데브옵스(DevOps) 개발자

데브옵스 개발자는 시스템을 개발할 때 백엔드 소프트웨어와 분산 시스템(distributed systems)을 설계하고, 배포하고(deploy), 통합하고(integrate), 관리하는 기술에 능숙한 개발자이다.
데브옵스 개발자가 사용하는 기술은 Kubernetes, Docker, Apache Mesos, the HashiCorp stack(Terraform, Vagrant, Packer, Vault, Consul, Nomad), Jenkins 등이 있다.

13. CRM 개발자

CRM 개발자는 사용자와 소비자의 데이터를 모으는 시스템의 분야에 전문화된 개발자이다. CRM 개발자들은 고객 지원, 회계, 세일즈 쪽이 사용하는 툴을 향상시켜서 궁극적으로는 소비자 만족도와 매출을 향상시키는 업무를 한다.
CRM 개발자가 사용하는 기술은 SAP, Salesforce, Sharepoint, ERP(Enterprise Resource Planning)등이 있다.

14. 소프트웨어 테스트 엔지니어 (SDET)

SDET는 소프트웨어 시스템의 퀄리티를 평가하는 소프트웨어를 짜는 개발자이다. SDET는 제품과 프로세스가 기대한 대로 운영되도록 자동화된 테스트, 툴, 시스템을 만든다.
SDET가 사용하는 기술은 Python, Ruby, Selenium이 있다.

15. 임베디드 소프트웨어 개발자

임베디드 소프트웨어 개발자는 흔히 컴퓨터로 분류되지 않는 하드웨어 관련 일을 하게 된다. 예를 들어, 마이크로컨트롤러, 리얼타임 시스템, 전자 인터페이스, 셋톱박스, 컨슈머 디바이스, iOT 디바이스, 하드웨어 드라이버, 그리고 시리얼 데이터 트랜스미션 등이 이 카테고리에 속한다
Embedded Developer은 C, C++, Assembly, Java or proprietary technologies, frameworks, and toolkits로 작업한다.

16. High-Level 개발자

High-Level 개발자라는 용어는 PHP, Perl, Python, and Ruby와 같이 high-level scripting 언어를 사용하여 하드웨어와 거리가 매우 먼 코드를 작성하는 개발자를 칭하는 용어이다. 항상 그런 것은 아니지만, 웹 개발자들은 보통 High-Level 개발자에 속한다.

17. Low-Level 개발자

Low-Level 개발자라는 용어는 Assembly, C언어와 같이 low-level 언어를 사용하여 하드웨어와 거리가 가까운 코드를 작성하는 개발자를 칭하는 용어이다. 역시나 항상 그런 것은 아니지만, 임베디드 소프트웨어 개발자는 보통 Low-Level 개발자에 속한다.

18. 워드프레스 개발자

내가 워드프레스 개발자를 이 리스트에 포함한 것은 전문적으로 하는 웹 개발자들이 있기 때문이다. 워드프레스 개발자들은 워드프레스를 위한 테마와 플러그인을 만들고 커스터마이징하고, 워드프레스 사이트를 관리한다.
워드프레스 개발자는 WordPress system, PHP, JavaScript, HTML을 사용한다.

19. 보안 개발자

보안 개발자는 소프트웨어 시스템의 안전성을 테스트하고 안전 결함을 익스플로잇하고 고치는 시스템, methods, 절차를 만드는 개발자이다. Security Developer은 취약점을 찾으려고 시스템에 침투하는 선량한 해커(white hat hacker)인 경우가 많다.
보안 개발자는 Python, Ruby와 같은 scripting languages를 사용하여 툴을 만들고, 소프트웨어 시스템을 공격하는 패턴에 대해 자세하게 이해하고 있어야 한다. 더 능력있는 보안 개발자가 되려면 C, C++로 쓰여진 운영체제 소스코드를 읽고 이해할 수 있어야 한다. 또한 취약점을 찾고 익스플로잇하기 위해서는 엔지니어 라이브러리와 상업적인 소프트웨어 시스템을 뒤집을 수 있어야 한다.

결론

소프트웨어 개발자가 커리어로 택할 수 있는 길은 이렇게나 많다. 당신이 컴퓨터 과학 교육으로 공식적으로 시작을 하든, 개인 프로젝트로 웹 개발을 시작하든, 아이폰 게임을 만들어서 돈을 벌려고 하는 것이든 간에, 모든 가능성은 열려있다.
당신이 한 번 길을 택한 뒤에도 당신의 스킬과 지식이 향상되면서 커리어를 바꿀 수 있다. 전체 커리어에서 하나의 길만 계속 걷더라도, 배울 것은 차고 넘친다. 지루해질 틈이 없이 기술은 너무나 빠르게 발전하니까!

개발자로 커리어 전환을 하고 싶으신가요?

체계적인 커리큘럼의 부트캠프 코드스테이츠에서 시작하세요! http://bit.ly/2Q6pcUR

--

--