"당신이 무엇을 먹었는지 말해 달라. 그러면 당신이 어떤 사람인지 알려주겠다." - 브리야 사바랭 -
1825년 사바랭(Jean Anthelme Brillat_Savarin)이 미식예찬에서 쓴 유명한 문장입니다. 영어로 "You are what you eat"으로 번역되었고, 우리말로는 '당신이 먹는 것이 곧 당신이다'로 쓰이고 있습니다. 이 말은 밍이 되어 다양하게 패러디되어 사용되고 있습니다. '당신이 타는 차가 당신을 말해 준다', '당신이 구매하는 것이 곧 당신이다' 등 다양하게 변주되어 사용되고 있습니다. 그런데 사실 브리야사바랭이 했던 말을 정확히 하자면 “당신이 무엇을 먹었는지 말해 달라, 그러면 당신이 어떤 사람인지 알려주겠다”였습니다. 곧, 신분에 따라먹는 음식의 종류가 달랐던 시대에 이 사실을 지적한 것이라고 합니다. 뭐가 됐든 재밌는 문장입니다. 그래서 저도 변주를 해보았습니다.
"당신이 어떤 코딩을 배웠는지 말해 달라. 그러면 당신이 어떤 개발자인지 알려주겠다." - 고코더 -
당신이 공부한 재료에 따라 어떤 개발자가 될 것인지 묻는 문장으로 다시 표현해 보았습니다. 마치 영어를 배우면 영어 통역가가 되고 프랑스어를 배우면 프랑스 통역가가 되는 것처럼 프로그래머도 언어에 따라갈 수 있는 길이 달라집니다. 그래서 개발자를 만났을 때 저는 항상 이렇게 묻습니다 "당신은 어떤 언어로 코딩을 하시나요?" 그러면 그 사람이 어떤 개발자인지 알 수 있기 때문입니다. 만약 '언리얼 엔진'을 한다고 하면 게임개발자라고 판단되고, '자바'를 한다고 하면 웹이나 응용 개발자라고 예측할 수 있기 때문입니다. 이렇듯 먹는 거만큼 개발자는 어떤 언어를 배우고 배웠는지가 중요합니다. 그에 따라 직군이 달라지기 때문입니다.
19가지 개발직군
소프트웨어 개발은 끊임없이 변화되고 있습니다. 소프트웨어 산업의 끊임없는 혁신으로 인해 새로운 기술들이 혜성처럼 등장합니다. 그러다 보니 개발자의 직무를 묘사하는 '프런트엔드 개발자', '백엔드 개발자'와 같은 단어들도 함께 등장하였습니다. 이는 비공식적으로 시작되었지만 지금은 모두가 이해하는 전문용어가 되었습니다. 취업 사이트에 보면 이러한 단어들로 개발자를 구인하고 있습니다. 그렇다면 앞서 비유한 어떤 코딩을 배웠는지 알면 어떤 개발자가 될 수 있는지도 알 수 있습니다. 그래서 '로렌조 파스콸리스'가 정의한 19가지 타입의 개발자를 중심으로 개발직군들을 파헤쳐 보겠습니다.
1. 프런트엔드 개발자
시각적 사용자 인터페이스의 프로그래밍을 전문으로 하는 개발자입니다. 프런트엔드 개발자 코드는 웹 브라우저, 사이트 사용자의 컴퓨터에서 실행됩니다. 이 작업은 매우 높은 수준의 작업입니다. 컴퓨터 과학만큼 인간과 시스템에 디자인 원리에 대한 이해가 필요하기 때문입니다. 프런트엔드 개발은 브라우저 호환성 문제를 다
뤄야 하며 UI의 시각적 표현에 대한 세부 사항을 조정하는 데 사용됩니다. 프런트엔드 개발 기술은 UI(User Interface), UX(User eXperience), CSS, JavaScript, HTML, 및 증가하고 있는 UI 프레임워크 react, vue , angular, svelte 등이 있습니다.
2. 백엔드 개발자(AKA Server-Side Developer)
소프트웨어 또는 시스템의 설계, 구현, 기능적 핵심 로직, 성능 및 확장성을 전문으로 하는 개발자입니다.
백엔드 시스템은 매우 복잡하지만, 사용자에게는 복잡하지 않습니다. 예를 들며, 구글 검색 버튼을 생각해 보면 아주 간단한 UI지만 백엔드는 매우 복잡한 시스템입니다. 백엔드 개발자는 자바, C, C++, 루비, 펄, 파이썬, 스칼라, 고 등과 같은 프로그래밍 언어로 작업합니다. 종종 데이터베이스, 데이터 스토리지 시스템, 캐싱 시스템, 로깅 시스템, 이메일 시스템 등과 같은 광범위한 서비스 역시 작업합니다.
3. 풀 스택 개발자
풀 스택 개발자는 앞서 말한 '프런트엔드', '백엔드'를 모두 사용가능한 개발자입니다. 따라서 완벽하게 작동하는 웹 응용프로그램을 만드는 데 필요한 기술을 보유하고 있습니다.
4. 미들티어 개발자
미들티어 개발자는 브라우저에서 움직이는 non-UI 코드를 작성하고, 서버에서 움직이는 코어와 관계없는 코드를 구현하는 사람입니다. 미들티어 개발자라는 용어는 프런트엔드 또는 백엔드에 특화되어 있지는 않아 풀 스택 개발자는 아니지만 둘 다 할 줄 아는 사람을 칭하는 말입니다. 커리어라기보다는 스킬 셋(skill set)을 말하는 것이기 때문에 소수의 엔지니어들만이 미들티어 개발자라는 타이틀을 가지고 있습니다.
5. 웹 개발자
웹 개발자들은 웹사이트를 만드는 것을 전문으로 하는 소프트웨어 엔지니어들입니다. 이들은 '프런트엔드 개발자', '백엔드 개발자', '미들티어 개발자', '풀스택 개발자'들입니다. 웹 개발은 90년대 말과 2000년대 초에 소프트웨어 엔지니어에 진입하는 일반적인 방법이 되었습니다. 컴퓨터과학의 기초가 없고 프로그래밍 세계에 합류하고 싶은 사람들에게 특히 매력적인 옵션입니다.
6. 데스크톱 개발자
데스크톱 개발자는 데스크톱 운영체제(Mac OS, Windows, Linux 등)에서 운영되는 소프트웨어 애플리케이션을 작업하는 개발자이다. 'Turbo Pascal', 'Turbo C', 'Visual Basic', 'Quick C', 'Visual Studio', 'Delphi' 같은 개발 환경 덕분에 인기가 많습니다. 데스크톱 개발자들은 보통 'Cocoa', 'XAML', 'WinForms', 'Gtk' 등과 같은 GUI Toolkit을 사용합니다.
7. 모바일 개발자
스마트폰이나 태블릿 같은 소비자용 모바일 기기에서 기본적으로 실행되는 애플리케이션의 코드를 작성하는 개발자입니다. 모바일 개발자는 iOS 및 Android와 같은 모바일 운영 체제의 소프트웨어를 작성하는 데 사용되는 개발 환경 및 프레임워크를 사용합니다. 여기에는 'Java', 'Swift', 'Objective-C'가 포함됩니다.
8. 그래픽 개발자
그래픽 개발은 고급 수학, 컴퓨터 과학에 지식이 필요한 레벨이 낮은 개발에 속합니다. 상업적, 오픈 소스 프레임워크와 시스템의 도입으로 비교적 접근하기 쉬워지고 있습니다. 'DirectX', 'OpenGL', 'Unity 3D', 'WebGL'의 프레임워크를 사용되고 있습니다. 더 능력 있는 그래픽 개발자들에게는 low-level 개발은 'C', 'C++', 'Assembly'를 알아야 합니다.
9. 게임개발자
게임을 만드는 데 특화된 개발자를 식별하는 총칭 합니다. 그들을 게임 개발자라고 부르는 것은 인게이지먼트와 상호적인 게임 경험을 디자인하고 실행하는 것에 관해 구체적인 지식과 기술을 가지고 있기 때문입니다.
게임 개발자들이 사용하는 프레임워크는 'DirectX', 'OpenGL', 'Unity 3D', 'WebGL'과 'C', 'C++', '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가 사용하는 기술은 Python, Ruby, 'Selenium' 등이 있습니다.
15. 임베디드 소프트웨어 개발자
임베디드 소프트웨어 개발자는 하드웨어 관련한 개발을 담당합니다. 예를 들어, 마이크로컨트롤러, 리얼타임 시스템, 전자 인터페이스, 셋톱박스, 컨슈머 디바이스, iOT 디바이스, 하드웨어 드라이버, 그리고 시리얼 데이터 트랜스미션 등이 이 카테고리에 속합니다. Embedded Developer은 C, C++, Assembly, Java or proprietary technologies, frameworks, and toolkits 등이 있습니다.
16. 고급언어(High-Level) 개발자
고급언어 개발자라는 HP, Perl, Python, and Ruby와 같이 고급언어를 사용하여 코드를 작성하는 개발자를 칭하는 용어입니다. 웹 개발자들은 보통 High-Level 개발자에 속합니다.
17. 저급언어(Low-Level) 개발자
저급언어 개발자는 용어는 Assembly, C언어와 같이 저급 언어를 사용하여 하드웨어와 거리가 가까운 코드를 작성하는 개발자를 칭합니다. 임베디드 소프트웨어 개발자는 보통 저급언어 개발자에 속합니다.
18. 워드프레스 개발자
워드프레스 개발자를 워드프레스 프레임 워크의 테마와 플러그인을 만들고 커스터마이징 합니다. 또한 워드프레스 사이트를 관리한다. 'WordPress system', 'PHP', 'JavaScript', 'HTML'을 사용합니다.
19. 보안 개발자
보안 개발자는 소프트웨어 시스템의 보안을 테스트하고 보안 결함을 수정하기 위한 시스템, 방법 및 절차를 만드는 데 특화되어 있습니다. 시스템의 취약점을 찾으려고 시스템에 침투하는 개발자를 화이트 해커(white hat hacker)라고 하는 경우도 있습니다. 보안 개발자는 'Python', 'Ruby'와 같은 'scripting languages'를 사용하여 툴을 만들고, 소프트웨어 시스템을 공격하는 패턴에 대해 자세하게 이해하고 있어야 합니다.. 더 능력 있는 보안 개발자가 되려면 'C', 'C++'로 쓰인 운영체제 소스코드를 읽고 이해할 수 있어야 합니다.
당신이 어떤 코딩을 먹었는지 알려달라
당신은 어떤 코딩을 배워왔나요? 그럼 당신이 배운 코딩을 한번 나열해 보세요. 그리고 위에 19가지 개발자 직군에서 필요한 언어가 무엇인지 확인을 합니다. 개발자는 무엇을 먹었는지에 따라 사람이 달라지는 것처럼 어떤 코딩을 배웠냐에 따라 선택할 수 있는 직군이 나눠집니다. 관심 있는 분야가 있다면 먼저 언어 레시피를 확인하고 먹어보는 건 어떨까요?