개발 분야별 특징

임베디드, 모바일, 백엔드, 풀스택 다 해본 개발자가 말해주는 개발 분야별 느낀 점.

Doohyeon Kim
Doohyeon.kim
10 min readJun 16, 2024

--

오랜만에 글을 쓴다. 편한 마음으로 작성할 만한 주제가 뭐가 있을까 고민하다가 올해 백엔드 개발자로 커리어가 바뀌면서, 그동안 해본 개발과 어떤 차이가 있었는지 느낀점을 자유롭게 적어보려 한다.

개발자로서 커리어가 고민이거나, 다른 개발자들은 어떤 고충이 있나 궁금한 사람들에게 도움이 되었으면 한다.

커리어 소개

한국에서 임베디드시스템공학을 전공하고, 독일 회사에서 자동차 네트워크 쪽 일을 하다가 프랑스 회사에서 ADAS 엔지니어로 일했다.

그 뒤로 스타트업으로 옮겨서 자율주행 자동차의 Localization과 네트워크 분야 엔지니어로 일했다. 이 때까지는 임베디드 시스템 개발자로서 C와 C++을 했다.

그 후에 자동차 업계를 나와서 IT 서비스 스타트업을 돌아다니며 Flutter로 모바일 개발을 하다가, 개발 팀장을 하면서 NestJs, AWS로 서버와 인프라까지 개발하는 풀스택 개발자가 되었다.

현재는 프롭테크 분야에서 백엔드 개발자로 일하고 있다.

임베디드

실력, 지능, 노력 대비 처우가 박하다.

사실 임베디드는 예전에는 컴퓨터공학이나 전자공학을 전공하고 석사 과정 때 깊게 들어가는 분야였다.

SW만 알아야하는 게 아니라 HW도 알아야하며, 로우레벨에서 놀아야 하다보니 도구의 지원이 제한적이다.

문제가 생기면 SW만 봐야하는 게 아니라 HW도 봐야 한다. 온갖 부품들의 데이터시트와 회로도를 볼 줄 알아야 한다. OSI 7 Layer를 골고루 쓰고, 극도로 작은 OS를 사용하거나 OS 없는 환경에서 개발하기 때문에 CS 지식이라고 불리우는 컴퓨터공학 지식이 매우 탄탄해야 한다.

크로스컴파일을 하든, Output 파일을 말아넣든 뭘하든 PC에서 쉽게 실행시키고 테스트 할 수 있는 환경이 아니다 보니 테스트에 시간이 오래걸린다. 그래서 코드를 짤 때 한 번에 꼼꼼하게 잘 짜야한다.

경력을 쌓고 싶다고 쌓을 수도 없다. 경험할 수 있는 기회조차 갖기 힘들기 때문이다. 왜냐하면 현업에서 사용하는 장비들은 수 천만원에서 수 억씩 하는데, 거기에 개발을 해보려면 그 회사를 들어가는 게 아닌 이상 할 수가 없다.

그래서 임베디드 개발자들은 정말 희귀하다. 그런데 왜 처우가 박할까?

임베디드는 HW를 제어하는 SW기 때문에, 대부분 제조업 회사에서 필요로 한다. 그런데 한국의 제조업이 인건비가 저렴하고 전세계의 공장이 모여있는 중국에 많이 빼앗겼다.

그러다보니 삼성전자나 LG전자를 제외하고는 열악한 환경의 중소기업 밖에 남지 않았다. 그나마 있는 대기업들도 직접 개발보다는 협력업체를 통해 납품 받는 게 많아서 더욱 더 자리가 없어졌다.

그래서 진입장벽과 개발자들의 수준과 상관 없이 처우가 박하다.

하지만 요즘 미국에서도 자국 내 공장을 지으려고 하는 등 전세계적으로 제조업이 다시 부흥하고 있기 때문에 미래는 또 어떻게 될지 모르겠다.

내가 임베디드 하면서 가장 끔찍했던 경험은 x86기반으로 만들어진 자율주행 프로그램을 ARM 코어에 포팅해야하는 경우가 있었다.

