이제 막 진로를 정하고자 하는 신입개발자들은 백엔드로 커리어를 정할지, 프론트엔드로 할지 많은 고민이 될 것이라 생각한다. 진로를 정함에 있어 조금이라도 도움이 되고자 아는선에서 글을 써보고자 한다. (백엔드 개발자인 나의 편견과 주관이 다소 섞여 있을수 있으니, 혹시 불편하게 느끼시거나 잘못된 정보가 있다면 댓글을 달아주세요.)
1.수요공급측면
최근1년 스타트업으로 이직 후에는 개발자를 뽑기위해, 프론트엔드/백엔드 개발자들의 지원이력서들을 많이 검토하고 있는데, 최근들어 유독 저연차 프론트엔드 개발자들의 공급이 많아지고 있는 것을 느끼고 있다. 다시 말하면 괜찮은 2,3년차 백엔드 개발자들을 찾기가 힘들어졌다는 뜻이다.
대한민국 개발자의 주요 공급 root 중 하나인, 국비교육을 마치고 경력을 쌓기 시작함에 있어서 많은 개발자들이 프론트엔드를 선택하는 것 같다. 주변에 학원 출신 개발자분들에게 왜 이런 현상이 벌어지는지에 대해서 물어보면, 아무래도 백엔드는 시작하기에는 부담스럽지 않느냐라는 얘기를 하곤 한다.
내가 아는한 몇몇 부트캠프와 프론트엔드양성 국비교육을 제외한, 대부분의 국비교육이 java/spring 커리큘럼으로 구성된 백엔드 개발자 양성으로 알고 있었는데, 잘못 알고 있었나? java/spring 교육을 듣고, DB와 linux에 대해 배우면 백엔드 개발자로 커리어를 시작하는게 더 자연스러울 것 같은데 이부분은 다소 의문이 든다.
여하튼, 백엔드 개발자는 다소 기술적 허들이 높고 부담스럽다는 인식 때문인지, 양성교육의 문제인지, 최근 프론트엔드 개발자들의 공급이 많은 것은 사실로 보인다.(나는 개인적으로 화면개발이 더 부담스러운것 같은데..)
SW개발 시장의 급격한 성장과 함께 쏟아져 들어오는 프론트엔드 개발자들의 공급을 생각한다면, 이제 막 진로를 시작하는 분들은 그 수요/공급 측면도 고려하길 바란다.
2.기술적 허들
1)프론트엔드
프론트엔드 개발자에게 필요한 능력은 어떤 것일까? 기본적으로 html/javascript/css 에 대한 지식이 필요하다. 또한 react,vue.js, 앵귤러 같은 프론트엔드 프레임워크에 대한 능숙한 사용능력이 필요할 것이다. 더불어 브라우저에 대한 이해, http통신, 데이터자료구조에 대한 이해가 있어야 서버와 통신하여 받아온 데이터를 가공할 수 있을 것이라 생각한다.
그런데, 프론트엔드 기술은 변해도 너무 빨리 변한다는게 이 분야의 특징이라고 볼수 있다. 고작 6,7년 정도 전만해도 프론트엔드 개발자, 프론트엔드 영역이라는 용어들이 흔하지 않았다. html/javascript/css만을 만들어주는 퍼블리셔가 있었고, 이들이 만들어준 .html, .js, .css 파일을 가지고, 백엔드개발자(이 당시엔 그냥 개발자라 불림)들이 화면과 백엔드 프로그램을 같이 만들었었다. jsp, 타임리프와 같은 템플릿엔진을 사용한 서버사이드 렌더링 방식이 이 당시의 개발의 당연한 흐름이었다.
프론트엔드 영역이 생긴지가 몇년이 채 되지 않았고, 기술의 발전속도가 엄청 빠르다. vue, 앵귤러, react 등의 프레임워크의 발전속도가 빠르고, react내에서도 redux-saga, react-query 등 기술 branch들이 끊임없이 나오는 것으로 보인다. 이 트랜드들을 빠르게 follow-up하고 능숙도를 끌어 올릴 수 있는게 프론트엔드 개발자들의 기술적 요구사항 중 큰 부분이 되고 있다.
즉, 프론트엔드 개발자들은 기술, 트렌드에 민감하게 반응할줄 알아야 하고, 학습을 즐기고 변화하는 것에 스트레스 받지 않는 성격이 필요하다고 생각한다.(아.. 나는 프론트 할 성격은 못될듯)
2)백엔드
백엔드 개발자에게 필요한 능력은... 뭐라 정의하기가 애매한데, 화면개발을 제외한 모든 분야라고 생각하면 되지 않을까?
일단, 서버응용프로그램을 개발할수 있는 1가지의 언어(java, python, c, nodejs 등)의 능력이 필요하다. 또한 각 언어에 맞는 하나 이상의 프레임워크(spring, django, express등)의 능숙도가 필요하다. 이 프로그래밍 역량 안에 알고리즘, 자료구조에 대한 지식도 포함되어 있다. 특히, 서버의 효율성 측면에서 자료구조와 알고리즘은 더욱 중요할 것이다.
서버프로그램과 떼려야 뗄 수 없는 관계는 일단, 데이터베이스라고 볼수 있을것 같다. 대부분의 서버프로그램은 메모리에 모든 값을 저장해 둘수 없기 때문에 데이터베이스를 필요로 하고, ORM 기술의 발전과 함께 데이터베이스와 서버프로그램이 한 몸이 되었다. 그에 따라 database에 대한 깊은 이해가 필요하고, oracle, mysql, postgres, redis, mongodb 등 최소 한가지 이상의 DBMS에 대한 능숙도가 필요하다.
또한, 대부분의 기업용 서버프로그램은 리눅스 운영체제 위에서 동작한다. 그에 따라 리눅스(범 unix) 운영체제에 대한 이해가 필요하다. 운영체제 수업시간에 배웠을 cpu, 메모리, 스토리지, 스케쥴링 등의 기본적인 지식도 필요하고 설사 그런 부분은 잘 모른다고 하더라, 모니터링, 로그확인 등을 위해 기본적인 쉘 명령어들은 알고 있어야 서버프로그램 운용이 가능하다.
마지막으로, 네트워크에 대한 이해 또한 깊지는 않더라도, 최소한의 수준은 필요로 한다. 계층별 통신 프로세스에 대한 이해, 부하분산, 네트워크보안 등의 최소한의 지식을 필요로 하는데, 뭐 요새는 클라우드 환경에서 개발을 하다보니 네트워크에 대한 부담은 많이 줄어든 것은 사실이다. 그러나 aws vpc와 같은 클라우드 네트워크를 사용한다 하더라도, 네트워크 지식을 갖고 운용하는 것과 그렇지 않은것과는 분명 그 안정성과 숙련도 측면에서 차이가 발생할 수밖에 없다.
쓰다보니까 끝도 없는데ㅋㅋ 역시 백엔드는 깊고 넓고, 어렵다는 생각이 든다. 이러한 지식들은 차치하고, 일단 성격적인 측면에서 백엔드개발자가 되기에 적합한 성격을 고르자면, 꼼꼼한 성격이라고 말하고 싶다.
백엔드 개발자의 어떤 1가지 action이 프로그램, db, 운영체제 등의 전역적인 분야에 영향을 끼칠수가 있기 때문에, 빠른 손보다는 꼼꼼한 손이 필요하다. logical하고, 신중하게 영향도를 고려하고 충분한 스터디와 고민 끝에 action을 취할 줄 아는 사람이 백엔드에 적합한 성격이 아닐까 싶다.
3.연봉과 대우
최근들어 프론트엔드 개발자들의 연봉이 크게 상승했고, 갈수록 프론트(화면)의 중요성이 커지고 있기에 프론트엔드 기술의 발전은 계속될 것이고 그에 따른 엔지니어들의 연봉도 비례할 것이다. 그럼에도 그 동안은, 상대적으로 봤을때 전통적으로 백엔드 개발자들의 연봉이 더 높았던 것 같다. 그런데, 앞으로는 어떻게 될까?
(여기서부터는 완전한 내 주관)
앞서 말한 것처럼 백엔드의 기술적 깊이와 너비가 넓고 저연차 개발자들의 원활한 공급이 부족한 것으로 보이기에 백엔드 개발자들의 평균연봉은 지속적으로 우위를 보이지 않을까 싶다. 또한 고연차로 갈수록 고연차 백엔드개발자가 고연차 프론트엔드 개발자에 비해 우위를 가질수 있지 않을까라는 생각을 한다.
아무런 정보 없이 20년차 프론트엔드 개발자와 20년차 백엔드 개발자, 2명이 있다고 할때 어떤 개발자에게서 더 무게감이 느껴질까? 사람마다 다를 수는 있겠지만, 나는 아무래도 20년차 백엔드 개발자에게 더 기술적 깊이를 기대하게 된다. 오히려 프론트엔드는 트렌드가 빨리 변하기에 손이 빠르고 트렌드에 민감한 5,6년쯤 되는 개발자들이 더 잘할수도 있지 않을까 라는 생각마저 하게 된다.
백엔드는 오래된 기술들을 여전히 사용하고 있고, 공부해야할 분야와 깊이 있는 분야가 많기에 연차와 기술이 어느정도 비례할 것이라 기대하게 되는 것도 사실이다. (혹시, 연차 있는 프론트엔드에 대해서 저와 생각이 다르신분 있으면 댓글을 좀 달아주세용)
4.스트레스
이 부분은 모든 개발자들의 공통적인 부분이긴 하겠지만, 상대적으로는 백엔드 개발자들이 더 많은 스트레스와 불안함을 느끼며 살지 않을까 싶다. 서버프로그램, DB, 운영체제, 네트워크 등의 영향도들이 서로 뒤엉켜 있다보니 어디서 문제가 생길지 항상 불안함을 갖을 수밖에 없다. 일반적으로 서비스에 무슨 문제가 생겼다라고 한다면, 열에 아홉은 서버문제이고 이는 백엔드 개발자들의 몫이다.
트래픽이 터지는 이슈에 있어서도 백엔드 개발자의 스트레스가 더 큰 부분을 차지할 것이다. 프론트엔드는 파일을 클라이언트에 내려주고, 기본적으로 화면처리를 사용자의 브라우저가 처리하기에 프론트엔드는 트래픽이슈에는 크게 상관이 있지 않을 것이다. 이에 반해 서버는 트래픽이 폭발하면, 그 부하가 서버영역(서버프로그램, DB, 스토리지, 네트워크) 등 모든 부분에 영향을 끼치기에 대비를 잘해야 하고, 이에 따른 스트레스가 많다.
5.결론
새롭게 시작하시는 개발자들이, 위의 정보를 바탕으로 본인에게 맞는 분야의 기술스택을 선택하길 바란다. 가장 좋은것은 프론트엔드이든, 백엔드이든 IT서비스가 작동하기 위한 전반적인 원리를 이해하는 것이다.
프론트엔드 개발자라 하더라도 데이터와 서버에 대한 이해가 필요하고, 백엔드 개발자 또한 프론트엔드에서 어떻게 상태값을 관리하는지와 어떤 데이터를 어떤 형태로 내려줘야 효율적인지에 대한 이해가 필요하다.
즉, 풀스택에 가까운 이해도를 가지는 것이 베스트인 것은 사실이다. 다만, 풀스택은 현실적으로 어려운 선택지이므로 한 분야의 전문가가 되려고 노력하되, 다른 분야에 대한 관심과 공부가 당연히 필요할 것이다.(나부터..)
'프로그래밍 > 개발자 이야기' 카테고리의 다른 글
자기관리 - 만다라트 (0) | 2023.02.22 |
---|---|
코딩테스트(프로그래머스) 점수, 순위 (0) | 2023.01.20 |
이직할 회사 평균연봉을 정확하게 확인하는 법(feat. Dart시스템) (0) | 2022.12.13 |
개발자라는 직업의 장점 (0) | 2022.07.09 |
비전공자 빅데이터 커리어 정리 (0) | 2022.01.12 |