정말 나만 모르는 걸까? 백엔드 주니어 개발자를 위한 경험담과 조언
F-Lab : 상위 1% 개발자들의 멘토링
📌 글 작성
네이버에서 데이터 엔지니어로 커리어를 시작해 마이리얼트립, 카카오페이를 거쳐 현재 스타트업에서 백엔드 개발자로 재직 중인 시니어 엔지니어 Scott
🗣
좋은 코드와 인연으로 세상에 기여하고 싶습니다.
개요
![](https://file.f-lab.kr/blog/309a621e-ee90-4f49-89b5-755bb88bacbd-p6Yut-Oj3M01mkrW.jpg)
취업이 참 어렵습니다. 학교를 졸업하고 사회에 나가는 첫걸음은 항상 어려웠다고는 하지만, 개발자로 커리어를 시작하고자 준비해오던 분들께는 코로나 팬데믹 상황으로 촉발된 비대면 트렌드와 저금리 금융 상황을 등에 업고 폭발적인 성장만을 거듭해오던 테크 업계의 분위기가 한순간에 싸늘하게 식어버린 지금 상황이 생경하다 못해 놀랍게 느껴지실 것 같습니다.
날이 갈수록 서류 합격률은 떨어지고, 애써 서류 전형을 뚫어내고 치르는 코딩 테스트에는 이게 입사 전형인지, 정보 올림피아드인지 헷갈릴 정도의 어려운 알고리즘 문제들이 주어집니다. 내 주변과 오픈채팅방 속의 취준생들은 나보다 더 많은 경험과 지식을 갖고 있는 듯합니다.
F-Lab에서 멘토로서 개발자 취업을 준비하는 멘티분들을 만나다 보니, 5년 전 첫 개발자 취업을 제가 갖던 불안과 답답함을 지금의 멘티분들이 그대로 느끼고 있음을 알게 되었습니다. 이 글을 통해 제가 지난 5년 동안 치열하게 업계에서 구르며 배우고 느낀 것을, 5년 전의 저와 지금 수많은 주니어 개발자분들이 느끼고 계신 그 불안감을 기반으로 공유해 드리고, 각자의 상황에서 애쓰고 계신 많은 분들께 조금이나마 위로를 전하고 싶습니다.
의외로 다들 모른다 (1) - localhost:8080의 함정
적어도 취업을 앞둔 주니어 개발자의 레벨에서는, 나보다 많은 걸 아는 것처럼 보이는 분들도 실제로는 기술에 대한 이해가 별로 없는 경우가 많습니다. 정확히 말하면, 현업 경험이 없는 백엔드 개발자의 기술이나 프레임워크에 대한 이해는 대체로 비슷한 수준인 경우가 많습니다(물론 소수의 괴수나 천재는 늘 예외입니다).
이해를 돕기 위해 데이터 엔지니어링 포지션에 지원한 한 신입 개발자의 가상의 면접 사례를 살펴보겠습니다. 말 그대로 이해를 돕기 위해 꾸며내어 본 것이지만, 제가 면접관으로 면접에 참여하며 드물지 않게 보던 사례들이기도 합니다.
면접관: 비정형 텍스트 데이터 가공을 위해 다양한 기술을 학습하고 적용하신 것 같은데요, 어떤 기술들이었는지 설명해 주시겠어요?
지원자: 네, 우선 RDB 사용에 한계를 느끼고 Hadoop 클러스터를 구성한 뒤, Spark를 세팅하였습니다. 이후 Jupyter Notebook을 셋업하여 pyspark를 통해 데이터를 빠르게 뽑아낼 수 있었습니다.
면접관: 해당 클러스터들은 어떤 환경에 구축하였나요?
지원자: 학습 목적이었으므로 로컬에 구축하였습니다.
면접관: 데이터의 크기는요?
지원자: 약 5만 건 정도였습니다.
면접관: 5만 건 정도의 데이터라면 더 쉽고 좋은 방법이 있었을 것 같은데, 혹시 대안은 없었을까요?
지원자: ??
현업에 진출하기 전까지는
1) 충분한 경험이 될 정도의 많은 트래픽/데이터를 받는 것이 거의 불가능하고
2) 로컬호스트 이외에 지속성을 가질 수 있는 호스팅 환경을 준비하기가 어렵습니다.
Kaggle, AWS와 같이 좋은 데이터와 퍼블릭 클라우드를 제공하는 서비스가 있는 지금도 똑같습니다. 다양한 기술을 학습해 보려고 한 시도는 멋지지만, 자신이 갖고 있는 대안에 대해서도 함께 이야기한 후, '학습 목적'에서 그런 시도들을 했다고 멋지게 말할 수 있는 지원자는 많이 보지 못한 것 같습니다.
나보다 더 다양한 경험을 해본 것 같다고 지레 겁먹지 마시기 바랍니다. 사실 다들 깊이는 비슷합니다.
의외로 다들 모른다(2) - 트러블 슈팅을 해본 적이 없다
예측 불가하고 변화무쌍한 트래픽과 비즈니스 로직을 계속 받아줘야 하는 현업 개발과는 다르게, 취업 준비 단계에서 경험할 수 있는 것은 모든 상황이 예측 가능하거나 통제된 실험실 환경입니다. 실제 불특정 다수의 인간 유저가 뿜어내는 트래픽과 nGrinder, Vegeta 같은 도구로 쏘는 가상 트래픽은 그 양상이 아예 다릅니다(물론 이 도구들이 서비스 릴리즈 전 트래픽을 모의해 볼 수 있는 좋은 도구임을 부정하는 것은 아닙니다).
현업 개발자가 가장 어려움을 겪고, 내 동료가 유능하기를 기대하는 포인트는 바로 불특정 트래픽, 그리고 그것이 만들어내는 다양한 트러블 상황에 대해 경험을 가진 상태에서 그 경험을 기반으로 우리 시스템을 안정적으로 운영할 수 있는 능력입니다. 이 능력을 취업 준비생이 집에서 만들기란 거의 불가능에 가깝습니다.
다양한 기술 스택으로 애플리케이션을 구성하는 것보다 중요한 것이 바로 다양한 트래픽을 받아보며 장애에 대처해 본 경험입니다. 만약 여러분이 현업 경험이 없는데도 규모 있는 사이드프로젝트나 개인 창업 경험을 통해 장애에 대처해 본 경험이 있다면, 그리고 이를 통해 학습해 본 주제들이나 기술이 있다면 반드시 기술 블로그에 정리하시고 면접장에서 흥미진진하게 이야기하시기 바랍니다. 여러분 앞에 앉아있는 현업 개발자 면접관들의 눈에서 꿀이 떨어질 것입니다.
생각해 보면 저는 이 측면에서는 운이 좀 좋았던 것 같습니다. 개발자 취업을 준비하던 대학생 시절 저는 학교의 학생식당 메뉴를 알려주는 간단한 카카오톡 챗봇을 만들어 운영하고 있었습니다. 서비스 출시 단계에서는 점심시간에만 트래픽이 몰릴 것으로 예상하고 그에 맞는 대비를 하고 있었는데, 학생식당에서 아침을 먹는 분들이 그렇게 많은 줄 몰랐고(당시까지 저는 자취 경험이 없었습니다) 맛있는 메뉴가 나오는 날이면 입소문이 퍼져 조회수가 평소보다 훨씬 늘어날 수도 있다는 걸 처음 경험해 보게 되었습니다. 서비스를 AWS Lambda와 DynamoDB 기반으로 운영하고 있었는데, 많은 트래픽을 받기 위해서 어떤 최적화를 해야 할지 깊이 있게 고민하는 경험을 가져볼 수 있었고, 이후 개발자로 첫 취업을 하는 데에도 큰 도움을 주었던 경험이 됐던 기억이 납니다.
나만 모르고, 나만 부족하다는 생각이 굉장히 의미 없고 괜한 걱정이란 사실을 정리해 봤는데요, 그럼에도 불구하고 다른 지원자들에 비해 돋보여서 다수의 기업에 합격하는 분들이 많다는 사실 또한 부정하기 어렵습니다. 현업 경험과 멘토 경험을 통해 이런 분들이 충실하게 따른 원칙이 몇 개 있다는 것을 알게 되었는데요, 지금부터 정리하여 보겠습니다.
기회를 잡는다
![](https://file.f-lab.kr/blog/fe8e42e0-5c7e-4332-beca-c342d02a5d73-p6YveeOj3M01mkrY.jpg)
개발자 취업에 관한 얘기만은 아닐 수도 있습니다. 취업에 성공하는 분들은 항상 기회를 잡을 준비가 되어 있는 분들입니다. 기업이 개발자를 채용하는 방법에는 대규모 공채도 있지만 팀 단위의 작은 채용도 존재함을 항상 염두에 둬야 합니다. 개인적인 경험으로는 대규모 공채보다 작은 채용에서의 성공률이 훨씬 높았던 것 같습니다.
기회를 잡는다는 것은 단순히 운에 관한 이야기는 아닙니다. 기회를 잡을 준비가 되어 있지 않다면 자신에게 기회가 온 줄도 모르고 흘려보내게 되어 있습니다. 면접에서 할 이야기가 많이 준비되어 있다면, 면접장에 들어가기 위한 준비는 또다른 시간과 노력을 들여서 진행해야 합니다. 예를 들어, 1차 단계에서 코딩 테스트를 진행하지 않는 기업은 이제 거의 찾아보기 어렵습니다. 내 약점이 코딩 테스트라면 알고리즘 대회 입상자가 되진 못해도 1차 전형 단계 수준의 코딩 테스트를 통과할 수 있는 실력은 갖춰둬야 합니다. 내 이력과 경험이 매력적으로 보일 수 있도록 GitHub 관리와 기술 블로그 운영을 평소에 잘 해둬야 합니다.
면접장에서 쏟아낼 지식은 누군가가 속성으로 주입해 줄 수 있지만, 면접장에 들어가기 위한 준비와 노력, 그리고 서류를 낼 수 있는 기회를 포착하는 일은 그 누구도 대신해 줄 수 없음을 항상 기억하시기 바랍니다.
Why를 항상 궁금해 하고 정리한다
한 줄의 코드를 짜더라도 그 안에 이유가 담겨 있고 고민이 선행되어야 ‘개발자가 믿을 수 있는 개발자’로 성장할 수 있습니다. 별생각 없이 짠 코드를 동료가 알아채지 못할 거라고 생각하지만, 불과 며칠간의 협업으로도 바로 알아볼 수 있습니다. 여러분이 취업을 준비하고 있는 개발자라면 내가 GitHub에 올리고 이력서에 자랑하는 코드가 어떤 인상을 줄지에 대해서도 고민해야 합니다.
어떠한 이유들을 갖고 기술적인 결정들을 내렸는지 항상 정리하시기 바랍니다. 정리하려면 고민이 선행되어야 함은 말할 필요도 없겠습니다. 무지성 코딩을 경계하시고, 여러분 주변의 멘토가 되어줄 수 있는 개발자들에게 항상 베스트 프랙티스를 묻고 실천하시면 좋겠습니다.
localhost:8080의 함정을 피하기 위해서 아키텍쳐에 대한 의사결정도 단순 ‘학습 목적’보다는 더 많은 이유들이 있으면 좋겠다는 생각이 듭니다. 왜 이런 구조를 갖고 이런 인프라를 구성했는지 이유가 분명하면 분명할수록 좋습니다. 현업에서는 ADR이라는 문서를 작성하기도 합니다. 이렇게 정리된 근거와 이유들은 나의 이력서를 빛나게 해줄 것이고, 면접장에서도 나를 돋보이게 만들어줄 것입니다.
느긋하게 코딩을 즐긴다
![](https://file.f-lab.kr/blog/fdd5262d-3215-4185-86f5-3b1f9ed0d75a-p6YvjeOj3M01mkr-.jpg)
치열하게 취업을 준비하는 것에 대한 이야기를 하고 있었는데 당황스러울 수도 있겠습니다. 그러나 제가 지켜본 취업에 성공한 많은 분들은 그저 느긋하게 코딩을 즐기는 성향인 경우가 많았습니다. 지나치게 치열하거나 간절하지도 않고, 그저 코딩이 좋아서 즐기고 있다가 관심 가는 기업에 이력서를 던지고 합격하는 경우를 많이 봤습니다.
개발자라는 직업은
1) 개인 창업의 가능성이 얼마든지 열려있고
2) 상대적으로 노동시장에서 안정된 고소득 일자리를 찾을 수 있으며
3) 공급이 제한된다는 측면에서 전문직의 특성을 갖고 있다고 생각합니다만, 통상적으로 이야기하는 회계사, 변호사, 세무사와 같은 전문직들과 달리 라이센스를 필요로 하지는 않습니다. 이 말은 우리가 한정된 자릿수를 놓고 싸워야 하는 경쟁 상대가 아닌, 함께 즐기며 성장해 가면 함께 더 많은 가치를 만들 수 있는 운 좋은 직업을 가진 사람들이라는 말이 됩니다.
“나는 무조건 네카라쿠배에 입사한다” 혹은 “옆 사람을 이긴다” 등의 경쟁심은 오히려 나를 지치게 하는 독이 되는 경우가 많습니다. 그렇게 하지 않아도 좋은 처우를 받으며 빛나는 커리어를 만들 수 있는 회사가 시중에 많이 있습니다. 지나친 간절함과 투쟁심은 조금 내려놓으시고, 차분히 코딩을 즐기며 기회를 잡을 수 있는 준비를 해나가는 것에 집중하면 좋겠습니다. 차분히 코딩을 즐길 수 있는 마음이 먹어지지 않는다면, 내가 이 일을 앞으로 오랜 시간 밥벌이로 할 수 있는 사람인가도 다시 한번 고민해 보면 좋을 것 같습니다.
많은 분들이 취업 준비로 고통받고 있는 요즘의 시간에 짤막한 글로 조금의 위로를 드리려고 했는데, 위안이 되는 글이었는지는 잘 모르겠습니다. 취업난 속에 취준생들의 스펙 인플레이션 현상은 나날이 심해지고, 우리 테크 업계에서도 같은 현상이 일어나고 있는 듯합니다.
그럼에도 불구하고 지나치게 서두르거나 조급해하지 말고 정석을 따르며 노력하는 것은 항상 좋은 결과를 가져다주는 것 같습니다. 그런 방향으로 조금씩 나아가는 분이 “3개월 안에 취업할 수 있을까요?”라고 제게 물어보신다면 저는 잘 모르겠다고 답해야 할 것 같습니다. 그러나 “1년 안에 괜찮은 직장에 취업할 수 있겠죠?”라고 물으신다면 저는 “네, 물론이죠!”라고 대답할 것 같습니다.
하루 이틀 반짝 하는 단기 급등보다는 천천히 우상향해서 주봉, 월봉으로 양봉을 만드는 일이 훨씬 값진 일임을 잊지 마시고, 힙한 기술과 남들이 다 하는 것 같은 프레임워크를 써보는 일보다 나만의 스토리를 만드는 일, 그리고 좋은 멘토를 찾아 곁에 두는 일이 훨씬 중요한 일임을 기억하시기 바랍니다. 어제보다 한 발짝씩만 더 나아가면 됩니다.
모두 파이팅입니다!
이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.