apt-get 명령어 같은 것도 없는, 서버용 리눅스보다 작은 자동차용 리눅스(AGL)에 16만줄이 넘어가는 코드를 포팅하는데 4개월 걸렸다.

개발하면서 머리가 뜨거워지거나 두통이 오는 경우는 자주 있는데, 모니터를 보고 토할 것 같은 기분을 느낀 적은 이 때가 처음이자 마지막이었다.

모바일 (Flutter)

Flutter로 웹 개발도하고 모바일 개발도 했기 때문에 클라이언트 사이드 개발자라고 적어야되나 고민했는데, 주로 모바일을 했으니 모바일로 적었다.

가장 재미있는 분야 같다.

화면(UI)이 바로바로 나오기 때문에 개발하면서 성취감을 느끼기도 쉽고 재밌다.

개발하면서 사용자가 인터랙션 하는 모습을 상상하며 인체공학적인 디자인이나 개발을 하는 것도 재밌다.

기술적으로 파볼만한 것들도 꽤 있어서 재밌다.

파일 시스템 보안, 메모리 최적화, 이미지 최적화 등 나름 깊게 파려면 팔 수 있는 부분들이 있다. 그리고 스마트폰 위에서 돌아가는 SW를 만들어야 하기 때문에 내가 배포하려는 OS의 특징도 알아야하고, 라이다나 카메라, GPS 등 각종 센서들을 제어해 볼 수도 있다.

단점은 플랫폼에 종속되는 것이다. 애플이나 구글이 정책을 변경하면 그게 좋든 싫든 무조건 따라가야한다.

백엔드

기술적으로 가장 깊게 들어갈 수 있다. 파기 시작하면 한도 끝도 없이 팔 수 있다.

그래서 개발자간 실력 차이, 연봉 차이가 가장 심한 분야인 것 같다. 학원 3개월 다니고 온 사람도 있고 경력 20년에 슈퍼 개발자인 사람도 있으니…

장점은 엔지니어 원 툴로도 상방이 굉장히 높다는 점이다. 그럴 수 밖에 없는 게, 비용을 직접적으로 줄일 수 있는 분야기 때문이다. 뛰어난 개발자 한 명이 알고리즘 최적화나 인프라 개선을 통해 정말 많은 비용을 절감 시켜줄 수 있다.

가장 큰 단점은 치명적인 오류가 나면 언제 어디서든 대응 해야한다는 것이다.

한국 한정 백엔드의 단점은 자바/스프링을 많이 쓰는데, 이게 단점이 될 수 있다. 많이 쓰는 거 자체는 단점이 아니다. 질 떨어지는 정보가 많다는 게 단점이다.

양질의 정보가 매우 부족하다. 정보의 양은 많은데 그 중 90%는 쓸모 없는 정보다.

자바, 스프링 관련해서 리서치를 해보면 95%는 취업을 목적으로 운영하는 수준 낮은 기술 블로그가 나온다.

그리고 마치 약속이라도 한 듯이 복사 붙여넣기해서 모두 내용이 똑같다. 파생되는 내용이나 깊이 있는 내용을 다루지 않고, 원리에 대한 내용도 없다.

내용이 성의 없기만 하면 모르겠는데 잘못된 정보를 마치 진짜처럼 퍼뜨리는 경우도 정말 많다.

그리고 현업에서는 JDK 21에 Spring Boot 3.2 이상을 사용하는데, 정보가 다 java8, java11, 스프링부트 2.x다 보니 호환 되는 내용이 거의 없다.

JAVA 자체에 문제보다도 JAVA를 사용하는 사람들이 업데이트를 안하고 옛날 기술을 사용 한다는 게 큰 문제다.

그래서 그냥 공식 문서보고 부족한 내용은 테스트해보면서 직접 적용해야 한다.

다행인 점은 요즘은 AI가 발달하면서 정보를 찾아주는데 도움을 준다. 하지만 AI도 존재하는 정보만 주거나 학습된 정보만 주기 때문에 한계가 있다. 최신 기술을 사용하면 정보가 없어서 알려줄 수가 없다.

