주니어 개발자가 오해하는 몇가지
F-Lab : 상위 1% 개발자들의 멘토링
- 성장에 관심이 많은 F-Lab 백앤드 멘토 Elkein
- 스타트업 여럿과 NHN, 넷마블, 크래프톤 등을 거쳤으며
- 게임 산업, 클라우드 플랫폼 개발, 웹 개발 등을 두루 경험한 19년 차 엔지니어
개요
많은 분이 백엔드 기준 한국에서 표준 스택인 자바, 스프링, JPA를 학습한다.여기에 공고에 많이 언급되는 Docker, 쿠버네티스, MSA를 배우려 한다. 심지어는 Hexagonal 아키텍처, DDD를 스터디 하는 일도 적지 않다. 하지만, 그러한 활용 기술이나 트렌디한 기술 보단 기본기가 좋아야 훌륭한 깊이 있는 개발자가 될수 있다. 사실, 채용이 과도하게 비대해졌던 2020~2021년을 제외하면 주니어 개발자를 뽑는 선택은 대개 둘 중 하나다.
첫 번째, '즉시 전력이자, 모든 것'
a. 개발자 채용이 어려워, 주니어 개발자에게 모든 개발을 맡김
b. 퀄리티 보다는 결과물
- 결과를 지향하다 보니, 성장보다는 해 온 데로, 시간을 부어서 결과물을 내 야하는 경우가 많음
- 이러한 경우에 오랜 시간 개발해도 좋은 성장을 하지 못할 가능성이 존재
두 번째, '중장기적으로 성장과 경험의 균형을 맞추면서, 회사를 이끌어 갈 인재로의 성장을 기대'
a. 여기서 중요한 것은 성장과 경험의 균형
- 빅테크 기업이라고 모두가 적절한 시점에 적절한 기회와 성장을 부여하지 않음
(* 이점이 ‘부바부’, ‘실바실’, ‘팀바팀’ 으로 불리는 조직에 따라 다른 포인트)- 스타트업 중에서도 이러한 균형을 잘 잡아주고, 좋은 개발자로 성장할 수 있는 환경의 회사가 많음
당연히 후자를 지향하고, 후자로써 나를 봐줄 회사를 가도록 노력해야 한다. 그러기 위해선 어떤 노력을 해야 할까?
주니어일수록 컴퓨터 과학 기초를 다지는 것이 무난한 선택지다
현상의 원인과 해결책을 파악하기 위해서는 컴퓨터 과학 기초가 중요한데, 이러한 기초를 위해서는 C언어를 배우고 C언어를 통한 다양한 기초 학습 주제를 체감하는 것이 좋다.
여전히 많은 기능은 C언어나 C++로 된 모듈이나 라이브러리를 활용하고 있다. 그 동작 원리는 당연하게도 다양한 컴퓨터 과학 기초에 기반한다. 그래서 우리는 원리를 파악하고, 이해하고 극복하려고 노력해야 한다. 그리고 그러기 위해서 나는 컴퓨터 과학 기초와 함께 C언어와 C++을 익히길 바란다.
컴퓨터 과학 기초를 이해할 수 있는 다양한 주제에 대한 실습과 이해를 위해선 C/C++로 미니 프로젝트를 다양한 연관 주제로 진행해본다면, 자바나 코틀린, Python, Node 등으로 구현된 프로젝트의 원리를 더 깊이 이해할 수 있는 잠재력을 키울 수 있다.
운영체제를 직접 만들어보기엔 너무 무거운 주제이기에, 미니 프로젝트를 통해 운영체제에 대한 이해를 높일 수 있다.
운영체제 이해도를 위한 미니 프로젝트 예시
* 간단한 스케줄러 구현
* 메모리 관리 시뮬레이션
* 간단한 파일 시스템 구현
* 프로세스 통신 시뮬레이션
* 부팅 로더 또는 간단한 커널
* 커맨드 라인 셀
주니어 개발자 혹은 취준생이 흔히 착각하게 되는 것
1) 공고를 보고, 해당 공고에 모든 기술을 쓸 수 있어야 한다는 것이다.
이는 정보의 불균형 보다는, 어떠한 정보의 의미를 파악하지 못해서 생기는 현상이다. 신입만 뽑는 공고는, 신입 공채 말고는 별로 없다. 신입 공채의 경우에는 어떠한 개발자를 뽑는가까지만 나와 있는 경우가 대다수다. 그래서 보통은 경력 3년 미만의 채용 공고나, 신입 무관에 대한 공고를 만나게 된다. 이러한 공고에 나와 있는 기술 스펙은, 이러한 기술 모두를 써봐야 한다는 것이 아니다.
하나의 기술을 쓰더라도 잘 써야 한다는 의미다.
그리고 이는 경력자, 시니어에게도 당연히 마찬가지의 의미다. 또한, 공고의 우대 사항, 지원 자격의 경우 매칭률이 높으면야 좋겠지만, 완벽히 모든 기술 스펙이 같을 수 없다는 것을 알기에 참고만 해도 된다. 여기서 주니어분들이나 취준생분들이 유념해야 할 점이 있다.
2) 경력 부심이 아니라, 프로젝트 경험이 일정 수준 이상이어야 된다는 의미다.
Hexagonal 아키텍처나 DDD, DOP, MSA등 다양한 주제에 대해서 가볍게 학습하는 것은 주니어분들에게도 도움이 되지만, 파고들기에는 적합한 주제가 아니다. Docker, 쿠버네티스도 가볍게 써보는 것 정도는 괜찮지만, 스터디를 하면서까지 파고들기에 적합하지 않다.
프로젝트 경험이 풍부해지기 전에는 이해도를 높이기 어려운 분야가 엄연히 존재한다는 점이다.
주니어일수록 개발 경험 자체가 다양하게 많이 쌓여야 한다.
또한, 원리를 파악하는 데에 집중해야 하는데, 아키텍쳐, VM, OS 등에 이해를 건너뛴 Docker나 쿠버네티스, MQ 등의 활용 기술은 원리보다 사용 경험에 치중할 확률이 높고, 오류가 발생했을 때 잘 해소를 못하거나, 지나치게 오래 걸리는 상황이 문제다.
예를 들어, Docker로 배포한 이미지에서 오류가 발생했을 때, 로그를 보는 법을 모른다거나, 메모리나 CPU, Disk 할당 등을 대충 잡고, 오류가 발생했을 때 구글링을 한 뒤 무작정 두 배씩 늘리는 등의 과정으로, 어떠한 문제로 인식해야 하고, 어떠한 해결책들이 있으며, 어떠한 방식으로 처리해야 하는지를 통해 성장해야 하는데, 경험을 성장과 지식, 더 높은 이해도로 승화시킬 기회를 잃는 경우가 많았다.
그래서, 기본이 중요하고, 활용 기술을 쓰더라도 그 이해도를 원리를 파악하면서 써야 하는데, 원리를 파악했는지, 아닌지 긴가민가 하다 보면, 해당 기술을 거슬러 올라가며 학습하는 것도 좋은 방법이다.
핵심은 활용 기술을 쓸 때 원리를 파악하면서 써야 하고, 어떠한 주제를 정하고 학습할 때, 채용 공고나 여러 커뮤니티, 동료들이 언급한 기술을 따라가기보다는 이해도가 있는 기술에서 조금 앞서 있거나, 연장선에 있는 경험으로 이어가면서 한발씩 전진하는 방식을 택하길 권한다.
어떠한 기술을 잘 알고 있는지 확인하는 방법
자신이 이해하고 있는 기술, 방법론, 아키텍처 등에 대해서 글을 써보면 된다.
누군가에게 설명하기는 애매할 수 있는 것은, 상대방이 그것에 대해서 모를 경우, 제대로 된 질의응답을 받지 못해 잘못 알고 있거나, 제대로 설명하지 못함에도 스리슬쩍 넘어가서, 자신이 잘 알고 있는 것 같은 착각에 빠질 우려가 있기 떄문이다. 글을 써서 정리하는 것의 장점은, 자신이 쓴 글을 다시 읽으면서 논리력을 보강하게 되고, 부족한 논리력을 자각하기도 한다.
또한 누군가가 보게 될 거라는 긴장감과 기대감이 글 쓰기에 집중하면서 생각을 정리하고 복기 하는 계기가 될 수 있다. 이러한 글을 쓸 때는, 장단점을 나열하고, 비교하고, 특정 기술을 학습하게 된 계기나, 선택하게 된 계기를 언급하게끔 유도하는 편인데, 이 과정에서 부족한 논리력이 근거였다면 여실히 드러나기 때문이다.
많은 사람이 쓰기 때문에 선택했거나, 주변에서 많이 얘기가 나와서 배우고 있다거나 등의 접근이 의외로 많다.
논리력을 위해서는 공신력이 높은 자료일 수록 유리하므로, 글로 정리하다보면 최대한 신뢰성 있는 문서를 참고하는 습관을 들이게 되는데, 이는 공식 문서나, 공식 사이트의 자료를 참고하며 개발하는 좋은 습관으로 이어지는 계기가 되기도 한다.
자연스레 퀄리티를 높이는 좋은 습관으로 이어질 수도 있는 방법이 바로 글 쓰기다.
마치며
많은 분과 멘토링을 진행하고, 지인이나, 지인의 지인 등의 많은 분과 모의 면접을 진행하면서 채용 공고를 잘못 해석해서 시간 소비를 엉뚱한 방향으로 하는 경우를 아주 많이 봤다.
기초를 잘 다질수록 고점이 높아지고, 장기간 흥행할 수 있는 경쟁력 있는 개발자가 되기에 더 유리해진다.
이를 위해서, 조금 더 기초에 충실하고, 탄탄한 학습, 그리고 그러한 노력이 빛을 발하게 하려고 적절한 시점과 적절한 난도, 그리고 아주 많은 회사가 선호하는 주니어 개발자의 역량 중 하나인 논리력을 키우는 계기가 되었으면 좋겠다.
사수가 없어 성장하기 힘드신가요?
F-Lab에서 빅테크 기업 타이틀과 실력을 겸비한 멘토님들께 실력 향상을 위한 멘토링을 받을 수 있습니다.
개발 경험이 있는 취준생이거나 7년 이하 경력 개발자라면 충분히 멘토링을 받아 뛰어난 개발자로 성장하실 수 있습니다.
이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.