그리고 솔직히 말하면 java가 올드한 언어는 맞다. 출시 당시에는 혁신적이고 좋은 언어였을지 모르겠지만, 시간이 지나면서 아무리 개선이 되었다고 한들 최신 언어들에 비하면 부족한 점이 많다.

언어에서 지원하는 게 부족하다보니, 각종 패키지를 필수적으로 사용해야 한다. 근데 그마저도 부족할 때가 있다.

예를 들어, 클래스를 immutable하게 관리하고자 할 때 named parameter도 지원 안해서 lombok으로 Builder 덕지덕지 붙여야 하는 것도 불편하고…

타입도 원시 타입과 wrapper class로 나눠서, 사용하는 패키지에서 요구하는대로 박싱/언박싱을 해줘야한다.

null safety 관련해서도 요즘 나오는 언어들에 비해서 부족한 부분이 많다.

가장 최신 LTS인 java21을 사용하고 있지만, 그럼에도 불구하고 언어에서 지원하지 않아서 클래스로 만들어서 처리해야 되는 게 상당히 많았다.

기존 생태계와의 호환성이나 안전성의 이유가 아니라면… kotlin 대신 java를 써야될 이유가 있을까?

풀스택

풀스택을 해본 적이 없거나, 어중간하게 해본 사람들이 꼭 ‘믿고 거르는 풀스택’이라고 한다. 시대는 발전하고, 개발 기술도 발전하고 있다. 개인이 할 수 있는 일이 점점 더 많아지고 있다.

특히 AI가 발전함에따라 개발 쪽도 생산성이 미친듯이 높아지고 있다. 그러다보니 풀스택도 충분히 의미가 있다.

‘서비스 개발' 수준에서 각 분야별로 깊게 들어갈 수 있는 수준이 얼마나 될까?

모바일로 예를 들어보자 모바일에도 OS가 있고, 결국 OS에서 동작하는 서비스를 개발하는 거기 때문에, 기술적 깊이가 20년 30년 파야할 만큼 깊지 않다.

그리고 모바일이라고 혼자 특별히 다른 지식을 요구하는 것도 아니다. 모바일도 똑같이 컴퓨터 구조, 보안, 메모리, 네트워크, 압축, 기타 트릭 등 다른 곳에서 사용되는 개념을 똑같이 사용한다.

윈도우든 iOS든 맥이든 안드로이드든 리눅스든 OS만 다를 뿐, OS 위에서 서비스를 만든 다는 건 똑같다. 그리고 OS는 추상화가 되어있기 때문에, 개발자는 프레임워크의 사용법과 컴퓨터 공학 지식들만 있으면된다. 여기에 경력이 생김에 따라 경험까지만 있으면 된다.

이렇게 얘기하면 그럼 모바일 개발자 왜 뽑나요? 전부다 풀스택 하지? 할 수 있는데, 어떤 플랫폼 위에서 돌아가는 서비스를 만들기 때문에 해당 플랫폼을 지속적으로 팔로우 할 수 있는 전문가가 필요하기 때문에 있는거다.

그리고 말을 이렇게 해서 그렇지 모바일도 깊게 알려면 몇 년으로 끝나는 수준이 아니다. 기초교육 12년 + 대학교 4년 + 현업 최소 6년이상 이렇게만 생각해도 22년이다. 나이로 환산하면 한국 남자들은 군대까지 다녀오니까 32~33살 정도 되겠지…

근데 이것도 ‘매우 똑똑하고 부지런한 사람 기준’이기 때문에 30대 중후반 정도 되어야 다른 분야로 확장하는 것 같다. 그리고 이것도 어디까지나 ‘서비스 개발'을 전제로 하는 얘기다.

서비스 개발의 범주를 넘어서 플랫폼이나 OS 수준까지 내려가면… 그리고 이 수준까지 가면 단순히 ‘모바일 애플리케이션 개발자'라고 부를 수 있을까?

모바일을 예로 들었는데 어느분야든 마찬가지다. 백엔드도 서버 앱 개발하다가 경력이 차면 DB도 보게되고 인프라도 보게된다.

한 분야를 진지하게, 깊게 팠다면 어느정도 수준이 넘어가면 다른 분야로 자연스럽게 확장하게 된다. 근데 보통 내가 ‘다른 분야로 확장해야지!’하기 전에 사회에서 확장하도록 시키는 것 같다…

얘기가 잠시 다른 곳으로 빠진 것 같이 느낄수도 있지만, 30대 중후반정도면 서비스 개발 수준에서는 한 분야에서는 더 깊게 팔만한 게 없다는 얘기를 한거다. 근데 우리는 65세까지 일해야한다! (시켜줄지 모르겠지만…)

그러면 40대에는 결국 매니징+실무를 하든지, 영역을 넓혀 풀스택이 되든지 하게 된다. 그래서 꽤 많은 개발자들이 풀스택을 경험해보게 된다. 그래서 풀스택이 믿고 걸러야하는 이상한 분야가 아니라는 것을 얘기하고 싶었다.

그리고 스타트업에선 풀스택의 가치가 매우 높다… 왜냐하면 스타트업은 항상 인력이 모자르고, 모든 프로젝트가 중요하고 바쁘다고 하기 때문에…

그래서 개발자의 노동력을 빈틈없이 극한의 효율로 돌려야 간신히 돌아간다. 그러다보니 메인 job이 있고, 유사시 유지보수를 대신 해줄 수 있는 다른 스킬도 있는 개발자가 인기가 많다.

그래서 스타트업에서 신입을 안뽑나보다.

풀스택의 장점은 개발적인 시야가 엄청 넓어진다.

데이터의 흐름이 머릿속에 그려진다. 사용자가 UI와 인터랙션을 했을 때, 해당 데이터가 어떤 플로우로 서버에 도달하고, 서버에서 어떻게 처리해서 DB로 넘기는지가 그려진다.

그렇기 때문에 각종 트릭들을 고안할 수 있다. 예를들면 트래픽이 몰리는 걸 온전히 서버에서만 처리하려고 하면 인력에 대한 리소스든 서버 비용이든 리소스가 증가하는 경우가 많다.

근데 개발자가 프론트에 대한 경험이 있다면, 프론트에서 화면을 쪼개서 트래픽을 분산시킨다거나 몇몇 로직들은 프론트에서 처리한 뒤 넘기게 한다든가 등의 트릭을 사용할 수 있다.

그리고 또 다른 장점은 관리직으로 넘어가기 쉽다는 것이다. 물론 관리직이 맞지 않아서 실무만 하고 싶은 개발자들도 정말 많지만, 한국에서는 어지간한 스페셜리스트가 아니면 보통 매니저의 처우를 더 잘해준다.

단점은 갈려나갈 확률이 높다. 회사 입장에선 “너 이것도 할 줄 알고 저것도 할 줄알아? 오 그럼 너가 다해.”가 될 수 있다.

그리고 소통해야하는 stakeholder들이 늘어난다.

다른 직군이랑 소통할 때 백엔드는 주로 기획자랑 소통하게 되고, 프론트면 디자이너랑 소통을 한다. 그런데 풀스택은 디자이너, 기획자랑도 소통해야하고 높으신 분들이랑도 소통을 해야할 수도 있다. 회사에 따라 PM, PO, 영업, 전략 등 다양한 사람들이랑 소통해야 할 수도 있다.

업무시간의 대부분이 개발이 아니라 소통이 될 수 있다.

앞으로 개발적인 글을 작성하기 전에 손좀 풀어볼겸 가벼운 주제로 얘기를 해보았다. 앞으로 다양한 개발분야의 글을 작성하기 위한 초석이라고 생각하고 주제를 정했다.

오랜만에 글을 써서 그런가 글이 어색하고 만족스럽지 않다.

COVID-19 이후로 개발자 bomb이 꺼져서 요즘은 주니어 개발자들이 유입이 안되는 것 같다.

하지만 진로를 고민하는 개발자들이나 학생들에게 도움이 되었으면 한다.

--

--

Doohyeon Kim
Doohyeon.kim

Developer, SW Engineer, Product Manager. Expert for startup company.